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 的 Marketing 部門員工最高薪水的員工

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 中值大於或等於子查詢傳回的所有值的列。

例如,以下查詢找出所有薪水大於或等於 Marketing 部門員工最高薪水的員工

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,與 Marketing 部門員工的最高薪水相等,因此包含在結果集中。

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 運算子來測試值是否符合子查詢傳回的一組值。

本教學是否有幫助?