一 .概念

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相关推荐

  1. 基于python+mysql超市信息管理系统(附完整源代码)

    (参考的是这篇文章(5条消息) 数据库课程设计-超市零售信息管理系统(Python实现)_小桃在改bug的博客-CSDN博客_超市管理系统数据库设计但是这篇文章里没有完整的代码,所以我自己补全了ui界 ...

  2. java 必备面试必备

    1.JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含 ...

  3. SQL SERVER 2014 下IF EXITS 居然引起执行计划变更的案例分享

    这个问题是在SQL SERVER 2005 升级到SQL SERVER 2014的测试过程中一同事发现的.我觉得有点意思,遂稍微修改一下脚本展示出来,本来想构造这样的一个案例来演示,但是畏惧麻烦,遂直 ...

  4. sql中exits和in的区别

    sql中exits和in的区别 转:http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html in 和 exi ...

  5. sql 语句 中的 exits 和 in 关键字

    开篇 第一次把两者关联起来, 还是在背 sql 优化方面的面试题时. 有一条是这么说的: 当 sql 语句中出现 in 或 not in 时, 用 exists 或 not exists 代替.然而我 ...

  6. sql查询中使用in和exits比较和区别

    首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询的表,然 ...

  7. oracle中sql函数exists,sql的exits函数

    oracle的exits函数 select t.fene from fenebiao t where t.code = '001' and date = to_date('2017-07-17', ' ...

  8. Sql语句中in和exits的区别

    "小明" in (select sname from student) 等同于 exists (select * from student where sname="小明 ...

  9. SQL Server 最佳实践分析器使用小结

    Best Practices Analyzer Tool for Microsoft SQL Server 2000是Microsoft SQL Server开发团队开发的一个数据库管理工具,可以让你 ...

最新文章

  1. 使用CSS制作圆角效果
  2. 彩色直方图均衡化实现
  3. c++ vector iterator
  4. JAVA程序设计----关于字符串的一些基本问题处理
  5. Why SAP SQL view is not recommended to use in SQL ?
  6. Chrome 69正式版浏览器遭批 恢复完整显示域名
  7. 不会用Photoshop抠图?Python助你一键“除”人!
  8. 无连接可靠传输_这些RF连接器设计原则你应该多了解一下
  9. ACM——2的n次方
  10. python一般的类有三部分组成_Python学习笔记总结(三)类
  11. 大容量NoSql解决方案:Aerospike实战
  12. 计算机休眠状态播放音乐,win7系统休眠后不能播放音乐怎么解决
  13. hpm1216nfh驱动程序_惠普M1216nfh驱动下载
  14. joc杂志影响因子2019_化学sci期刊影响因子排名_国际化学期刊2018最新影响因子_分析测试学报影响因子...
  15. IE重置input file
  16. {黑科技}哔哩哔哩视频三倍速播放
  17. java url链接超时_Java编程中HttpURLConnection的连接超时中的异常
  18. 最新ITIL考试题库(中英对照版初级)
  19. 计算机技术实验报告答案,大学计算机实验报告答案-实验1.docx
  20. 13:js逆向-登录加密(aes加密)

热门文章

  1. Loopback Interface(环回接口)看这篇就够了
  2. android-贝塞尔(bezier)曲线
  3. 控件注册验证机制探索 License
  4. 【C++ linux】SIGPIPE信号在网络通信程序导致程序异常中断
  5. 一次杀不死的进程记录
  6. mysql重装导致无法安装成功的解决办法
  7. office 2019 工具鼠标点击反应慢、滚轮滚动反应慢的问题
  8. HTML-视频和音频
  9. 微信这几个功能你知道吗?
  10. 制作ISO文件 与 提取ISO文件