**摘要:** 本教程将讲解 SQL ALL 操作符以及如何用它将一个值与一组值进行比较。
SQL ALL 操作符简介
SQL ALL
操作符是一个 逻辑操作符,用于将单个值与 子查询返回的单列值集合进行比较。
下面说明了 SQL ALL
操作符的语法
WHERE column_name comparison_operator ALL (subquery)
Code language: SQL (Structured Query Language) (sql)
SQL ALL
操作符必须位于 比较操作符(如 >、>=、<、<=、<>、=)前面,后面跟着 子查询。一些数据库系统(如 Oracle)允许用字面值列表代替子查询。
请注意,如果子查询没有返回行,则 WHERE
子句中的条件始终为真。假设子查询返回一行或多行,下表说明了 SQL ALL
操作符的含义
条件 | 含义 |
---|---|
c > ALL(…) | 列 c 中的值必须大于集合中的最大值才能求值为真。 |
c >= ALL(…) | 列 c 中的值必须大于或等于集合中的最大值才能求值为真。 |
c < ALL(…) | 列 c 中的值必须小于集合中的最小值才能求值为真。 |
c >= ALL(…) | 列 c 中的值必须小于或等于集合中的最小值才能求值为真。 |
c <> ALL(…) | 列 c 中的值必须不等于集合中的任何值才能求值为真。 |
c = ALL(…) | 列 c 中的值必须等于集合中的任何值才能求值为真。 |
SQL ALL 示例
我们将使用 示例数据库 中的 employees
表进行演示

使用大于运算符的 SQL ALL
以下查询查找其 column_name
中的值大于子查询返回的最大值的那些行
SELECT
*
FROM
table_name
WHERE
column_name > ALL (subquery);
Code language: SQL (Structured Query Language) (sql)
例如,以下语句查找在市场部工作且 id 为 2 的员工中,其工资高于其最高工资的那些员工
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary > ALL (SELECT
salary
FROM
employees
WHERE
department_id = 2)
ORDER BY salary;
Code language: SQL (Structured Query Language) (sql)

让我们通过查询部门 2 中员工的 最高 工资来验证这一点
SELECT
MAX(salary)
FROM
employees
WHERE
department_id = 2;
Code language: SQL (Structured Query Language) (sql)

此查询返回 13,000
,它低于上述使用 ALL 操作符的查询返回的任何工资。
使用大于或等于运算符的 SQL ALL
下面显示了带有大于或等于比较运算符的 SQL ALL
操作符的语法
SELECT
*
FROM
table_name
WHERE
column_name >= ALL (subquery);
Code language: SQL (Structured Query Language) (sql)
该查询返回其 column_name
中的值大于或等于子查询返回的所有值的那些行。
例如,以下查询查找其工资大于或等于营销部门员工的最高工资的那些员工
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary >= ALL (SELECT
salary
FROM
employees
WHERE
department_id = 2)
ORDER BY salary;
Code language: SQL (Structured Query Language) (sql)

从屏幕截图中可以清楚地看出,Michael
的工资为 13,000
,它等于市场部中员工的最高工资,它包括在结果集中。
使用小于运算符的 SQL ALL
下面的示例说明了与小于运算符一起使用的 ALL
运算符
SELECT
*
FROM
table_name
WHERE
column_name < ALL (subquery);
Code language: SQL (Structured Query Language) (sql)
此查询返回其 column_name
列中的值小于子查询返回的最小值的全部行。
下述语句找到 Marketing
部门中员工的最低工资
SELECT
MIN(salary)
FROM
employees
WHERE
department_id = 2;
Code language: SQL (Structured Query Language) (sql)

要找到所有其工资低于 Marketing
部门中员工最低工资的员工,请将 ALL
运算符与小于运算符一起使用,如下所示
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary < ALL (SELECT
salary
FROM
employees
WHERE
department_id = 2)
ORDER BY salary DESC;
Code language: SQL (Structured Query Language) (sql)
结果是

SQL ALL 与小于或等于运算符
以下显示了 ALL
运算符与小于或等于运算符一起使用的语法
SELECT
*
FROM
table_name
WHERE
column_name <= ALL (subquery);
Code language: SQL (Structured Query Language) (sql)
例如,下述语句找到所有其工资小于或等于 Marketing 部门中员工最低工资的员工
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary <= ALL (SELECT
salary
FROM
employees
WHERE
department_id = 2)
ORDER BY salary DESC;
Code language: SQL (Structured Query Language) (sql)

SQL ALL 与不等于运算符
此查询返回其 column_name
列中的值不等于子查询返回的所有值的全部行
SELECT
*
FROM
table_name
WHERE
column_name <> ALL (subquery);
Code language: SQL (Structured Query Language) (sql)
例如,若要找到其工资不等于各个部门平均工资的员工,请使用以下查询
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary <> ALL (SELECT
AVG(salary)
FROM
employees
GROUP BY department_id)
ORDER BY salary DESC;
Code language: SQL (Structured Query Language) (sql)

请注意,子查询使用 AVG()
函数和 GROUP BY
子句,通过部门查找员工的平均工资。
SQL ALL 与等于运算符
当将 ALL
运算符与等于运算符一起使用时,查询将找到其 column_name
列中的值等于子查询返回的所有值的全部行
SELECT
*
FROM
table_name
WHERE
column_name = ALL (subquery);
Code language: SQL (Structured Query Language) (sql)
以下示例找到其工资等于 Marketing
部门中员工最高工资的所有员工
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary = ALL (SELECT
MAX(salary)
FROM
employees
WHERE
department_id = 2);
Code language: SQL (Structured Query Language) (sql)

在本教程中,你学习了如何使用 SQL ALL
运算符来测试值是否与子查询返回的一组值匹配。