开发者学堂课程【MySQL 高级应用 - 索引和锁:in 和 exists 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/598/detail/8624
in 和 exists
目录:
一、Exists介绍
二、In与exists选择
一、EXISTS
SELECT..FROM table WHERE EXISTS(subquery)
该语法可以理解为:
将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否得以保留。
提示:
1. EXISTS(subquerv)只返回 TRUE 或 FALSE,因此子查询中的 SELECT* 也可以是SELECT1 或 seleutX,官方说法是实际执行时会忽略 SELECT 清单,因此没有区别
2. EXISTS 子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担忧效率问题,可进行实际检验以确定是否有效率问题。
3.EXISTS 子查询往往也可以用条件表达式、其他子查询或者 JOIN 来替代,何种最优需要具体问题具体分析
二、in 与 exists的选择
当 A 表中数据多于 B 表中的数据时,这时我们使用 IN 优于 EXISTS
当 B 表中数据多于 A 表中的数据时,这时我们使用 EXISTS 优于 IN
因此是使用 IN 还是 EXISTS 就需要根据我们的需求决定了。但是如果两张表中的数据差不多时那么是使用 IN 还是使用 EXISTS差别不大。
EXISTS 子查询只返回 true 或者 false,因此子查询中的 select * from 可以是 select 1或者其他