对NOT EXISTS运行原理的迷惑?

对NOT EXISTS运行原理的不解??
查询选了课程C4的学生信息,结果是正确的如下图
但对怎么得到的这个结果不太理解

比如SC表的第一行,学生S1 选 C1 课程 这个元组用来进行判断的话,那就是不符合子查询条件 S.S#=SC.S# AND C#='C4' 的,也就是这个元组是NOT EXISTS要返回的值吧,那怎么没返回呢?

对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
-----------

*/


引用:
Quote: 引用:

还要看条件。你这个例子可以,不代表全部例子都可以,有些内层where条件可能导致问题,我以前就试过,不过一时半刻找不出来


不懂,反正我这样理解都解释的通了,结贴啦啦啦