子查询是一个查询语句会嵌套在另一个查询语句的内部的查询(MySQL4.1开始)
子查询的结果作为外层另一个查询的过滤条件
子查询常用的操作符:
- ANY(SOME)
- ALL
- IN
- EXISTS
1.带ANY,SOME关键字的子查询
ANY/SOME是同义词,它们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中国的任何一个比较条件,就返回一个结果作为外层查询的条件.
2.带ALL关键字的子查询
与ANY/SOME不同,使用ALL时需要同时满足所有的内层查询的条件
3.带EXISTS关键字的子查询
EXISTS关键字后边的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS返回的结果为true,此时外层查询语句将进行查询,如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询
4.带IN/NOT IN关键字的子查询
IN进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作
MySQL实际上执行了两个操作过程,即先执行内层子查询,再执行外层查询.内层查询结果作为外部查询的比较条件
子查询的功能爷可以通过连接查询完成,但是子查询是的MySQL代码更容易阅读和编写
5.带比较运算符的子查询
子查询还可以使用其他的比较运算符,如"<","<=","=",">="和"!="等