博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你真的会玩SQL吗?EXISTS和IN之间的区别
阅读量:7014 次
发布时间:2019-06-28

本文共 1247 字,大约阅读时间需要 4 分钟。

你真的会玩SQL吗?系列目录

 

此文是继文章  而补充的,那来探讨下为什么有人会建议有些地方用EXISTS代替in

EXISTS和IN之间的区别

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)

返回空集

练习

以下对就返回哪三值?

答案

 
View Code

 用例数据库文件  文末

/*写一条查询语句,返回在2007年下过订单,而在2008年没有下过订单的客户。涉及的表:Sales.Customers表和Sales.Orders表。用exists期望的输出:*/custid      companyname----------- ----------------------------------------21          Customer KIDPX23          Customer WVFAF33          Customer FVXPQ36          Customer LVJSO43          Customer UISOJ51          Customer PVDZC85          Customer ENQZT

参考SQL:

 
View Code

 本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/4915180.html如需转载请自行联系原作者

欢醉

你可能感兴趣的文章
利用 SPL 快速实现 Observer 设计模式
查看>>
本体感受和演讲能力
查看>>
Spring MVC+Ant+Tomcat+Eclipse最简单的demo
查看>>
JavaScript 对象
查看>>
UrlDecode
查看>>
Quartz.Net在windows服务中的使用
查看>>
一条直线上N个线段所覆盖的总长度
查看>>
sql server 2008学习13 触发器
查看>>
Wix学习整理(5)——安装时填写注册表
查看>>
推荐一个IE6下js调试工具(Companion.JS)
查看>>
Thrift 个人实战--Thrift 网络服务模型
查看>>
利用jQuery实现回收站删除效果
查看>>
php形式的内容被处理
查看>>
Exchanging Partitions and Subpartitions with Tables--官方文档
查看>>
js原生继承之——组合式继承实例
查看>>
log4j配置
查看>>
Jekyll学习:基本使用方法
查看>>
[Typescript] Typescript Enums vs Booleans when Handling State
查看>>
Java中HashMap源码分析
查看>>
jsp ${param.id}用法
查看>>