IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL中EXISTS的用法(五大要点) -> 正文阅读

[大数据]MySQL中EXISTS的用法(五大要点)

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False

要点一:执行顺序

EXISTS语法:

SELECT 字段 FROM table WHERE EXISTS (subquery); 

subquery是一个受限的SELECT语句(不允许有COMPUTE子句和INTO关键字)

示例:

SELECT * FROM A WHERE EXISTS (SELECT 1 FROM B WHERE B.user_id = A.id); 

(1)首先执行一次外部查询,并缓存结果集,如 SELECT * FROM A

(2)遍历外部查询结果集的每一行记录R,代入子查询中作为条件进行查询,如 SELECT 1 FROM B WHERE B.id = A.id

(3)如果子查询有返回结果,则EXISTS子句返回TRUE,这一行R可作为外部查询的结果行,否则不能作为结果

要点二: 等价关系

下面三种情况返回数据相同,都会返回student表的所有数据:

select * from student; 
select * from student where exists (select 1); 
select * from student where exists (select null); 

对user表的记录逐条取出,由于子查询中的select 1永远能返回记录行,那么student表的所有记录都将被加入结果集

要点三: EXISTS与NOT EXISTS相反

总的来说,如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件,二者意思相反,用法类似

要点四: IN和EXISTS

(1)IN和NOT IN常用于where表达式中,其作用是查询某个范围内的数据。
(2)IN和NOT IN语句分别可以用EXISTS和NOT EXISTS 进行改写
(3)EXISTS某些情况下可以比IN提高运行效率;
而用NOT EXISTS都比NOT IN要快
(4)如果两个表中一个较小,一个是大表,
则建议子查询表大的用exists,子查询表小的用in
例如:表A(小表),表B(大表)
示例一:

-- IN语法
select * from A where cc in (select cc from B) 

-- exists语法 
select * from A where exists(select cc from B where cc=A.cc) 

【注意】

此时子查询为表B(大表),用exists效率高。

示例二

-- 效率高
select * from B where cc in (select cc from A) 
-- 效率低,用到了A表上cc列的索引。
select * from B where exists(select cc from A where cc=B.cc) 

【注意】

此时子查询为表A(小表),用IN效率高。

要点五:NOT IN和NOT EXISTS

如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;

而not extsts 的子查询依然能用到表上的索引。

所以无论那个表大,用NOT EXISTS都比NOT IN要快。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:43:14  更:2022-04-22 18:43:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:53:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码