代码:
SELECT 职工号, 姓名
FROM 职工
WHERE NOT EXISTS(
SELECT *
FROM 社会团体
WHERE NOT EXISTS(
SELECT *
FROM 参加社团
WHERE 社会团体.社团编号=参加社团.社团编号 AND
职工.职工号=参加社团.职工号));
问题:
这段代码到底是怎么能查找到参加了全部社会团体的职工的情况的?
先查 参加社团 数据,然后根据结果再从 社会团体筛选出没有参加社团数据,就是全部社会团体的数据
我想知道这段代码到底是怎么执行的?not exists到底做了什么事情?
你可以这样理解,not exists返回的值是 true或者false,
exists(返回结果集,为真)
not exists(不返回结果集,为真)
例如下面这个句子
select * from a表 where 1=1 and not exists(select * from b表 where b表.id=a表.外键)
not exists返回的结果 跟1=1是一样的
not exists返回结果的模式是结果集的模式,即执行一个查询,然后查询到了结果,就返回真,没有就是假
你这个查询其实就是查询职工表,然后有一个条件,职工必须在社会团体和参加社团表中有记录,其实完全可以改写为三个表的inner join查询,这样性能更好。