对NOT EXISTS运行原理的迷惑?
对NOT EXISTS运行原理的不解??
查询选了课程C4的学生信息,结果是正确的如下图
但对怎么得到的这个结果不太理解
比如SC表的第一行,学生S1 选 C1 课程 这个元组用来进行判断的话,那就是不符合子查询条件 S.S#=SC.S# AND C#='C4' 的,也就是这个元组是NOT EXISTS要返回的值吧,那怎么没返回呢?

------解决方案--------------------
是未选修C4课程的学生吧!
NOT EXISTS 是一个 是真是假 的逻辑判断,对它后边括号中如果有符合的记录能查询到,那么就是 真,这整个条件就满足,如果没有记录,那就是 假,这个条件不满足。
------解决方案--------------------
not exists里面是and c# = 'C4',而sc表中满足这个条件的是S1/S3/S4,又应为not exists有一个=谓词,所以S1/S3/S4这三个值在S表中的话就不返回,所以范围S2/S5/S6
------解决方案--------------------
查询选了课程C4的学生信息,结果是正确的如下图
但对怎么得到的这个结果不太理解
比如SC表的第一行,学生S1 选 C1 课程 这个元组用来进行判断的话,那就是不符合子查询条件 S.S#=SC.S# AND C#='C4' 的,也就是这个元组是NOT EXISTS要返回的值吧,那怎么没返回呢?
------解决方案--------------------
是未选修C4课程的学生吧!
NOT EXISTS 是一个 是真是假 的逻辑判断,对它后边括号中如果有符合的记录能查询到,那么就是 真,这整个条件就满足,如果没有记录,那就是 假,这个条件不满足。
------解决方案--------------------
not exists里面是and c# = 'C4',而sc表中满足这个条件的是S1/S3/S4,又应为not exists有一个=谓词,所以S1/S3/S4这三个值在S表中的话就不返回,所以范围S2/S5/S6
------解决方案--------------------
CREATE TABLE t1(id int)
CREATE TABLE t2(id INT )
INSERT INTO t1
VALUES(1),(2),(3)
INSERT INTO t2
VALUES(1),(2)
SELECT * FROM t1 a
WHERE EXISTS(SELECT 1 FROM t2 b WHERE a.id=b.id)
SELECT * FROM t1 a
WHERE NOT EXISTS(SELECT 1 FROM t2 b WHERE a.id<>b.id)
/*
id
-----------
1
2
(2 row(s) affected)
id
-----------
*/