SQL 邏輯運算子

摘要:在本教學中,您將學習 SQL 邏輯運算子,以及如何使用它們來測試條件的真假。

邏輯運算子允許您測試條件的真假。與比較運算子類似,邏輯運算子會傳回 true、false 或 unknown 的值。

下表說明 SQL 邏輯運算子

運算子意義
ALL如果所有比較都為 true,則傳回 true
AND如果兩個運算式都為 true,則傳回 true
ANY如果任何一個比較為 true,則傳回 true。
BETWEEN如果運算元在範圍內,則傳回 true
EXISTS如果子查詢包含任何資料列,則傳回 true
IN如果運算元等於清單中的其中一個值,則傳回 true
LIKE如果運算元符合模式,則傳回 true
NOT反轉任何其他布林運算子的結果。
OR如果任一運算式為 true,則傳回 true
SOME如果某些運算式為 true,則傳回 true

AND

AND 運算子允許您在 SQL 陳述式的 WHERE 子句中建構多個條件,例如 SELECTUPDATEDELETE

expression1 AND expression2Code language: SQL (Structured Query Language) (sql)

如果兩個運算式都評估為 true,則 AND 運算子會傳回 true。

以下範例尋找所有薪水大於 5,000 且小於 7,000 的員工

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary > 5000 AND salary < 7000
ORDER BY salary;Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - AND example

OR

AND 運算子類似,OR 運算子會在 SQL 陳述式的 WHERE 子句中組合多個條件

expression1 OR expression2Code language: SQL (Structured Query Language) (sql)

但是,如果至少有一個運算式評估為 true,則 OR 運算子會傳回 true。

例如,以下陳述式尋找薪水為 7,000 或 8,000 的員工

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary = 7000 OR salary = 8000
ORDER BY salary;Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - OR example

IS NULL

IS NULL 運算子會將值與 null 值進行比較,如果比較的值為 null,則傳回 true;否則傳回 false。

例如,以下陳述式尋找所有沒有電話號碼的員工

SELECT 
    first_name, last_name, phone_number
FROM
    employees
WHERE
    phone_number IS NULL
ORDER BY first_name , last_name;
Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - IS NULL example

BETWEEN

BETWEEN 運算子會搜尋在給定最小值和最大值的一組值內的值。請注意,最小值和最大值會包含在條件集中。

例如,以下陳述式尋找所有薪水在 9,000 到 12,000 之間的員工。

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary BETWEEN 9000 AND 12000
ORDER BY salary;    
Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - BETWEEN example

請注意,值 9,000 和 12,000 包含在輸出中。

IN

IN 運算子會將值與指定的數值清單進行比較。如果比較的值與清單中的至少一個值相符,則 IN 運算子會傳回 true;否則會傳回 false。

以下陳述式尋找在部門 ID 為 8 或 9 的所有員工。

SELECT 
    first_name, last_name, department_id
FROM
    employees
WHERE
    department_id IN (8, 9)
ORDER BY department_id;
Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - IN example

LIKE

LIKE 運算子會使用萬用字元運算子將值與類似的值進行比較。SQL 提供兩個與 LIKE 運算子搭配使用的萬用字元

  • 百分比符號 (%) 代表零個、一個或多個字元。
  • 底線符號 (_) 代表單一字元。

以下陳述式尋找所有名字以字串 jo 開頭的員工

SELECT 
    employee_id, first_name, last_name
FROM
    employees
WHERE
    first_name LIKE 'jo%'
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - LIKE example

以下範例尋找名字中第二個字元為 h 的所有員工

SELECT 
    employee_id, first_name, last_name
FROM
    employees
WHERE
    first_name LIKE '_h%'
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - LIKE example 2

ALL

ALL 運算子會將值與另一個值集合中的所有值進行比較。ALL 運算子前面必須是 比較運算子,後面必須是 子查詢

以下說明 ALL 運算子的語法

comparison_operator ALL (subquery)
Code language: SQL (Structured Query Language) (sql)

請注意,您將在子查詢教學中學習有關子查詢的內容。

以下範例尋找所有薪水大於部門 8 中所有員工薪水的員工

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary >= ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 8)
ORDER BY salary DESC;Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - ALL example

ANY

ANY 運算子會根據以下所示的條件,將值與集合中的任何值進行比較

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

與 ALL 運算子類似,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; 
Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - SOME example

請注意,SOMEANY 的別名,因此您可以互換使用它們。

EXISTS

EXISTS 運算子會測試子查詢是否包含任何資料列

EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)

如果子查詢傳回一或多個資料列,則 EXISTS 的結果為 true;否則,結果為 false。

例如,以下陳述式尋找所有有撫養親屬的員工

SELECT 
    first_name, last_name
FROM
    employees e
WHERE
    EXISTS( SELECT 
            1
        FROM
            dependents d
        WHERE
            d.employee_id = e.employee_id);
Code language: SQL (Structured Query Language) (sql)
SQL Logical Operators - EXISTS example

現在,您應該對所有 SQL 邏輯運算子以及如何使用它們來測試條件的真假有簡要的了解。在接下來的教學中,您將詳細了解每個邏輯運算子。

這個教學對您有幫助嗎?