SQL ALL

**摘要:** 本教程将讲解 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 - Sample Table

使用大于运算符的 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)
SQL ALL with the greater than operator example

让我们通过查询部门 2 中员工的 最高 工资来验证这一点

SELECT 
    MAX(salary)
FROM
    employees
WHERE
    department_id = 2;  
Code language: SQL (Structured Query Language) (sql)
SQL ALL - Max salary

此查询返回 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)
SQL ALL with the greater than or equal to operator example

从屏幕截图中可以清楚地看出,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)
SQL ALL- Min salary

要找到所有其工资低于 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 with the less than operator example

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 with the less than or equal to operator example

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)
SQL ALL with the not equal to operator example

请注意,子查询使用 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 with the equal operator example

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

本教程是否有用?