047题库中一道关于not exists的疑问?
SELECT location_id, cityFROM locations l
WHERE NOT EXISTS
(SELECT location_id FROM departments WHERE location_id <> l.location_id);
请问各位谁能给我讲讲应该如何理解这个not exists吗,如果是exists我还比较好理解,不过我还是不理解为什么上面那条sql一条记录都没返回?
因为我的理解是如果是要找not exists+"<>"的记录那不就是找exists+"="的记录吗,感觉这样理解又不太对,请教各位了。。 谢谢!
这个是有点绕。做个实验呗
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
甲骨论-晨曦 发表于 2012-6-6 13:39 static/image/common/back.gif
这个是有点绕。做个实验呗
not exists+"" 的意思是 不存在不等于的
关于exists的说法我同意,不过关于not exists我有不同的意见,我觉得not exists为false是因为子查询中的col有满足条件col!=1的值,而如果要not exists为true,那么子查询中col里面的值都应该不满足于条件col!=1。 wxjzqym 发表于 2012-6-6 16:26 static/image/common/back.gif
关于exists的说法我同意,不过关于not exists我有不同的意见,我觉得not exists为false是因为子查询中的c ...
OK you are right 这个语句相当于双重否定,所以不可能有值。
页:
[1]