摘要:在本教程中,您將學習如何使用 SQL ALL 運算子將一個值與子查詢返回的所有值進行比較。
SQL ALL 運算子簡介 #
ALL 運算子與比較運算子(如 >、>=、<、<=、<>、=)一起使用,用於將一個值與子查詢返回的所有值進行比較。
以下是 ALL 運算子的基本語法:
value ALL comparison_operator (subquery)當滿足以下條件時,條件為 true:
- 子查詢不返回任何行。
- 或者,該值與子查詢返回的所有值的比較結果都為
true。
下面顯示了在 SELECT 語句的 WHERE 子句中使用 ALL 運算子的語法:
SELECT
column1,
column2
FROM
table_name
WHERE
column_name comparison_operator ALL (subquery);Code language: SQL (Structured Query Language) (sql)請注意,您也可以在其他語句的 WHERE 子句中使用 ALL 運算子,例如 DELETE 和 UPDATE。
ALL 運算子確保 WHERE 子句中的條件對於子查詢返回的所有值都必須為真。
以下是 ALL 運算子的主要特點:
- 子查詢必須返回一個包含一列值以供比較的結果集。
ALL運算子將column_name中的每個值與子查詢返回的所有值進行比較。- 如果子查詢不返回任何行,結果始終為
true。 - 如果子查詢至少返回一行,下表顯示了
ALL運算子對於每個比較運算子的含義:
| 條件 | 含義 |
|---|---|
| c > ALL(subquery) | 當列 c 中的值大於子查詢返回的最大值時,條件為 true。 |
| c >= ALL(subquery) | 當列 c 中的值大於或等於子查詢返回的最大值時,條件為 true。 |
| c < ALL(subquery) | 當列 c 中的值小於子查詢返回的最小值時,條件為 true。 |
| c <= ALL(subquery) | 當列 c 中的值小於或等於子查詢返回的最小值時,條件為 true。 |
| c <> ALL(subquery) | 當列 c 中的值不等於子查詢返回的任何值時,條件為 true。 |
| c = ALL(subquery) | 當列 c 中的值等於子查詢返回的所有值時,條件為 true。您可能很少將 ALL 運算子與 = 運算子一起使用,因為如果子查詢返回不同的值,則條件始終為 false。 |
SQL ALL 運算子示例 #
我們將使用示例資料庫中的 employees 表。

SELECT
MIN(salary) min_salary,
MAX(salary) max_salary
FROM
employees
WHERE
department_id = 3;輸出
min_salary | max_salary
------------+------------
2500.00 | 11000.00SQL ALL 運算子與大於運算子結合使用 #
以下語句使用 ALL 運算子和大於 (>) 運算子來查詢工資高於部門 ID 為 3 的員工平均工資的員工。
SELECT
first_name,
last_name,
salary
FROM
employees
WHERE
salary > ALL (
SELECT
salary
FROM
employees
WHERE
department_id = 3
)
ORDER BY
salary;Code language: SQL (Structured Query Language) (sql)該查詢返回工資為 12,000 及以上的員工,這些工資高於部門 3 所有員工的最高工資。
first_name | last_name | salary
------------+-----------+----------
Shelley | Higgins | 12000.00
Nancy | Greenberg | 12000.00
Michael | Hartstein | 13000.00
Karen | Partners | 13500.00
John | Russell | 14000.00
Lex | De Haan | 17000.00
Neena | Kochhar | 17000.00
Steven | King | 24000.00SQL ALL 運算子與大於或等於運算子結合使用 #
以下查詢使用 ALL 運算子和大於或等於運算子 (>=) 來查詢工資高於或等於部門 3 員工最高工資的員工。
SELECT
first_name,
last_name,
salary
FROM
employees
WHERE
salary >= ALL (
SELECT
salary
FROM
employees
WHERE
department_id = 3
)
ORDER BY
salary;Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name | salary
------------+-----------+----------
Den | Raphaely | 11000.00
Shelley | Higgins | 12000.00
Nancy | Greenberg | 12000.00
Michael | Hartstein | 13000.00
Karen | Partners | 13500.00
John | Russell | 14000.00
Neena | Kochhar | 17000.00
Lex | De Haan | 17000.00
Steven | King | 24000.00結果集包括工資為 11,000 及以上的員工,該工資大於或等於部門 3 的最高工資 (11,000)。
SQL ALL 運算子與小於運算子結合使用 #
以下查詢使用 ALL 運算子和 < 運算子來查詢工資低於所有部門平均工資的員工。
SELECT
first_name,
last_name,
salary
FROM
employees
WHERE
salary < ALL (
SELECT
average_salary
FROM
(
SELECT
AVG(salary) average_salary,
department_id
FROM
employees
GROUP BY
department_id
)
)
ORDER BY
salary DESC;Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name | salary
------------+-------------+---------
Sarah | Bell | 4000.00
Britney | Everett | 3900.00
Alexander | Khoo | 3100.00
Shelli | Baida | 2900.00
Sigal | Tobias | 2800.00
Irene | Mikkilineni | 2700.00
Guy | Himuro | 2600.00
Karen | Colmenares | 2500.00查詢工作原理:
首先,子查詢返回所有部門的平均工資列表。
SELECT
average_salary
FROM
(
SELECT
AVG(salary) average_salary,
department_id
FROM
employees
GROUP BY
department_id
)其次,外部查詢返回工資低於子查詢返回的所有平均工資的員工。
SQL ALL 運算子與小於或等於運算子結合使用 #
以下語句使用 ALL 運算子和小於或等於運算子 (<=) 來查詢工資小於或等於所有部門最高工資的員工。
SELECT
first_name,
last_name,
salary
FROM
employees
WHERE
salary <= ALL (
SELECT
max_salary
FROM
(
SELECT
MAX(salary) max_salary,
department_id
FROM
employees
GROUP BY
department_id
)
)
ORDER BY
salary DESC;Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name | salary
------------+-------------+---------
Jennifer | Whalen | 4400.00
Diana | Lorentz | 4200.00
Sarah | Bell | 4000.00
Britney | Everett | 3900.00
Alexander | Khoo | 3100.00
Shelli | Baida | 2900.00
Sigal | Tobias | 2800.00
Irene | Mikkilineni | 2700.00
Guy | Himuro | 2600.00
Karen | Colmenares | 2500.00SQL ALL 運算子與不等於運算子結合使用 #
以下查詢使用 ALL 運算子和不等於運算子 (<>) 來查詢工資不等於每個部門最低工資的員工。
SELECT
first_name,
last_name,
salary
FROM
employees
WHERE
salary <> ALL (
SELECT
min_salary
FROM
(
SELECT
MIN(salary) min_salary,
department_id
FROM
employees
GROUP BY
department_id
)
)
ORDER BY
salary DESC;Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name | salary
-------------+------------+----------
Steven | King | 24000.00
John | Russell | 14000.00
Karen | Partners | 13500.00
Michael | Hartstein | 13000.00
Shelley | Higgins | 12000.00
Nancy | Greenberg | 12000.00
...摘要 #
- 使用
ALL運算子與比較運算子將一個值與子查詢返回的所有值進行比較。
測驗 #
資料庫 #
本教程是否有幫助?