SQL ANY

摘要: 在本教學中,您將了解 SQL ANY 運算子以及如何使用它來比較一個值與一組值。

SQL ANY 運算子介紹

ANY 運算子是一個邏輯運算子,用於比較一個值與子查詢返回的一組值。ANY 運算子前面必須有一個比較運算子 >, >=, <, <=, =, <>,後面接著一個子查詢

以下說明 ANY 運算子的語法

WHERE column_name comparison_operator ANY (subquery)
Code language: SQL (Structured Query Language) (sql)

如果子查詢沒有返回任何列,則條件評估為 false。假設子查詢沒有返回零列,以下說明 ANY 運算子在與每個比較運算子一起使用時的含義

條件含義
x = ANY (…) 欄位 c 中的值必須與集合中的一個或多個值匹配,才能評估為 true。
x != ANY (…) 欄位 c 中的值不能與集合中的任何一個值匹配,才能評估為 true。
x > ANY (…) 欄位 c 中的值必須大於集合中的最小值,才能評估為 true。
x < ANY (…) 欄位 c 中的值必須小於集合中的最大值,才能評估為 true。
x >= ANY (…) 欄位 c 中的值必須大於或等於集合中的最小值,才能評估為 true。
x <= ANY (…) 欄位 c 中的值必須小於或等於集合中的最大值,才能評估為 true。

SQL ANY 範例

為了示範,我們將使用範例資料庫中的 employees 表格

SQL ANY - Employees Table

SQL ANY 與等於運算子範例

以下陳述式使用 AVG() 函數和 GROUP BY 子句來找出每個部門的平均薪資

SELECT 
    ROUND(AVG(salary), 2)
FROM
    employees
GROUP BY 
    department_id
ORDER BY 
    AVG(salary) DESC;
Code language: SQL (Structured Query Language) (sql)
SQL ANY - average salary of each department

若要找出所有薪資等於其部門平均薪資的員工,您可以使用以下查詢

SELECT 
    first_name, 
    last_name, 
    salary
FROM
    employees
WHERE
    salary = ANY (
        SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY 
            department_id)
ORDER BY 
    first_name, 
    last_name,
    salary;   
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the equal to operator

使用 SQL ANY 與不等於運算子範例

同樣地,以下查詢找出所有薪資不等於每個部門平均薪資的員工

SELECT 
    first_name, 
    last_name, 
    salary
FROM
    employees
WHERE
    salary <> ANY (SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY department_id)
ORDER BY 
    first_name, 
    last_name, 
    salary;   
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the not equal to operator

使用 SQL ANY 與大於運算子範例

以下查詢找出所有薪資大於每個部門平均薪資的員工

SELECT 
    first_name, 
    last_name, 
    salary
FROM
    employees
WHERE
    salary > ANY (SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY department_id)
ORDER BY 
    salary; 
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the greater than operator

請注意,最低平均薪資為 4,150。上述查詢會傳回所有薪資大於最低薪資的員工。

使用 SQL ANY 與大於或等於運算子範例

以下陳述式傳回所有薪資大於或等於每個部門平均薪資的員工

SELECT 
    first_name, 
    last_name, 
    salary
FROM
    employees
WHERE
    salary >= ANY (SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY department_id)
ORDER BY first_name , last_name , salary; 
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the greater than or equal to operator

使用 SQL ANY 與小於運算子範例

以下查詢找出所有薪資小於每個部門平均薪資的員工

SELECT 
    first_name, 
    last_name, 
    salary
FROM
    employees
WHERE
    salary < ANY (SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY department_id)
ORDER BY salary DESC;    
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the less than operator

在此範例中,員工的薪資小於每個部門的最高平均薪資

使用 SQL ANY 與小於或等於運算子範例

若要找出所有薪資小於或等於每個部門平均薪資的員工,您可以使用以下查詢

SELECT 
    first_name, 
    last_name, 
    salary
FROM
    employees
WHERE
    salary <= ANY (SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY department_id)
ORDER BY salary DESC;    
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the less than or equal to operator

如螢幕截圖所示,結果集中包含薪資低於或等於每個部門最高平均薪資的員工。

現在您應該知道如何使用 SQL ANY 運算子,透過比較一個值與一組值來形成條件。

這個教學對您有幫助嗎?