·9· When Grade between 90 and 100 THEN Grade = '优' When Grade between 80 and 89 THEN Grade = '良' When Grade between 70 and 79 THEN Grade = '中' When Grade between 60 and 69 THEN Grade = '及格' Else Grade = '不及格' End C. Case
When Grade between 90 and 100 THEN '优' When Grade between 80 and 89 THEN '良' When Grade between 70 and 79 THEN '中' When Grade between 60 and 69 THEN '及格' Else '不及格' End
D. Case Grade
When 90~100 THEN Grade = '优' When 80~89 THEN Grade = '良' When 70~79 THEN Grade = '中' When 60~69 THEN Grade = '及格' Else Grade = '不及格'
End
8.下述语句的功能是将两个查询结果合并为一个结果。其中正确的是 B
A.select sno,sname,sage from student where sdept = 'cs' Order by sage Union
select sno,sname,sage from student where sdept = 'is' Order by sage B.select sno,sname,sage from student where sdept = 'cs' Union
select sno,sname,sage from student where sdept = 'is' Order by sage C.select sno,sname,sage from student where sdept = 'cs' Union
select sno,sname from student where sdept = 'is' Order by sage D.select sno,sname,sage from student where sdept = 'cs' Order by sage Union
select sno,sname,sage from student where sdept = 'is' 9.下列SQL语句中,用于修改表数据的语句是 C
A.ALTER B.SELECT C.UPDATE D.INSERT 10.设有Teachers表,该表的定义如下: CREATE TABLE Teachers(
9
·10· Tno CHAR(8) PRIMARY KEY, Tname VARCHAR(10) NOT NULL,
Age TINYINT CHECK(Age BETWEEN 25 AND 65) )
下列插入语句中,不能正确执行的是 D
A.INSERT INTO Teachers VALUES('T100','张鸿',NULL)
B.INSERT INTO Teachers(Tno,Tname,Age) VALUES('T100','张鸿',30) C.INSERT INTO Teachers(Tno,Tname) VALUES('T100','张鸿') D.INSERT INTO TeachersVALUES('T100','张鸿')
11.设数据库中已有表4-1至4-3所示的Student、Course和SC表。现要查询学生选的第2学期开设课程的情况,只需列出学号、姓名、所在系和所选的课程号。该查询涉及到的表是 D
A.仅Student表 B.仅Student和SC表 C.仅Student和Course表 D.Student、SC和Course表 12.删除计算机系学生(在student表中)的修课记录(在SC表中)的正确的语句是表是 B A.DELETE FROM SC JOIN Student b ON S.Sno = b.Sno WHERE Sdept = '计算机系'
B.DELETE FROM SC FROM SC JOIN Student b ON SC.Sno = b.Sno WHERE Sdept = '计算机系'
C.DELETE FROM Student WHERE Sdept = '计算机系' D.DELETE FROM SC WHERE Sdept = '计算机系'
二. 填空题
1. 在相关子查询中,子查询的执行次数是由_________决定的。外层表的行数
2. 对包含基于集合测试子查询的查询语句,是先执行_________层查询,在执行_________层查
询。内,外
3. 对包含相关子查询的查询语句,是先执行_________层查询,在执行_________层查询。外,
内
4. 聚合函数COUNT(*)是按_________统计数据个数。行
5. 设Grade列目前有三个值:90、80和NULL,则AVG(Grade)的值是_________,MIN(Grade)
的值是_________。85,80
6. 设有学生表(学号,姓名,所在系)和选课表(学号,课程号,成绩),现要建立统计每个系的
选课人数。请补全下列语句: COUNT(DISTINCT 选课表.学号) SELECT 所在系, _________ FROM 选课表 JOIN 学生表 ON 选课表.学号 = 学生表.学号 GROUP BY 所在系
7. 设有选课表(学号,课程号,成绩),现要查询考试成绩最高的三个学生的学号、课程号和成绩,
包括并列情况。请补全下列语句: TOP 3 WITH TIES, ORDER BY 成绩 DESC SELECT _________ 学号,课程号,成绩 FROM 选课表 _________ 8. UNION操作用于合并多个查询语句的结果,如果在合并结果时不希望去掉重复的数据,则在用
UNION操作时应使用_________关键字。 ALL
9. 进行自连接操作的两个表在物理上为一张表。通过_________方法可将物理上的一张表在逻辑
上成为两张表。起别名
10. FROM A LEFT JOIN B ON …语句表示在连接结果中不限制_________表数据必须满足连接
10
·11· 条件。 A
11. 对分组后的统计结果再进行筛选使用的子句是_________。HAVING
12. 若SELECT语句中同时包含WHERE子句和GROUP子句,则先执行的是_________子句。
WHERE
三. 简答题
1. 在聚合函数中,哪个函数在统计时不考虑NULL。 答:COUNT(*)
2. 在LIKE运算符中“%”的作用是什么? 答:匹配0个或多个字符。
3. WHERE Age BETWEEN 20 AND 30子句,查找的Age范围是多少? 答:Age大于等于20并且小于等于30
4. WHERE Sdept NOT IN (‘CS’,’IS’,’MA’),查找的数据是什么? 答:查找‘CS’,’IS’,’MA’三个系之外的其他系
5. 自连接与普通内连接的主要区别是什么?
答:自连接中进行连接操作的表在物理上是一张表,而普通内连接进行连接的表在物理上是两张表。
6. 外连接与内连接的主要区别是什么?
答:进行外连接的两个表中,可以有一张表不满足连接条件,而进行内连接的两个表必须都满足连接条件。
7. 在使用UNION合并多个查询语句的结果时,对各个查询语句的要求是什么? 答:各个查询语句的列个数必须相同,对应列的语义相同,类型兼容。
8. 相关子查询与嵌套子查询在执行方面的主要区别是什么?
答:相关子查询的执行过程是先外后内,而嵌套子查询的执行过程是先内后外。而且相关子查询中必须有与外层查询的关联,而嵌套子查询中,内、外层查询之间没有关联关系。
9. 执行SELECT … INOT 表名 FROM …语句时,对表名的要求是什么? 答:必须是一个不存在的新表名。
10. 对统计结果的筛选应该使用哪个子句完成? 答:使用HAVING子句
11. 在排序子句中,排序依据列的前后顺序是否重要?ORDER BY C1,C2子句对数据的排序顺序是
什么?
答:重要,系统会按列的先后顺序进行排序。
先按C1列进行排序,在C1列值相同时再按C2列进行排序。
12. TOP 子句的作用是什么?
11
·12· 答:在查询结果产生后,提取结果的前若干行数据。
四.上机练习
1.查询学生选课表中的全部数据。 答:select * from SC
2.查询计算机系的学生的姓名、年龄。
答:select sname,sage from student where sdept = '计算机系'
3. 查询成绩在70~80分之间的学生的学号、课程号和成绩。
答:select sno,cno,grade from sc on where grade between 70 and 80
4. 查询计算机系年龄在18~20之间且性别为“男”的学生的姓名、年龄。 答:select sname,sage from student
where sdept = '计算机系' and sage between 18 and 20 and ssex = '男'
5. 查询“C001”号课程的最高分。
答:select max(grade) from sc where cno = 'C001'
6. 查询计算机系学生的最大年龄和最小年龄。
答:select max(sage) as max_age, min(sage) as min_age from student where sdept = '计算机系'
7. 统计每个系的学生人数。
答:select sdept,count(*) from student group by sdept
8. 统计每门课程的选课人数和考试最高分。
答:select cno, count(*),max(grade) from sc group by cno
9. 统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。 答:select sno,count(*), sum(grade) from sc group by sno
order by count(*) asc
10. 查询总成绩超过200分的学生,要求列出学号和总成绩。 答:select sno,sum(grade) from sc group by sno
having sum(grade) > 200
11. 查询选课门数超过2门的学生的学号、平均成绩和选课门数。
答:select sno, avg(grade), count(*) from sc having count(*) > 2
12. 查询选了“C002”课程的学生的姓名和所在系。
答:select sname,sdept from student s join sc on s.sno = sc.sno where cno = 'C002'
12