Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2265字,纯文字阅读大概需要4分钟。
内容图文
0、exists() 用法:
select * from T1 where exists(select 1 from T2 where T1.a=T2.a)
其中 “select 1 from T2 where T1.a=T2.a” 相当于一个关联表查询,
相当于“select 1 from T1,T2 where T1.a=T2.a”
但是,如果单独执行括号中的这句话是会报语法错误的,这也是使用exists需要注意的地方。
“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。因此“select 1”这里的 “1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,where 条件成立。
PS:not exists() 正好相反
select name from employee where not exists (select name from student)
1、in() 的用法:
select * from T1 where T1.a in (select T2.a from T2)
这里的“in”后面括号里的语句搜索出来的字段的内容一定要与where后指定的字段相对应,一般来说,T1和T2这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。
打个比方:T1,T2表都有一个字段,表示工单号,但是T1表示工单号的字段名叫“ticketid”,T2则为“id”,但是其表达的意义是一样的,而且数据格式也是一样的。这时,用的写法就可以这样:
select * from T1 where T1.ticketid in (select T2.id from T2)
2、 “exists”和“in”的效率问题
0)select name from employee where name not in (select name from student)
select name from employee where not exists (select name from student)
第一句SQL语句的执行效率不如第二句。
通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。
Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。
这也就是使用EXISTS比使用IN通常查询速度快的原因。
1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a)
T1数据量小而T2数据量非常大时,T1<<T2 时, exists()的查询效率高。
2) select * from T1 where T1.a in (select T2.a from T2)
T1数据量非常大而T2数据量小时,T1>>T2 时,in() 的查询效率高。
参考:https://www.cnblogs.com/zhengshuheng/p/4749121.html
Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异
标签:str sql语句 log tps 存在 写法 执行 注意 查询
本文系统来源:https://www.cnblogs.com/Formulate0303/p/12606787.html
内容总结
以上是互联网集市为您收集整理的Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异全部内容,希望文章能够帮你解决Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。