当前位置: 首页 > 编程日记 > 正文

oracle中的exists 和not exists 用法详解

有两个简单例子,以说明 “exists”和“in”的效率问题

1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;

T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。

2) select * from T1 where T1.a in (select T2.a from T2) ;

T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。

exists 用法:

请注意 1)句中的有颜色字体的部分 ,理解其含义;

其中 “select 1 from T2 where T1.a=T2.a” 相当于一个关联表查询,相当于

“select 1 from T1,T2 where T1.a=T2.a”

但是,如果你当当执行 1) 句括号里的语句,是会报语法错误的,这也是使用exists需要注意的地方。

“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。

因此“select 1”这里的 “1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,这 1) 句的where 条件成立

in 的用法:

继续引用上面的例子

“2) select * from T1 where T1.a in (select T2.a from T2) ”

这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,T1和T2这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。

打个比方:T1,T2表都有一个字段,表示工单号,但是T1表示工单号的字段名叫“ticketid”,T2则为“id”,但是其表达的意义是一样的,而且数据格式也是一样的。这时,用 2)的写法就可以这样:

“select * from T1 where T1.ticketid in (select T2.id from T2) ”

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通常查询速度快的原因。

FROM:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html

EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:
IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

==========

SQL> select * from dept where deptno in (select deptno from emp);
DEPTNO DNAME          LOC
------ -------------- -------------10 ACCOUNTING     NEW YORK20 RESEARCH       DALLAS30 SALES          CHICAGOSQL> select * from dept where exists (select deptno from emp);
DEPTNO DNAME          LOC
------ -------------- -------------10 ACCOUNTING     NEW YORK20 RESEARCH       DALLAS30 SALES          CHICAGO40 OPERATIONS     BOSTONSQL> select * from dept where exists (select 1 from dual);
DEPTNO DNAME          LOC
------ -------------- -------------10 ACCOUNTING     NEW YORK20 RESEARCH       DALLAS30 SALES          CHICAGO40 OPERATIONS     BOSTON

相关文章:

现代内存编号解读(转)

现代SDRAM、DDR SDRAM、DDR2 SDRAM三种主流内存颗粒的编号一、DDR SDRAM&#xff1a;HYNIX DDR SDRAM颗粒编号&#xff1a;HY XX X XX XX X X X X X X X — XX X1 2 3 4 5 6 7 8 9 10 11 12 — 13 14整个DDR SDRAM颗粒的编号&#xff0c;一共是由14…

被追捧为“圣杯”的深度强化学习已走进死胡同

作者 | 朱仲光编译 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai1100&#xff09;【导读】近年来&#xff0c;深度强化学习成为一个被业界和学术界追捧的热门技术&#xff0c;社区甚至将它视为金光闪闪的通向 AGI 的圣杯&#xff0c;大多数人都看好它未来发展的巨大潜力。但…

一种清除windows通知区域“僵尸”图标的方案——问题分析

通知区域名称有趣的历史 假如说到windows通知区域&#xff0c;可能很多人还是不清楚它是什么。如果改称Tray区域&#xff0c;可能有人就懂了。如果再白话点&#xff0c;叫它“托盘”或者“系统托盘”&#xff0c;可能会有更多的人猜到它是windows什么部位。现在我们揭开…

Apache2.4+Tomcat7集群搭建

一、安装jdk、Tomcat、Apache1.安装jdk1.7cd /home/java/software #把软件下载到/home/java/software目录下&#xff0c;将应用安装到/home/java目录下。 wget http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz tar -zxvf jdk-7u80-linux-x64.tar…

一种清除windows通知区域“僵尸”图标的方案——XP系统解决方案

XP下“僵尸”图标的解决方案 从《一种清除windows通知区域“僵尸”图标的方案——问题分析》&#xff08;以后简称《问题分析》&#xff09;一文中分析的通知区域结构可以看出&#xff0c;XP的通知区域结构是相对简单的。如果我们解决了XP下的问题&#xff0c;那么Win7上的问题…

《评人工智能如何走向新阶段》后记(再续12)

由AI科技大本营下载自视觉中国151. 新一代人工智能研究方向: &#xff08;1&#xff09;研究新一代人工智能基础理论&#xff08;机理、模型和算法&#xff09;&#xff1b;&#xff08;2&#xff09;研发面向需求的共性技术&#xff08;以神经网络和算法为核心、数据和硬件为基…

正则表达式测试工具 Regex Tester 的使用方法

2019独角兽企业重金招聘Python工程师标准>>> 正则表达式测试工具“RegexTester”&#xff0c;下载地址&#xff1a;http://www.oschina.net/p/regextester 一、关于本文 今天的工作中遇到了一些正则表达式&#xff0c;我需要检验它们是否正确&#xff0c;不过我对自…

一种清除windows通知区域“僵尸”图标的方案——Windows7系统解决方案

Windows7下“僵尸”图标的解决方案 从《一种清除windows通知区域“僵尸”图标的方案——问题分析》&#xff08;以后简称《问题分析》&#xff09;一文中分析的通知区域结构可以看出&#xff0c;Windows7的通知区域比XP通知区域多出了一个“临时”系统通知区域&#xff08;转载…

《评人工智能如何走向新阶段》后记(再续13)

由AI科技大本营下载自视觉中国161. 引自美国科技媒体TNW记者对美欧企业主管与AI专家的访谈录摘要&#xff0c;谈到2020年AI的八大趋势&#xff1a; ①人工智能将使医疗保健更准确、成本更低&#xff1b; ②可解释性和信托及AI伦理将受到更多关注&#xff1b; ③在人工智能领…

在特定情况下的简单SSO实现方案

最近需要实现类似单点登录的功能。情况是这样的&#xff0c;最初在做网站A&#xff0c;做着做着&#xff0c;要做网站B了&#xff0c;要求与网站A完全分开作为两个应用&#xff0c;但用户数据要求与网站A保持一致&#xff0c;也要求用户在网站A登录后&#xff0c;转到网站B时不…

为创业者保驾护航 “无安全 不创业” 安全狗全国路演北京站

2019独角兽企业重金招聘Python工程师标准>>> 2015年上半年&#xff0c;网络安全问题毫无疑问已经成为了互联网行业关注的重点。在短短一年多的时间里&#xff0c;网络安全问题就从隐患转而呈现出爆发之势&#xff0c;即使是网易、支付宝、携程这样的互联网行业巨头也…

一种将快捷方式从开始菜单“常用应用”的中去除的方法

当我们安装一款软件的时候&#xff0c;这款软件的一些快捷方式可能被设置到开始菜单的“常用应用”区域。但是&#xff0c;如果是“卸载”快捷方式被“钉”到该区域&#xff0c;就会造成非常不好的体验。毕竟把“卸载”接口暴露得如此醒目&#xff0c;如同把该款软件的地狱大门…

ISA---不能访问网址或是多次刷新才能访问的解决方法一则

当你安装ISA2006在WINDOWS 2003 SERVER上&#xff0c;并打上SP2补订时。遇SNAT客户端不能访问WEB&#xff0c;但能PING通&#xff0c;能TELNET通&#xff0c;也能访问QQ或是MSN的问题时可以利用以下方法解决。同时&#xff0c;如果你遇到在此环境下&#xff0c;客户端访问外部网…

《评人工智能如何走向新阶段》后记(深谈人工智能发展前沿)

由AI科技大本营下载自视觉中国来自国内外的跟贴留言 深谈人工智能发展前沿 自从我们发表《评人工智能如何走向新阶段》一文以来&#xff0c;至今约5个月&#xff0c;引来了中外专家、草根们的大量跟贴留言&#xff08;也有人转录他人的公开言论作为跟贴来发表的&#xff09;。…

URAL 2027 URCAPL, Episode 1 (模拟)

题意&#xff1a;给你一个HxW的矩阵&#xff0c;每个点是一个指令&#xff0c;根据指令进行一系列操作。 题解&#xff1a;模拟 #include<cstdio> #include<algorithm> using namespace std;const int maxn 101; char G[maxn][maxn];int dx[] {-1,0,1, 0}; int d…

使用WinHttp接口实现HTTP协议Get、Post和文件上传功能

我实现了一个最新版本的接口&#xff0c;详见《实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现》。还有基于libcurl实现的版本《实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现》。以下是原博文&#xff1a; 我们在做项目开发时&#xff0c;往往会…

收藏 | 一文带你总览知识蒸馏,详解经典论文

「免费学习 60 节公开课&#xff1a;投票页面&#xff0c;点击讲师头像」作者&#xff1a;凉爽的安迪来源 | 深度传送门&#xff08;ID&#xff1a;deep_deliver&#xff09;【导读】这是一篇关于【知识蒸馏】简述的文章&#xff0c;目的是想对自己对于知识蒸馏学习的内容和问题…

[工具推荐]用了TrueCrypt 再无难掩之隐

缘起&#xff1a;混在网络n多年了&#xff0c;手头总有些东西不想被别人看到的东西&#xff0c;由于小弟人品好&#xff0c;相貌佳&#xff0c;总有很多朋友喜欢用我的电脑玩啊玩啊……。 近日&#xff0c;冠希、柏芝等前辈以身示法&#xff0c;为我等上了很好一堂关于隐私保护…

利用phpmailer类邮件发送

<?phprequire("class.phpmailer.php"); //下载的文件必须放在该文件所在目录$mail new PHPMailer(); //建立邮件发送类$address "接收方邮箱"; //接收方地址$mail->IsSMTP(); //使用SMTP方式发送$…

据说这是大多数人【减肥】的真实写照

有句诗说得好 “冬天不减肥&#xff0c;夏天徒伤悲” 在这个人人储存脂肪的季节绝对是你甩掉脂肪的好时机&#xff08;毕竟这是一个拼颜值的时代颜值是天生的&#xff0c;可是身材绝不能输&#xff09;但是 据说大多数人的减肥经历其实是这样的减肥第一步管住嘴&#xff0c;迈开…

PE文件和COFF文件格式分析——导出表的应用——一种摘掉Inline钩子(Unhook)的方法

在日常应用中&#xff0c;某些程序往往会被第三方程序下钩子(hook)。如果被下钩子的进程是我们的进程&#xff0c;并且第三方钩子严重影响了我们的逻辑和流程&#xff0c;我们就需要把这些钩子摘掉(Unhook)。本件讲述一种在32位系统上&#xff0c;如何摘掉API钩子的思路和方法。…

设置列表字段为主键

转贴:Sample event handler to set a field as a pr imary key (enforce no duplicates) Got this as a request from a reader- how to prevent users from adding items with same titles as ones that already exist in the list. Codeusing System;using System.Collectio…

谁登录了你的linux

最近有一台数据库服务器自动重启。查了一下相关登录信息&#xff1a;查看linux下的用户登录日志&#xff0c;包括用户登录时所用的主机的ip&#xff1a;more /var/log/secure who /var/log/wtmp干了些什么&#xff1f; root账户下输入su - username 切换到username下输入 histo…

一种使用GDI+对图片尺寸和质量的压缩方法

今天同事向我询问图片压缩的算法&#xff0c;我想起大概两三年前做过的一个项目。其中包含了尺寸和质量两种压缩算法&#xff0c;并且支持JPEG、bmp、PNG等格式。今天把这段逻辑贴出来&#xff0c;供大家参考。&#xff08;转载请指明来源于breaksoftware的CSDN博客&#xff09…

.NET企业级应用架构设计系列之应用服务器

本文属spanzhang&#xff08;张友邦&#xff09;原创&#xff0c;发布地址为&#xff1a;http://blog.csdn.net/spanzhang。转载或引用请注明原文之出处&#xff0c;谢谢&#xff01; .NET企业级应用架构设计系列之开场白 .NET企业级应用架构设计系列之技术选型 这里要说到的…

编程语言发展70年,用50种不同语言输出「Hello World」

「免费学习 60 节公开课&#xff0c;投票页面&#xff0c;点击讲师头像」作者 | Sylvain Saurel译者 | 风车云马责编 | 屠敏【导读】历经 70 年&#xff0c;不断出现的编程语言为开发者解决了哪些难题&#xff1f;其存在又有怎样的特性&#xff1f;本文将以「Hello World」为例…

函数循环的理解

2019独角兽企业重金招聘Python工程师标准>>> var ulObjdocument.getElementById("box"); var lisObjulObj.getElementsTagname("li"); for(var i0;i<lisObj.length;i) { lisObj[i].οnclickfunction()//循环时对应节点绑定事件&#xff0c;事…

从LeNet到GoogLeNet:逐层详解,看卷积神经网络的进化

「免费学习 60 节公开课&#xff1a;投票页面&#xff0c;点击讲师头像」作者 | MrCharles来源 | CSDN原力计划获奖作品&#xff08;*点击阅读原文&#xff0c;查看作者更多文章&#xff09;前言深度学习的兴起使卷积神经网络在计算机视觉方面大放异彩&#xff0c;本文将按时间…

Windows客户端C/C++编程规范“建议”——前言

前言 工作中接触了很多编程规范。其中最有意思的是&#xff0c;公司最近发布了一版C/C编程规范&#xff0c;然后我看到该规范的最后一段时&#xff0c;有这么一句&#xff1a;“该规范不适用于Windows平台开发”。看来这份规范是由做其他平台开发的同学制定的。那么做Windows开…