EXISTS 和 IN 的区别
exists子句的用法
select * from 表1 where exists (select * from 表2 where 表1.列名=表2.列名);
exists子句返回的结果并不是从数据库中检索出的结果集,而是一个布尔值。如果exists子句中的select子句查询到结果,exists子句就返回true,反之返回false。
因此exists子句中的select子句选择的列并不重要,重要的是exists子句中的select子句中的where子句的筛选条件。
exists子句会对外表(即表1)用loop逐条记录查询,每次查询都会查看exists中的select语句,如果select子句返回记录行(无论返回记录行是多少,只要能返回),exists就会返回true,则外表中的当前记录就会被检索出来;如果select子句没有返回记录行,exists就会返回false,则外表中的当前记录就会被丢弃。
not exists 与 exists相反,即当exists子句中有结果集返回时,loop到的当前记录会被丢弃;反之会被检索出来。
in 子句的用法
select * from 表1 where 列名 in (select 列名 from 表2 where 筛选条件);
in查询相当于多个or条件的叠加。
in子句需要先将子查询的记录全部查出来。注意in子句中的子查询返回的结果集必须只有一个字段。假设子查询返回的结果集有m条记录,在进行m次查询。
exists 和 in 的效率
当两个表的大小相当时,用exists和in的效率差别不大
如果两个表一个大一个小,则子查询表大的用exists,子查询表小的用in。
EXISTS 和 IN 的区别的更多相关文章
- List<T>中Exists 和Contains的区别
.net编码中,使用泛型List<>时,经常遇到这样的需求:新来一个Model对象,如果已有的List中没有这条数据,则把新对象Add到List中,否则不处理 判断已有的List中是否包含 ...
- 数据库sql语句的exists和in的区别
性能变化的关键: #1 执行的先后顺序 谁是驱动表,谁先执行查询,谁后执行查询 #2 执行过程 exists的优点是:只要存在就返回了,这样的话很有可能不需要扫描整个表. in需要扫描完整个表,并 ...
- SQL语句中exists和in的区别
转自https://www.cnblogs.com/liyasong/p/sql_in_exists.html 和 http://blog.csdn.net/lick4050312/article/d ...
- SQL查询中in、exists、not in、not exists的用法与区别
1.in和exists in是把外表和内表作hash(字典集合)连接,而exists是对外表作循环,每次循环再对内表进行查询.一直以来认为exists比in效率高的说法是不准确的,如果查询的两个表大小 ...
- Oracle中exists与in的区别
有两个简单例子,以说明 "exists"和"in"的效率问题 1) select * from T1 where exists(select 1 from T2 ...
- sql中 in 、not in 、exists、not exists 使用方法和区别
% 的一类. NOT IN:通过 NOT IN keyword引入的子查询也返回一列零值或很多其它值. 以下查询查找没有出版过商业书籍的出版商的名称. SELECT pub_name FROM pub ...
- SQL关于IN和EXISTS的用法和区别的比较
1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....).2.exist会针对子查询的表使用索引. not exist会对主子查询都 ...
- MySQL中exists和in的区别及使用场景
exists和in的使用方式: 1 #对B查询涉及id,使用索引,故B表效率高,可用大表 -->外小内大 1 select * from A where exists (select * fro ...
- SqlServer中exists和in的区别
1.in 2.exists
随机推荐
- java+selenium自动化实践
git+java+selenium+testng +maven+idea 1.git之代码维护(下载.分支切换.上传) 下载命令 "git clone git@github.com:Luna ...
- jvm中堆和栈的区别
1.前言. 其实jvm能优化的空间不多,最主要的是使用的共享内存不要超过默认的2g或者自己调的参数.但了解一下还是有点意思的,建议面试时还是要看,别学笔者裸奔. 2.区别. 网上说是有5点区 ...
- spket插件安装并设置JQuery自动提示(转)
spket是一个开发JavaScript.jQuery.Ext_js等的开发工具,它可以 是独立的IDE,也可以作为Eclipse的插件使用,下面介绍如何在Eclipse中安装spket插件: 1.首 ...
- C#中与C++中的 LPWSTR(wchar_t *) 对应的类型
1.设置 CharSet = CharSet.Unicode [DllImport("test.dll", EntryPoint = "sum()", Char ...
- 十 suprocess模块
1 import subprocess 2 3 ''' 4 sh-3.2# ls /Users/egon/Desktop |grep txt$ 5 mysql.txt 6 tt.txt 7 事物.tx ...
- nagios维护之常见问题
一.重启nagios 报错: Starting nagios:This account is currently not available. #这个账户目前不可用: 解决方法: a.编辑/e ...
- 187. Repeated DNA Sequences (String; Bit)
All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...
- 安装程序遇到错误0x80240037
安装ie插件或者微软的一些其他程序等报错0x80240037,如下图所示: 解决办法: 下面我将以ie的插件IE11-Windows6.1-KB3008923-x64.msu安装为例: 1.把IE11 ...
- Mac 查看端口占用及杀死进程
lsof -i : kill -
- 对arm裸板调试的理解
由于arm芯片一般都包含的由jtag调试这项功能,cpu向外部发出信号时,一般都要同jtag发送出去,它就像一个路口的交警一样,能够控制车辆的运行,当然在arm中指的是cpu发出的数据和地址,我们在调 ...