子查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。任何允许使用表达 式的地方都可以使用子查询。
子查询可以使我们的编程灵活多样,可以用来实现一些特殊的功能。但是在性能上,往往一个不合适的子查询用法会 形成一个性能瓶颈。
如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。
相关子查询可以用 IN、NOT IN、 EXISTS、NOT EXISTS 引入。 关于相关子查询,应该注意: 1、NOT IN、NOT EXISTS 的相关子查询可以改用 LEFT JOIN 代替写法。
2、 如果保证子查询没有重复 ,IN、EXISTS 的相关子查询可以用 INNER JOIN 代替。
3、 IN 的相关子查询用 EXISTS 代替,
4、 不要用 COUNT()的子查询判断是否存在记录,最好用 LEFT JOIN 或者 EXISTS,比如有人写这样的语句: