MySQL 子查询
通常 WHERE 子句中使用 子查询 效率是非常低的。
但是如果我们子查询的结果当一个单独的表使用,进行内外链接是没有问题的。
子查询简介:在一种查询中嵌套查询的语句。
可以使用子查询的三个子句:WHERE/FROM/SELECT。。但只有FROM 子句的执行效率最高。(因为WHERE/SELECT中的子查询都会执行多次,效率自然就下降了)



from 子句子查询
# FORD 和MARTIN 两个人的同事
SELECT e.ename
FROM t_emp as e
JOIN (SELECT deptno FROM t_emp WHERE ename IN ('FORD', 'MARTIN')) as se
WHERE e.deptno = se.deptno
AND (e.ename not in ('FORD', 'MARTIN'))
总结
WHERE中的子查询匹配记录的时候要反复执行,是不推荐使用的,但是把查询结果集当做一张表来使用,跟其他表做连接,这是from子句的子查询,这种子查询还是推荐使用的。
子查询分类
按照结果集中的数量进行分类:单行子查询,多行子查询
-
1,单行子查询的结果只有一条记录,多行子查询结果则有多行记录。
-
2,多行子查询只能出现在WHERE子句和FROM子句中(SELECT子句中绝对不可能出现多行子查询)

WHERE 子句中使用 IN,ALL,ANY,EXISTS 关键字处理多行表达式结果集,
-
IN--》等于多个结果中的任何一个都可以;
-
ALL--》结果中的所有
-
ANY-->结果中的任何一个
EXISTS-->把原来在子查询之外的条件判断,写到子查询里面。+ NOT --》保留子查询不符合条件的字段
