单元三考查卷:多表连接与嵌套查询
满分:100分时间:60分钟闭卷
一、选择题(每题5分,共20分)
第1题
选择题 (5分)
要返回左表所有记录,右表不匹配的记录用NULL填充,应使用( )
答案解析
正确答案:B(LEFT JOIN)。LEFT JOIN保证左表所有记录都出现在结果中。
第2题
选择题 (5分)
子查询返回多行结果时,外层查询应使用( )
答案解析
正确答案:C(IN)。多行子查询需用IN、ANY或ALL。
第3题
选择题 (5分)
三表连接查询时,至少需要几个JOIN条件?( )
答案解析
正确答案:B(2个)。N个表连接至少需要N-1个连接条件。
第4题
选择题 (5分)
EXISTS的作用是( )
答案解析
正确答案:A。EXISTS判断子查询是否返回记录,返回布尔值。
二、判断题(每题5分,共20分)
第5题
判断题 (5分)
笛卡尔积是没有连接条件的两表相乘,结果集行数等于两表行数之积。
答案解析
正确答案:正确。没有WHERE/ON条件时会产生笛卡尔积。
第6题
判断题 (5分)
子查询的效率一定比连接查询高。
答案解析
正确答案:错误。通常连接查询效率更高,子查询逻辑更清晰。
第7题
判断题 (5分)
NOT EXISTS在子查询没有返回任何记录时条件为真。
答案解析
正确答案:正确。NOT EXISTS与EXISTS相反。
第8题
判断题 (5分)
LEFT JOIN的结果一定比INNER JOIN的结果多。
答案解析
正确答案:正确。LEFT JOIN包含左表所有记录,INNER JOIN只包含匹配记录。
三、SQL实操题(60分)
第9题
实操题 (10分)
已知student(sno,sname,ssex,sage,sdept)、course(cno,cname,ccredit)、sc(sno,cno,grade)。编写SQL:查询每个学生的学号、姓名和选修的课程名。
参考答案与解析
评分:三表连接正确(6分)、字段选择正确(4分)。
参考答案:
第10题
实操题 (10分)
编写SQL:查询没有选修任何课程的学生姓名(使用LEFT JOIN)。
参考答案与解析
评分:LEFT JOIN正确(5分)、IS NULL判断正确(5分)。
参考答案:
第11题
实操题 (10分)
编写SQL:查询选修了'数据库原理'且成绩大于80分的学生姓名和成绩。
参考答案与解析
评分:三表连接(5分)、WHERE条件(5分)。
参考答案:
第12题
实操题 (10分)
编写SQL:查询成绩高于平均成绩的学生学号和成绩(使用子查询)。
参考答案与解析
评分:子查询求AVG正确(5分)、外层比较正确(5分)。
参考答案:
第13题
实操题 (10分)
编写SQL:查询至少选修了两门课程的学生姓名。
参考答案与解析
评分:JOIN连接(3分)、GROUP BY(3分)、HAVING COUNT(4分)。
参考答案:
第14题
实操题 (10分)
编写SQL:查询选修了全部课程的学生(使用NOT EXISTS,难度较大,写出思路即可)。
参考答案与解析
评分:双层NOT EXISTS结构(7分)、关联条件(3分)。此题难度大,写出思路即可给部分分。
参考答案:
0/0