数据库实验TransactSQL程序设计与 索引的创建和使用文档格式.docx
《数据库实验TransactSQL程序设计与 索引的创建和使用文档格式.docx》由会员分享,可在线阅读,更多相关《数据库实验TransactSQL程序设计与 索引的创建和使用文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
![数据库实验TransactSQL程序设计与 索引的创建和使用文档格式.docx](https://file1.bdocx.com/fileroot1/2023-2/3/ecde5b47-fd5d-4b34-9791-acf5a23542c4/ecde5b47-fd5d-4b34-9791-acf5a23542c41.gif)
ANDT_COURSE.C_NAME='
高等数学'
SELECTT_SCORE.S_NUMBER,S_NAME,C_NAME,SCORE
FROMT_STUDENT,T_COURSE,T_SCORE
WHERET_STUDENT.S_NUMBER=T_SCORE.S_NUMBER
ANDT_SCORE.C_NUMBER=T_COURSE.C_NUMBER
AND(
SCORE=@MaxScore
OR
SCORE=@MinScore
)
5:
计算表达式的值,并将结果赋给变量@ExpResult。
DECLARE@ExpResultnumeric
SET@ExpResult=67%31
SELECT@ExpResultAS'
表达式计算结果'
6:
查询05541班的学生信息,要求列出的字段为:
班级、本班内的学号、姓名、性别、出生日期、政治面貌。
SELECT班级=SUBSTRING(S_NUMBER,1,5),
本班内的学号=SUBSTRING(S_NUMBER,6,7),
姓名=S_NAME,
性别=SEX,
出生日期=BIRTHDAY,
政治面貌=POLITY
WHERESUBSTRING(S_NUMBER,1,5)='
7:
使用比较运算符计算表达式的值。
DECLARE@Exp1integer,
@Exp2integer
SET@Exp1=30
SET@Exp2=50
IF@Exp1>
@Exp2
PRINT'
第1个变量的值大于第2个变量的值。
'
ELSEIF@Exp1=@Exp2
第1个变量的值等于第2个变量的值。
ELSE
第1个变量的值小于第2个变量的值。
8:
@Exp2integer
@Exp2AND@Exp1<
@Exp1>
@Exp2的结果值为真。
ELSE
@Exp2的结果值为假。
@Exp2OR@Exp1<
9:
使用字符串连接运算符计算表达式的值。
DECLARE@ExpResultchar(60)
SELECT@ExpResult='
湖北省武昌区'
+'
湖北大学'
数计学院'
字符串的连接结果'
10:
使用括号改变表达式的计算顺序。
湖北省武汉市'
DECLARE@ExpResultint
SELECT@ExpResult=100+(20-5)*2/3
计算结果'
11:
从STUDENT数据库中返回T_STUDENT表的第4列的名称。
SELECTCOL_NAME(OBJECT_ID('
T_STUDENT'
),4)
AS'
T_STUDENT表中第4列的名称'
12:
从STUDENT数据库中返回T_STUDENT表的S_NUMBER列的长度。
SELECTCOL_LENGTH('
'
S_NUMBER'
)
T_STUDENT表中的S_NUMBER列的长度'
13:
检查sysdatabases中的每一个数据库,使用数据库标识号来确定数据库名称。
USEmaster
SELECTdbid,DB_NAME(dbid)ASDB_NAME
FROMsysdatabases
ORDERBYdbid
14:
在T_STUDENT表中先插入三条新记录,其中的POLITY字段的值为NULL,要求对记录进行查询时,对应的NULL值在显示时显示“群众”。
INSERTINTOT_STUDENT(
S_NUMBER,S_NAME,SEX)
VALUES(
Y0452201'
'
王志鹏'
男'
Y0452202'
周小娟'
Y0452203'
李磊'
SELECTS_NUMBERAS学号,S_NAMEAS姓名,
SEXAS性别,POLITYAS政治面貌
WHERESUBSTRING(S_NUMBER,1,6)='
Y04522'
SEXAS性别,(ISNULL(POLITY,'
群众'
))AS政治面貌
15:
利用@@ERROR返回程序的错误代码。
INSERTINTOT_COURSE
(C_NUMBER,C_NAME,HOURS,CREDIT)
VALUES
('
40050407'
C语言程序设计'
72,3)
SELECT@@ERRORAS'
第一次插入记录时的错误代码'
VALUES
VB程序设计'
64,2.5)
第二次插入记录时的错误代码'
16:
显示到当前日期和时间为止试图登录SQLServer的次数。
SELECTGETDATE()AS'
今天的日期和时间'
@@CONNECTIONSAS'
企图登录的次数'
17:
返回在程序执行过程中上一条SQL语句影响的记录数。
SELECT*
SELECT@@ROWCOUNTAS'
第一次查询返回的记录数'
WHERESEX='
第二次查询返回的记录数'
40050408'
第一次插入记录时影响的记录数'
VC程序设计'
第二次插入记录时影响的记录数'
18:
返回SQLServer安装的日期、版本和处理器类型。
SELECT@@VERSIONAS'
当前的SQLServer信息'
19:
使用RTRIM函数删除字符型字段中的尾部空格。
T_COURSE'
C_NAME'
)AS'
课程名称列的长度'
C_NAMEAS课程名称,
DATALENGTH(RTRIM(C_NAME))AS'
课程名称列的实际数据长度'
FROMT_COURSE
20:
使用SUBSTRING函数、LEFT函数和RIGHT函数求T_STUDENT中的班级名称和学号。
SELECTSUBSTRING(S_NUMBER,1,LEN(S_NUMBER)-2)AS'
班级'
RIGHT(RTRIM(S_NUMBER),2)AS学号,
S_NAMEAS姓名,
SEXAS性别,
BIRTHDAYAS出生日期,
POLITYAS政治面貌
WHERELEFT(S_NUMBER,5)='
21:
在第一个字符串(GoodMorning)中删除从第6个位置(字符M)开始的7个字符,然后在删除的起始位置插入第二个字符串(Afternoon),创建并返回一个新的字符串。
DECLARE@varStringchar(30)
SELECT@varString=STUFF('
GoodMorning'
6,7,'
Afternoon'
SELECT@varStringAS'
返回的字符串'
22:
查询T_STUDENT表的学生信息,要求显示的字段为:
学号、姓名、性别和学生的年龄。
SELECTS_NUMBERAS学号,
YEAR(GETDATE())-YEAR(BIRTHDAY)AS年龄
23:
在T_STUDENT表中查询每个学生的出生月份。
DATEPART(Month,BIRTHDAY)AS出生月份
24:
从系统当前日期中返回系统当前的年份数、月份数和天数。
SELECTYEAR(GETDATE())AS当前年份,
MONTH(GETDATE())AS当前月份,
DAY(GETDATE())AS当前天数
25:
在同一表达式中使用CEILING(),FLOOR(),ROUND()函数。
SELECTCEILING(28.6)AS'
CEILING(28.6)的值'
FLOOR(28.6)AS'
FLOOR(28.6)的值'
ROUND(37.2364,3)AS'
ROUND(37.2364,3)的值'
26:
查询T_STUDENT表中出生年份为1985年的学生信息。
POLITYAS政治面貌
WHERECONVERT(char(40),BIRTHDAY,102)LIKE'
1985%'
27:
编写一个用户自定义函数fun_SumScores,要求根据输入的班级号和课程号,求此班此门课程的总分。
CREATEFUNCTIONfun_SumScores
(
@ClassNameASchar(10),
@CourseNumberASchar(10)
RETURNSreal
BEGIN
DECLARE@SumResultASreal
SELECT@SumResult=SUM(SCORE)
FROMT_SCORE
WHERESUBSTRING(S_NUMBER,1,LEN(S_NUMBER)-2)=@ClassName
ANDC_NUMBER=@CourseNumber
GROUPBYSUBSTRING(S_NUMBER,1,LEN(S_NUMBER)-2)
RETURN@SumResult
END
28:
使用自定义函数fun_SumScores,求T_SCORE表中的各个班级的各门课程的总分。
29:
根据T_SCORE表中的考试成绩,查询05541班学生高等数学的平均成绩,并根据平均成绩输出相应的提示信息。
IF(SELECTAVG(SCORE)FROMT_SCORE
WHERELEFT(S_NUMBER,5)='
ANDC_NUMBER='
10010218'
>
75
BEGIN
05541班高等数学的平均考试成绩比较理想!
SELECTAVG(SCORE)AS平均考试成绩
FROMT_SCORE
END
05541班高等数学的平均考试成绩不太理想!
30:
查询05541班学生的考试情况,并使用CASE语句将课程号替换为课程名进行显示。
SELECTS_NUMBERAS学号,
课程名称=CASEC_NUMBER
WHEN'
THEN'
40051060'
关系型数据库原理'
SCOREAS考试分数
FROMT_SCORE
ORDERBYS_NUMBER
31:
查询05541班学生的考试情况,并根据考试分数输出考试等级,当分数大于等于90分,输出“优”,当分数在80至90之间,输出“良”,当分数在70至80之间,输出“中”,当分数在60至70之间,输出“及格”,当分数在60分以下,输出“不及格”。
考试等级=CASE
WHENSCORE>
=90THEN'
优'
=80THEN'
良'
=70THEN'
中'
=60THEN'
及格'
ELSE
'
不及格'
32:
使用WHILE…CONTINUE…BREAK语句求5的阶乘。
DECLARE@Resultinteger,
@iinteger
SELECT@Result=1,
@i=5
WHILE@i>
BEGIN
SET@Result=@Result*@i
SET@i=@i-1
IF@i>
1
CONTINUE
5的阶乘为:
PRINT@Result
BREAK
33:
在程序中使用WAITFOR语句,使WAITFOR后面的语句等待10秒钟后再继续执行。
SELECT*FROMT_STUDENT
WAITFORDELAY'
0:
10'
SELECT*FROMT_COURSE
34:
编写一个自定义函数,功能是查询给定姓名的学生,如果没有找到则返回0,否则返回满足此条件的学生人数,主程序调用这个函数,查询姓名为“王华”的学生,并根据函数的返回值进行输出。
索引的创建和使用
在STUDENT数据库中创建一个新表T_DEPARTMENT,并将其中的D_NAME字段设置为聚集的唯一索引。
CREATETABLET_DEPARTMENT
D_NUMBERINT,
D_NAMECHAR(20)UNIQUECLUSTERED
在STUDENT数据库中创建一个新表T_SPECIALTY,并将其中的P_NUMBER字段设置为主键。
CREATETABLET_SPECIALTY
P_NUMBERINTPRIMARYKEY,
P_NAMECHAR(20)
创建一个新的非聚集索引,要求按照T_STUDENT中的S_NAME字段的降序创建,索引名为“IX_S_NAME”。
单击“T_STUDENT”数据表,并右击其中的“索引”文件夹,从弹出的快捷菜单中选择“新建索引”选项,在打开的“新建索引”对话框中,输入索引名为“IX_S_NAME”,在索引类型旁边的下拉列表框中选择“非聚集索引”选项,并单击“添加”按钮,打开“选择列”对话框,在其中选中“S_NAME”字段前面的复选框。
单击“确定”按钮,关闭“选择列”对话框,在“新建索引”对话框中将“S_NAME”字段的排序顺序改为“降序”。
最后单击“确定”按钮,就创建了“IX_S_NAME”索引。
使用CREATEINDEX语句为表T_STUDENT创建一个非聚集索引,索引字段为S_NAME,索引名为IX_STUDENTName。
GO
CREATEINDEXIX_STUDENTName
ONT_STUDENT(S_NAME)
为表T_STUDENT创建一个复合索引,使用的字段为SEX字段和BIRTHDAY字段,排序顺序SEX为降序,BIRTHDAY为升序。
CREATEINDEXIX_T_STUDENT2
onT_STUDENT(SEXDESC,BIRTHDAYASC)
用系统存储过程查看T_STUDENT表的索引信息。
sp_helpindexT_STUDENT
T_STUDENT表中的索引IX_T_STUDENT2的名称更改为IX_T_STUDENT_SexAndBirth。
sp_rename'
T_STUDENT.IX_T_STUDENT2'
IX_T_STUDENT_SexAndBirth'
index'
除表T_STUDENT中的索引IX_T_STUDENT_SEXAndBirth。
DROPINDEXT_STUDENT.IX_T_STUDENT_SEXAndBirth