SQL ALL 運算子

摘要:在本教程中,您將學習如何使用 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 運算子,例如 DELETEUPDATE

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 表。

SQL ALL Operator - Employees Table

以下查詢返回部門 ID 為 3 的員工的最低最高工資。

SELECT
  MIN(salary) min_salary,
  MAX(salary) max_salary
FROM
  employees
WHERE
  department_id = 3;

試一試

輸出

 min_salary | max_salary
------------+------------
    2500.00 |   11000.00

SQL 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.00

SQL 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.00

SQL 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 運算子與比較運算子將一個值與子查詢返回的所有值進行比較。

測驗 #

資料庫 #

本教程是否有幫助?
© .