时间:2021-07-01 10:21:17 帮助过:2人阅读
1.2 返回结果为单行多列子查询
SELECT ename,sal,job FROM e_employee WHERE (sal,job) = (SELECT sal,job FROM t_employee WHERE ename=‘SMITH‘)
2. 返回结果为多行单列子查询
当子查询的返回结果为多行单列数据记录时,该子查询语句一般在主查询语句的WHERE子句里,通常会包含IN,ANY,ALL,EXISTS等关键字。
2.1 带有关键字IN的子查询
当主查询语句的条件是子查询的查询结果时,就可以通过关键字IN来进行判断,相反如果想实现主查询的条件不是子查询的查询结果时,就可以通过关键字NOT IN来进行判断。
SELECT * FROM t_employee WHERE deptno IN (SELECT deptno FROM t_dept)
2.2 带有关键字ANY的子查询
SELECT ename,sal FROM t_employee WHERE sal >ANY IN (SELECT sal FROM t_employee WHERE job=‘MANAGER‘)
关键字ANY用来表示主查询的条件为满足子查询返回查询结果中任意一条数据记录,该关键字有三种匹配方式,分别如下:
=ANY:其功能与关键字IN一样。
>ANY(>=ANY):比子查询中返回数据记录中最小的还要大于(大于等于)数据记录。
<ANY(<=ANY):比子查询中返回数据记录中最大的还要大于(小于等于)数据记录。
2.3 带有关键字ALL的子查询
SELECT ename,sal FROM t_employee WHERE sal >ALL IN (SELECT sal FROM t_employee WHERE job=‘MANAGER‘)
关键字ALL用来表示主查询的条件为满足子查询返回查询结果中所有数据记录,该关键字有以下两种匹配方式。
>ALL(>=ALL):比子查询中返回数据记录中最大的还要大于(大于等于)数据记录。
<ALL(<=ALL):比子查询中返回数据记录中最小的还要大于(大于等于)数据记录。
2.4 带有关键字EXISTS的子查询
关键字EXISTS是一个布尔类型,当返回结果集时为TRUE,不能返回结果集时为FALSE。查询时EXISTS对外表采用遍历方式逐条查询,每次查询都会比较EXISTS的条件语句,当EXISTS里的条件语句返回记录行时则条件为真,此时返回当前遍历到的记录;反之,如果EXISTS里的条件语句不能返回记录行,则丢弃当前遍历到的记录。
SELECT * FROM t_dept c WHERE NOT EXISTS (SELECT * FROM e_employee WHERE deptno=c.deptno);
3. 返回结果为多行多列子查询
当子查询的返回结果为多行多列数据记录时,该子查询语句一般会在主查询语句的FROM子句里,被当作一张临时表的方式来处理。
mysql之子查询
标签: