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
随机推荐
- 大型运输行业实战_day13_1_定时任务spring-quartz
1.jar包 拷贝quartz-2.2.3.jar包到项目 2.编写定时任务类TicketQuart.java package com.day02.sation.task; import com.da ...
- 带轮播图、导航栏、商品的简单html,以及轮播图下边数字随轮播图的改变而改变
---恢复内容开始--- 在做这个的时候,最不会的是中间轮播图下边的数字是如何实现转变的,后来加入了jQuery就能实现了. css部分: <style type="text/css& ...
- JS导出网页数据到EXCEL
想得到的效果是,在网页上点击导出按钮,弹出文件保存框,输入文件名并选择路径后保存.可能是由于浏览器的安全机制,一直没能找到合适的解决方案,就采用了其它的一些替代方案. 思路是:后台一般处理程序查询数据 ...
- MAT eclipse内存分析工具
启动的时候提示: Failed to load the JNIshared library 解决办法: 查看配置文件:MemoryAnalyzer.ini --launcher.librarypl ...
- linux重新安装python
第一步:下载python2.7 wget https://www.Python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz 第二步: 解压刚刚下载的压缩包 ...
- C语言标准io函数总结
转自:http://blog.csdn.net/sun_top/article/details/4235992本来是在vscode上用markdown排好版的,结果复制到这上面就变了形,无奈. 函数列 ...
- jQuery 替换元素
参考https://www.cnblogs.com/halai/p/6868027.html http://www.w3school.com.cn/jquery/manipulation_replac ...
- 如何将div中的内容设置为空同时还要保留div本身
将div的innerHTML置为空即可,下面有2类方法可以实现: 假设有如下的html片段: <div id="test">这是要删除的内容,还要保留test本身< ...
- MySql安装和基本管理&mysql语句
MySql安装和基本管理 本章内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下 ...
- 全国高校绿色计算大赛 预赛第一阶段(C++)第3关:旋转数组
挑战任务 在计算机中,一张数字图像,可以被看做是一个矩阵或者说数组. 学过线性代数的同学对矩阵肯定不陌生.一般来说,图像是一个标准的矩形,有着宽度(width)和高度(height).而矩阵有着行(r ...