摘要:在本教學中,您將學習 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
子句中建構多個條件,例如 SELECT
、UPDATE
和 DELETE
expression1 AND expression2
Code 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)

OR
與 AND
運算子類似,OR
運算子會在 SQL 陳述式的 WHERE
子句中組合多個條件
expression1 OR expression2
Code 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)

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)

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)

請注意,值 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)

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)

以下範例尋找名字中第二個字元為 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)

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)

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)

請注意,SOME
是 ANY
的別名,因此您可以互換使用它們。
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 邏輯運算子以及如何使用它們來測試條件的真假有簡要的了解。在接下來的教學中,您將詳細了解每個邏輯運算子。