什么是单行和多行子查询?

单行子查询

当外部查询的结果基于单个未知值时,将使用单行子查询。尽管此查询类型正式称为“单行”,但该名称暗示该查询返回多列,但仅返回一行结果。但是,单行子查询只能将仅由一列组成的一行结果返回给外部查询。

在下面的SELECT查询中,内部MySQL仅返回一行,即公司的最低工资。依次使用该值比较所有员工的薪水,并仅显示薪水等于最低薪水的员工。

SELECT first_name, salary, department_id
FROM employees
WHERE salary = (SELECT MIN (salary)
FROM employees);

当需要基于某些条件限制查询的分组结果时,将使用HAVING子句。如果必须将子查询的结果与组函数进行比较,则必须将内部查询嵌套在外部查询的HAVING子句中。

SELECT department_id, MIN (salary)
FROM employees
GROUP BY department_id
HAVING MIN (salary) < (SELECT AVG (salary)
FROM employees)

多行子查询

多行子查询是嵌套查询,可以将多行结果返回给父查询。多行子查询最常用于WHERE和HAVING子句中。由于它返回多个行,因此必须由集合比较运算符(IN,ALL,ANY)进行处理。虽然IN运算符的含义与上一章中讨论的含义相同,但是ANY运算符会将指定的值与子查询返回的每个值进行比较,而ALL将值与子查询返回的每个值进行比较。下面的查询将显示错误,因为单行子查询返回多行。

SELECT first_name, department_id FROM employees WHERE department_id = (SELECT department_id FROM employees WHERE LOCATION_ID = 100)