- 爱易网页
-
MSSQL教程
- 关于EXISTS的有关问题
日期:2014-05-18 浏览次数:20524 次
关于EXISTS的问题
我想请大家帮我解析一下以下查询语句:
3张基本表:
S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
1、查询学习全部课程的学生姓名,语句如下:
SELETE SNAME
FROM S
WHERE NOT EXISTS
(SELECT *
FROM C
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.S# = S.S#
AND SC.C# = C.C#))
NOT EXISTS的语义是什么,我应该理解为“不存在”|“不满足”?
3个SELECT语句的含义是什么,请解释一下,其中的*代表什么,表示所有属性列?特别是第2个,C和S没有关联,我不知道怎么翻译。
2、查询所学课程包含学生S3所学课程的学生学号
SELECT DISTINCT S#
FROM SC AS X
WHERE NOT EXISTS
(SELECT *
FROM SC AS Y
WHERE Y.S# = 'S3 '
AND NOT EXISTS
(SELECT *
FROM SC AS Z
WHERE Z.S# = X.S#
AND Z.C# = Y.C#))
SC AS X|Y|Z是否代表SC的三个别名,他们是代表一张SC还是三张SC,是不是产生了连接操作,什么时候需要使用AS。
3个SELECT语句的含义是什么,请解释一下。
3、查询不学C2课程的学生姓名与年龄
SELECT SNAME,AGE
FROM S
WHERE S# NOT IN
(SELECT S#
FROM SC
WHERE C#= 'C2 '))
SELECT SNAME,AGE
FROM S
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.S# = S.S#
AND C#= 'C2 '))
以上有两种方法,我想问问为什么使用NOT EXISTS时前面没有属性名,是表示所有属性吗?还有为什么使用NOT EXISTS时子SELECT语句的条件多了一个SC.S#=S.S#
请大家多多指教,谢谢
------解决方案--------------------
EXISTS同NOT EXISTS
更好的理解是
交集与差集
解析第一句SQL
SELETE SNAME
FROM S
WHERE NOT EXISTS