什么是单行和多行子查询?
阅读更多:MySQL 教程
单行子查询
单行子查询是在外部查询结果基于一个未知的单个值时使用的。虽然这种查询类型正式称为“单行”,但名称意味着查询返回多列,但只有一行结果。但是,单行子查询只能向外部查询返回一个由一个列组成的一行结果。
在下面的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)