设教学数据库中有三个基本表:
学生表S(SNO,SNAME,AGE,SEX),其属性分别表示学号、学生姓名、年龄、性别;
课程表C(CNO,CNAME,TEACHER),其属性分别表示课程号、课程名、上课教师名;
选修表SC(SNO,CNO,GRADE),其属性分别表示学号、课程号、成绩。请问正确实现“查询张三同学没有选修的课程的课程号”的SQL语句是下列哪一个?()
A、SELECT CNO
FROM C, SC, S
WHERE C.CNO!= SC.CNO AND S.SNO=SC.SNO
AND SNAME='张三';
B、SELECT CNO
FROM C
WHERE CNO != (SELECT CNO
FROM S, SC
WHERE S.SNO=SC.SNO AND SNAME='张三');
C、SELECT CNO
FROM C
WHERE CNO NOT IN (SELECT CNO
FROM S, SC
WHERE S.SNO=SC.SNO AND SNAME='张三');
D、SELECT CNO
FROM C, SC, S
WHERE C.CNO NOT IN SC.CNO
AND S.SNO=SC.SNO AND SNAME='张三';
本题中,对于选项A,“!=”用在这里逻辑不正确。所以,选项A错误。
对于选项B,子查询返回多行记录,不能用“!=”。所以,选项B错误。
对于选项D,缺少连接条件。所以,选项D错误。
所以,本题的答案为C。
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 文章内容来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。
评论
