看下例题: 
求没有选修C2课程的学生姓名 
SELECT 姓名 
FROM 学生 
WHERE NOT EXIST(SELECT* 
FORM 选课 
WHERE 学生.学号=学号 AND 课程号='C2'); 
为什么不能写成: 
SELECT 姓名 
FROM 学生,选课 
WHERE 学生.学号=选课.学号 AND 课程号<>'C2';谢谢了,不怎么明白哦~~~

解决方案 »

  1.   

    SELECT 姓名 FROM 学生 WHERE NOT EXIST
    (SELECT* FORM 选课 WHERE 学生.学号=学号 AND 课程号='C2');
    --学生表一般姓名不重复
    SELECT 姓名 FROM 学生,选课 WHERE 学生.学号=选课.学号 AND 课程号<>'C2';
    --选课表,一个学号没有选'C2'还可以选别的多门课->所以重复了很多姓名
    --另外,一个学号什么课都不选,由于是内联接,->在这里查不出来
    --还有,一个学号即使选了C2,只是这条记录被去掉了,选了其它课->这个学生仍能查出来