047题库中一道关于not exists的疑问?

SELECT location_id, city
FROM locations l
WHERE NOT EXISTS
(SELECT location_id FROM departments WHERE location_id <> l.location_id);
    请问各位谁能给我讲讲应该如何理解这个not exists吗,如果是exists我还比较好理解,不过我还是不理解为什么上面那条sql一条记录都没返回?
    因为我的理解是如果是要找not exists+"<>"的记录那不就是找exists+"="的记录吗,感觉这样理解又不太对,请教各位了。。 谢谢!
标签: 暂无标签
wxjzqym

写了 7 篇文章,拥有财富 162,被 11 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P5 | 发表于 2012-6-6 13:39:18
这个是有点绕。做个实验呗

not exists+"<>" 的意思是 不存在不等于的
exists+"="          的意思是 存在相等的 只要有一条就可以

对于一个表的列如果数据如下
col
1
2
3
4

当代入的值为1
[ not exists   (seleft ..... where col !=1)] 这个表达式返回的值就为false 因为1=1 存在一条不满足条件的 (虽然2 3 4 !=1 但是1=1  所以存在一条不满足的就可以)
[ exists   (seleft ..... where col =1)]  这个表达式返回值为true 因为1=1 存在一条满足条件则表达式就为true

回复

使用道具

P4 | 发表于 2012-6-6 16:26:38
甲骨论-晨曦 发表于 2012-6-6 13:39
这个是有点绕。做个实验呗

not exists+"" 的意思是 不存在不等于的

关于exists的说法我同意,不过关于not exists我有不同的意见,我觉得not exists为false是因为子查询中的col有满足条件col!=1的值,而如果要not exists为true,那么子查询中col里面的值都应该不满足于条件col!=1。
回复

使用道具

P5 | 发表于 2012-6-6 23:08:27
wxjzqym 发表于 2012-6-6 16:26
关于exists的说法我同意,不过关于not exists我有不同的意见,我觉得not exists为false是因为子查询中的c ...

OK you are right
回复

使用道具

P4 | 发表于 2012-7-3 10:45:26
这个语句相当于双重否定,所以不可能有值。
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈