sql in 和 exits
一 .概念
in 查询返回一个列表,提供的列表给外查询使用
exit 是对自查询进行判断是否存在行,存在则 true,不存在则为 false
for x in ( select * from t1 )
loop if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD!
end if
end loop
二.使用性能
1. 如果查询的两个表大小差不多,则使用in和exit性能差不多
2. 外表大,内表小 使用 in 效率高
3. 外表小,内表大 使用 exits 效率高
总结:EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用,例如:如果是确定且有限的集合时,可以使用,比如:(1,2,3,4,5)
三.注意(如果在not in子查询中有null值的时候,则不会返回数据)
not in 需要有null的数据 出现奇怪情况
举例子:
1. 数据:
create table student(id int,`name` varchar(100)
);create table detail(id int,address varchar(100)
);insert student (id,`name`) values(1,'liminng');
insert student (id,`name`) values(2,'wanngxiao');insert detail (id,address) values(1,'北京市xx区');
insert detail (address) values('上海');
2. 查询
2.1 >select * from student where id not in (select id from detail) ## 无结果
2.2>select * from student where not exists(select 1 from detail where student.id = detail.id) ## 有结果
2.3>select * from student where id in (select id from detail) ## 有结果
2.4>select * from student where exists(select 1 from detail where student.id = detail.id) ## 有结果
3. 原因分析
null不能参与比较运算符,即与任何数据比较结果都为null,not in 是需要使用 DEPENDENT SUBQUERY 进行全部比对,所以2.1无结果,因为detail的id存在null
4. 备注:
–如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)
–如果null参与比较运算,则结果可视为false。(例如:>=,<=,<> 大于,小于,不等于)
–如果null参与聚集运算,则聚集函数都置为null(使用isnull(字段,0)等方式可以避免这种情况),除count(*), count(1), count(0)等之外(count(字段) 字段为null的行不参与计数)
sql in 和 exits相关推荐
- 基于python+mysql超市信息管理系统(附完整源代码)
(参考的是这篇文章(5条消息) 数据库课程设计-超市零售信息管理系统(Python实现)_小桃在改bug的博客-CSDN博客_超市管理系统数据库设计但是这篇文章里没有完整的代码,所以我自己补全了ui界 ...
- java 必备面试必备
1.JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含 ...
- SQL SERVER 2014 下IF EXITS 居然引起执行计划变更的案例分享
这个问题是在SQL SERVER 2005 升级到SQL SERVER 2014的测试过程中一同事发现的.我觉得有点意思,遂稍微修改一下脚本展示出来,本来想构造这样的一个案例来演示,但是畏惧麻烦,遂直 ...
- sql中exits和in的区别
sql中exits和in的区别 转:http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html in 和 exi ...
- sql 语句 中的 exits 和 in 关键字
开篇 第一次把两者关联起来, 还是在背 sql 优化方面的面试题时. 有一条是这么说的: 当 sql 语句中出现 in 或 not in 时, 用 exists 或 not exists 代替.然而我 ...
- sql查询中使用in和exits比较和区别
首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询的表,然 ...
- oracle中sql函数exists,sql的exits函数
oracle的exits函数 select t.fene from fenebiao t where t.code = '001' and date = to_date('2017-07-17', ' ...
- Sql语句中in和exits的区别
"小明" in (select sname from student) 等同于 exists (select * from student where sname="小明 ...
- SQL Server 最佳实践分析器使用小结
Best Practices Analyzer Tool for Microsoft SQL Server 2000是Microsoft SQL Server开发团队开发的一个数据库管理工具,可以让你 ...
最新文章
- 使用CSS制作圆角效果
- 彩色直方图均衡化实现
- c++ vector iterator
- JAVA程序设计----关于字符串的一些基本问题处理
- Why SAP SQL view is not recommended to use in SQL ?
- Chrome 69正式版浏览器遭批 恢复完整显示域名
- 不会用Photoshop抠图?Python助你一键“除”人!
- 无连接可靠传输_这些RF连接器设计原则你应该多了解一下
- ACM——2的n次方
- python一般的类有三部分组成_Python学习笔记总结(三)类
- 大容量NoSql解决方案:Aerospike实战
- 计算机休眠状态播放音乐,win7系统休眠后不能播放音乐怎么解决
- hpm1216nfh驱动程序_惠普M1216nfh驱动下载
- joc杂志影响因子2019_化学sci期刊影响因子排名_国际化学期刊2018最新影响因子_分析测试学报影响因子...
- IE重置input file
- {黑科技}哔哩哔哩视频三倍速播放
- java url链接超时_Java编程中HttpURLConnection的连接超时中的异常
- 最新ITIL考试题库(中英对照版初级)
- 计算机技术实验报告答案,大学计算机实验报告答案-实验1.docx
- 13:js逆向-登录加密(aes加密)