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 --》保留子查询不符合条件的字段