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

简介:

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

你真的会玩SQL吗?之逻辑查询处理阶段

你真的会玩SQL吗?和平大使 内连接、外连接

你真的会玩SQL吗?三范式、数据完整性

你真的会玩SQL吗?查询指定节点及其所有父节点的方法

你真的会玩SQL吗?让人晕头转向的三值逻辑

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

你真的会玩SQL吗?无处不在的子查询

你真的会玩SQL吗?Case也疯狂

你真的会玩SQL吗?表表达式,排名函数

你真的会玩SQL吗?简单的 数据修改

你真的会玩SQL吗?你所不知道的 数据聚合

你真的会玩SQL吗?透视转换的艺术

你真的会玩SQL吗?冷落的Top和Apply

你真的会玩SQL吗?实用函数方法汇总

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)

 

此文是继文章 你真的会玩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)

返回空集

练习

以下对就返回哪三值?

答案

  View Code

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

复制代码
/*写一条查询语句,返回在2007年下过订单,而在2008年没有下过订单的客户。
涉及的表:Sales.Customers表和Sales.Orders表。用exists
期望的输出:*/
custid      companyname
----------- ----------------------------------------
21          Customer KIDPX
23          Customer WVFAF
33          Customer FVXPQ
36          Customer LVJSO
43          Customer UISOJ
51          Customer PVDZC
85          Customer ENQZT
复制代码

参考SQL:

  View Code

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


欢醉

相关文章
|
SQL 存储 数据库
sql数据库中的 delete 与drop的区别
sql数据库中的 delete 与drop的区别
576 1
|
SQL 存储 NoSQL
. NoSQL和SQL的区别、使用场景与选型比较
【7月更文挑战第30天】. NoSQL和SQL的区别、使用场景与选型比较
309 15
|
SQL Java 数据库连接
MyBatis之动态SQL、#与$的区别和结果映射
MyBatis之动态SQL、#与$的区别和结果映射
215 0
|
SQL 安全 Java
Mybatis的动态SQL及关键属性和标识的区别(对SQL更灵活的使用)
Mybatis的动态SQL及关键属性和标识的区别(对SQL更灵活的使用)
114 0
|
SQL 数据挖掘
|
SQL 监控 NoSQL
db.oplog.rs.find({"ns": "your_database_name.your_collection_name", "o": {$exists: true}}).sort({$natural: -1}).limit(1) 这个SQL什么意思
【6月更文挑战第29天】db.oplog.rs.find({"ns": "your_database_name.your_collection_name", "o": {$exists: true}}).sort({$natural: -1}).limit(1) 这个SQL什么意思
178 8
|
SQL 数据库
SQL EXISTS 运算符
SQL EXISTS 运算符
105 5
|
SQL Java 数据库连接
|
分布式计算 DataWorks 大数据
MaxCompute产品使用合集之odps.sql.mapper.split.size和odps.stage.mapper.split.size这两个参数的区别是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。

热门文章

最新文章