摘要:在本教學中,您將學習 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 的 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)

讓我們透過查詢部門 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
中值大於或等於子查詢傳回的所有值的列。
例如,以下查詢找出所有薪水大於或等於 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)

如螢幕截圖清楚顯示,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)

若要找出所有薪水小於 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
運算子來測試值是否符合子查詢傳回的一組值。