你真的会玩SQL吗?EXISTS和IN之间的区别

此文是继文章 你真的会玩SQL吗?三值逻辑 而补充的,那来探讨下为什么有人会建议有些地方用EXISTS代替in

EXISTSIN之间的区别

1.EXISTS只返回TRUE或FALSE,不会返回UNKNOWN。

2.IN当遇到包含NULL的情况,那么就会返回UNKNOWN。

 

当查询的列包含NULL时,NOT EXISTS正常返回TRUE或FALSE。

而NOT IN可能返回空集,如下

1:val IN(val1,val2,…,NULL),永远不会返回FALSE,而是返回TRUE或UNKNOWN。

2:val NOT IN(val1,val2,…,NULL),永远不会返回TRUE,而是返回NOT TRUE或NOT UNKNOWN。

 

看个示例:

Test1表

select t.[name] from Test as t

where  exists (select t1.orderid from Test1 as t1 where t1.[name]=t.[name])

返回 aaa,ccc,ddd

 

select t.[name] from Test as t

where  t.[name] in  (select t1.[] from Test1 as t1)

返回 aaa,ccc,ddd

 

select t.[name] from Test as t

where  not exists (select t1.orderid from Test1 as t1 where t1.[name]=t.[name])

返回 bbb

 

select t.[name] from Test as t

where  t.[name] not in  (select t1.[name] from Test1 as t1)

返回空集

 

练习

以下对就返回哪三值?

答案

用例数据库文件 你真的会玩SQL吗?之逻辑查询处理阶段 文末

参考SQL:

 

1 2 收藏 评论

关于作者:欢醉

因为专注,所以专业NET,UDP\\TCP开发,架构设计,数据库,Jquery插件开发,微信开发,android应用,O2O商业模式开发微信公众号【一个码农的日常】 个人主页 · 我的文章 · 4 ·    

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部