数据库应用技术上机报告.docx
《数据库应用技术上机报告.docx》由会员分享,可在线阅读,更多相关《数据库应用技术上机报告.docx(11页珍藏版)》请在冰豆网上搜索。
数据库应用技术上机报告
数据库应用技术上机报告
实验五:
T-SQL编程
姓名:
刘运凯
学号:
10070050
班级:
10计科2
一、实验目的与要求
1、掌握用户自定义类型的使用;
2、掌握变量的分类及其使用;
3、掌握各种运算符的使用;
4、掌握各种控制语句的使用;
5、掌握系统函数及用户自定义函数的使用;
二、实验准备
1、了解T-SQL支持的各种基本数据类型;
2、了解自定义数据类型使用的一般步骤;
3、了解T-SQL各种运算符、控制语句的功能及使用方法;
4、了解系统函数的调用方法;
5、了解用户自定义函数使用的一般步骤;
三、实验内容
1、已知数据库YGGL中有3个基本表Employees、Departments和Salary,其表结构分别如下:
列名
数据类型
长度
是否可空
EmployeeID
定长字符串型(char)
6
×
Name
定长字符串型(char)
10
×
Education
定长字符串型(char)
4
×
Birthday
日期型(datetime)
系统默认
×
Sex
位型(bit)
系统默认
×
WorkYear
整数型(tinyint)
系统默认
√
Address
不定长字符串型(varchar)
40
√
PhoneNumber
定长字符串型(char)
12
√
DepartmentID
定长字符串型(char)
3
×
表1Employees表的结构
列名
数据类型
长度
可空
DepartmentID
定长字符串型(char)
3
×
DepartmentName
定长字符串型(char)
16
×
Note
不定长字符串型(varchar)
1
√
表2Departments表的结构
列名
数据类型
长度
可空
EmployeeID
定长字符串型(char)
3
×
InCome
浮点型(float)
20
×
OutCome
浮点型(float)
100
×
表3Salary表的结构
在数据库YGGL按要求完成以下题目
1、T-SQL编程(必做题)
【1】变量的使用:
定义一个变量,用于获取‘102201’员工的电话号码
DECLARE@varlchar(10)
SET@varl='102201'
SELECTPhoneNumber
FROMEmployees
WHEREEmployeeID=@varl
【2】流程控制语句的使用:
判断姓名为王林的员工实际收入是否高于3000,如果是则显示其收入,否则显示‘收入低于3000
IF
(SELECTInCome
FROMSalary,Employees
WHERESalary.EmployeeID=Employees.EmployeeID
ANDName='王林'
)>=3000
SELECTInCome
FROMSalary,Employees
WHERESalary.EmployeeID=Employees.EmployeeID
ANDName='王林'
ELSE
SELECT'收入低于3000'
【3】使用系统内置函数完成下列操作
(1)删除字符串“MICROSOFTSQLSERVER”左边的空格,显示结果。
DECLARE@varlchar(50)
SET@varl='MICROSOFTSQLSERVER'
SELECTLTRIM(@varl)
SELECT@varl
(2)截取字符串“MICROSOFT”最左边的5个字符,显示结果。
DECLARE@varlchar(50)
SET@varl='MICROSOFT'
SELECTLEFT(@varl,5)
SELECT@varl
(3)截取姓名“李晓亮”中的第2个汉字,显示结果。
DECLARE@varlchar(50)
SET@varl='李晓亮'
SELECTSUBSTRING(@varl,2,1)
SELECT@varl
(4)获取当前系统日期和对应的年,月,日。
显示结果。
selectGETDATE()as'当前日期'
(5)将字符串‘050624’的类型转换为数值型和日期型,显示结果。
DECLARE@varlchar(50)
SET@varl='050624'
SELECTYEAR(@varl)
SELECT@varl
SELECTMONTH(@varl)
SELECT@varl
SELECTDAY(@varl)
SELECT@varl
(6)将数值506的类型转换为日期型,显示结果。
2、在数据库PXSCJ中完成如下T-SQL编程(选做题,任选其中8道题)
【1】创建局部变量@var1、@var2并赋值,然后输出变量的值。
DECLARE@varlchar(10),@var2char(30)
SELECT@varl='12',@var2='21'
SELECT@varlAS'变量',@var2AS'变量'
【2】创建一个名为sex的局部变量,并在SELECT语句中使用该局部
DECLARE@Stringchar(10)
SET@String='计算机'
SELECT@String
【3】使用查询给变量赋值。
DECLARE@achar(8)
SET@a=(SELECT姓名
FROMxsb
WHERE学号='081101')
SELECT@a
【4】使用SELECT给局部变量赋值。
【5】给局部变量赋空值。
DECLARE@var1nvarchar(30)
SELECT@var1='刘丰'
SELECT@var1=
(
SELECT姓名
FROMxsb
WHERE学号='089999'
)
SELECT@var1AS'NAME'
【6】使用游标变量。
【7】在master数据库中,建立表bitop,并插入一行,然后将a字段和b字段列上值进行按位与运算。
【8】查询成绩高于“林一帆”最高成绩的学生姓名、课程名及成绩。
usepxscj
go
select姓名,课程名,成绩
fromxsb,cjb,kcb
where成绩>all
(
selectb.成绩
fromXSBa,cjbb
wherea.学号=b.学号anda.姓名='林一帆'
)
ANDxsb.学号=cjb.学号
ANDkcb.课程号=cjb.课程号
AND姓名<>'林一帆'
【9】查询总学分在40~50的学生学号和姓名。
SELECT学号,姓名
FROMXSB
WHERE总学分>=40AND总学分<=50
【10】查询总学分在范围40~50之外的所有学生的学号和姓名。
【11】查询课程名以“计”或C开头的情况。
【12】查询所有选课学生的姓名。
【13】多个字符串的联接。
【14】如下程序用于查询总学分大于42的学生人数。
DECLARE@numint
SELECT@num=(SELECTCOUNT(姓名)FROM学生表WHERE总学分>42)
IF@num<>0
SELECT@numAS'总学分>42的人数'
【15】如果“数据库原理”课程的平均成绩高于75分,则显示“平均成绩高于75分”。
【16】IF…ELSE语句的嵌套使用。
【17】使用第一种格式的CASE语句根据性别值输出“男”或“女”。
【18】将学号为081101的学生的总学分使用循环修改到大于等于60,每次只加2,并判断循环了多少次。
【19】判断是否存在学号为081128的学生,如果存在则返回,不存在则插入081128的学生信息。
【20】如下语句设定在早上八点执行存储过程sp_addrole。
【21】显示ABS函数对三个不同数字的效果。
selectabs(-4.0),abs(0.0),abs(9.0)
【22】如下程序通过RAND函数返回随机值。
selectstr(RAND()*100)
go
【23】查找字符串'sql'的最左端字符的ASCII的值。
【24】返回课程名最左边的4个字符。
selectleft(课程名,4)
fromkcb
orderby课程名
【25】使用LTRIM字符删除字符变量中的起始空格。
【26】如下程序在一列中返回XSB表中的姓氏,在另一列中返回表中学生的姓名。
【27】显示字符串“China”中每个字符的ASCII值。
DECLARE@aint,@bchar(8)
set@a=1
set@b='China'
while@a<=datalength(@b)
begin
selectascii(substring(@b,@a,1))as'ascii码'
char(ascii(substring(@b,@a,1)))as'字符'
set@a=@a+1
end
【28】如下程序将检索总学分50-59分的学生姓名,并将总学分转换为char(20)。
【29】声明了一个游标,并用SELECT显示@@CURSOR_ROWS的值。
【30】用@@FETCH_STATUS控制在一个WHILE循环中的游标活动。
【31】创建用户定义函数,实现计算全体学生某门功课的平均成绩的功能。
【32】调用例31定义的函数average。
【33】调用例31中计算平均成绩的函数。
【34】在PXSCJ中建立一个course表,并将一个字段定义为计算列。
【35】对于PXSCJ数据库,为了让学生查询其各科成绩及学分,可以利用XSB、KCB、CJB三个表,创建视图。
【36】调用st_score()函数,查询学号为“081101”学生的各科成绩及学分。
【37】在PXSCJ数据库中创建返回表的函数,通过以学号作为实参,调用该函数,可显示该学生各门功课的成绩和学分。
【38】如下语句查询学号为081101学生的各科成绩和学分。