六、实验中出现的问题及解决的方法
33
七、思考讨论题或体会或对改进实验的建议
34
实验四 T-SQL程序设计
一、实验学时:2学时 二、实验目的
(1)掌握查询的概念和方法。 (2)掌握查询分析器的使用方法。
(3)熟练掌握单表查询的select语句。 (4)熟练掌握聚合函数的使用。
(5)熟练掌握复杂查询的select语句。 (6)熟练掌握连接查询方法。 (7)熟练掌握嵌套查询方法。
三、实验内容
(一)单表查询 1.基本查询
(1)查询学生表中全体学生的所有信息。 T-SQL语句:
select * from Student
(2)检索全体学生的学号、姓名。 T-SQL语句:
select Sno,Sname from Student 2.查询时改变列标题的显示
检索全体学生的学号、姓名、性别信息,并分别加上“学号”、“姓名”、“性别”的别名信息。
select Sno '学号',Sname '姓名',Ssex '性别' from Student 3.条件查询
(1)查询成绩大于90分的学生的学号及课程号、成绩。 T-SQL语句:
select Sno,Cno,Grade from SC where Grade>90
(2)查询成绩介于85~90分的学生的学号及课程号、成绩。 T-SQL语句:
select Sno,Cno,Grade from SC where Grade>=85 and Grade<=90
(3)查询选修了课程号为“2”,且成绩大于88的学生的学号。 T-SQL语句:
35
select Sno from SC
where Cno='2' and Grade>88
4.基于IN子句的数据查询
从课程表中查询出“数学”、“PASCAL语言”的所有信息。 T-SQL语句:
select * from Course
where Cname IN('数学','PASCAL语言')
5.基于Like子句的查询
(1)从学生表中分别检索出姓张的所有同学的资料;检索名字的第二个字是“红”或“虹”的所有同学的资料。
T-SQL语句:
select * from Student where Sname Like '张%' select * from Student where Sname Like '_[红,虹]%'
(2)如果用户查询的匹配字符串本身就含有%或_,比如在课程表中,添加一门课程为Visual_Basic,其它相关信息自取。若要查询名为Visual_Basic的课程的学分,则T-SQL语句为:
(提示:使用ESCAPE短语)
insert into Course
values ('8','Visual_Basic',NULL,3)
select * from Course where Cname Like 'Visual/_Basic' escape '/'
6.使用top关键字查询
分别从课程表中检索出前5个的课程信息。 T-SQL语句:
select top 5 * from Course 7.消除重复行
检索出学生已选课程的课程号,要求显示的课程号不重复。 T-SQL语句:
select distinct Cno from SC 8.查询经过计算的值。
查询全体学生的姓名及其出生年份,要求为计算值取别名“出生年份”。(提示:当前的年份减去年龄即为出生年份。)
T-SQL语句:
select Sname '姓名',year(getdate())-Sage '出生年份' from Student 9.使用ORDER BY语句对查询的结果进行排序
升序的关键字是ASC,降序的关键字是DESC,系统默认的是升序排列。 显示所有学生的基本信息,并按学生的年龄的升序排列。 T-SQL语句:
select * from Student order by Sage 10.使用Group子句进行查询
如果要在数据检索时对表中数据按照一定条件进行分组汇总或求平均值,就要使用Group BY子句并使用集合函数。
(1)汇总总分大于200分的学生的学号及总成绩。 T-SQL语句:
select Sno,sum(Grade) '总成绩' from SC
36
group by Sno having sum(Grade)>200
(2)查询各个课程号相应的选课人数。 T-SQL语句:
select Cno,count(*) '选课人数' from SC group by Cno
11.使用聚合函数
(1)查询学生总人数。 T-SQL语句:
select count(*) '总人数' from Student
(2)计算“2”号课程的学生平均成绩、最高分、最低分。 T-SQL语句:
select Cno,avg(Grade) '平均成绩',max(Grade) '最高分',min(Grade)分' from SC
group by Cno having Cno='2'
(二)复杂查询
1.查询比“王敏”年纪大的男学生信息。 T-SQL语句:
select * from Student where Ssex='男' and Sage>( select Sage from Student where Sname='王敏')
2.检索所有学生的选课信息。(提示:使用外连接) T-SQL语句:
select Student.Sno,Sname,Cno,Grade from Student left outer join SC on Student.Sno=SC.Sno
3.查询已选课学生的学号、姓名、课程名、成绩。(提示:连接查询) T-SQL语句:
select Student.Sno,Sname,Cname,Grade from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno
4.查询选修了“信息系统”的学生的学号和姓名。 T-SQL语句:
select SC.Sno,Sname from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Cname='信息系统'
5.查询与“刘晨”在同一个系的学生学号、姓名、性别。 子查询T-SQL语句:
select Sno,Sname,Ssex from Student where Sdept=( select Sdept from Student where Sname='刘晨') and Sname!='刘晨'
连接查询T-SQL语句:
select a.Sno,a.Sname,a.Ssex from Student a,Student b
where a.Sdept=b.Sdept and b.Sname='刘晨' and a.Sname!='刘晨'
6.查询其他系中比计算机科学系任一学生年龄大的学生的学号、姓名。 带有ANY或ALL谓词的子查询语句:
select Sno,Sname from Student where Sage>ANY( select Sage from Student where Sdept='CS')
37
最低 '