四、实验报告:
1.1)找出所有被学生选修了的课程号:
selectdistinctCno课程号fromGrade
2)找出01311班女生的个人信息:
select*fromStudent
whereClno='01311'andSsex='女'
3)找出01311班和01312班的学生姓名性别出生年份
selectsname学生姓名,ssex性别,2016-sage出生年份
fromStudent
whereClno='01311'orClno='01312'
4)找出所有姓李的学生的个人信息
select*fromStudent
whereSnamelike'李%
'5)找出李勇所在班级的学生人数
selectCOUNT(*)fromStudent
whereClnoin
(selectClnofromStudent
whereSname='李勇')
6)找出课程名为操作系统的平均成绩最高分最低分
selectAVG(Gmark)平均成绩,MAX(Gmark)最高分,MIN(Gmark)最低分
fromGrade
whereCnoin
(selectCnofromCourse
whereCname='操作系统')
7)选修了课程的学生人数;
selectCOUNT(distinctsno)学生人数
fromGrade
8)选修了操作系统的学生人数:
selectCOUNT(distinctsno)学生人数
fromGrade
whereCnoin
(selectCnofromCourse
whereCname='操作系统')
9)找出2000级计算机软件班的成绩为空的学生姓名:
2.错误。
AVG(basepay)前后缺少,正确的SQL语言应该是:
SELECTeno,basepay,service
FROMsalary
WHEREbasepay
5、思考题:
在表的名字较长时,使用别名可以使编码的查询更容易。
比如遇到子查询,就基本上都需要别名。
而且一旦用了别名就一定要使用该别名。
实验五:
1、实习目的:
掌握SELECT语句的嵌套使用方法,使用SQLServer2000对表作复杂查询。
2、实习准备:
1)复习SELECT语句的高级格式和完整格式的使用;
2)了解库函数在分组查询中的使用规则;
3)完成习题3第13/14题中各项操作的SQL语句。
3、实习内容:
验证习题3第13/14题中各项操作的SQL语句。
4、实验报告:
13、1)找出和李勇在同一个班级的学生信息:
select*fromStudent
whereSname<>'李勇'andClnoin
(selectClnofromStudent
whereSname='李勇')
2)找出所有与学生李勇有相同选修课程的学生信息:
3)找出年龄介于学生李勇和25岁之间的学生信息:
select*fromStudent
whereSage<25andSage>
(selectSagefromStudentwhereSname='李勇')
4)找出选修了课程是操作系统的学生学号和姓名:
selectSno学号,Sname姓名fromStudent
whereexists
(select*fromGrade
whereCnoin(selectCnofromCoursewhereCname='操作系统')
andStudent.Sno=Grade.Sno)
5)找出没有选修1号课程的所有学生姓名:
selectSname姓名fromStudent
wherenotexists
(select*fromGrade
whereStudent.Sno=Grade.SnoandCno=1)
6)找出选修了全部课程的学生姓名:
selectSname姓名fromStudent
wherenotexists
(selectCnofromCourse
except
selectCnofromGrade
whereStudent.Sno=Grade.Sno)
14、1)查询选修了3号课程的学生学号及成绩,并按成绩的降序排列:
selectSno学号,Gmark成绩fromGrade
whereCno=3
orderbyGmarkdesc
2)查询全体学生信息,要求查询结果按班级号升序排列,同一班级学生按年龄降序排列:
select*fromStudent
orderbyClnoasc,Sagedesc
3)求每个课程号及相应的选课人数:
selectGrade.Cno课程号,COUNT(Grade.Cno)选课人数
fromGradejoinCourseonGrade.Cno=Course.Cno
groupbyGrade.Cno
4)查询选修了3门以上课程的学生学号:
selectSno学号fromGrade
groupbySno
havingCOUNT(Sno)>3
使用存在量词[NOT]EXISTS的嵌套查询时,何时外层查询的WHERE条件为真,何时为假:
使用存在量词[NOT]EXISTS,若内层的查询结构非空,那么外层的WHERE字句返回真值,否则返回假值。
5、思考题:
1)用UNION或UNIONALL将两个SELECT命令结合为一个时,结果有何不同?
在合并结果集时,默认从最后结果集中删除重复的行,除非使用ALL关键字。
2)当既能用连接词查询又能用嵌套查询时,应选择哪种查询较好?
为什么?
有些嵌套查询可以用连接运算代替,而有些是不能的。
当可以代替时,用户可以自行决定。
3)库函数能否直接使用在SELECT选取目标、HAVING字句、WHERE字句、GROUPBY列名中?
SELECT选取目标、HAVING字句可以直接使用,
而WHERE字句、GROUPBY不能直接使用。