摘要:在本教程中,您將學習 SQL 邏輯運算子以及如何使用它們來測試條件的真偽。
邏輯運算子允許您測試條件的真偽。與比較運算子類似,邏輯運算子返回 true(真)、false(假)或 unknown(未知)的值。
下表展示了 SQL 的邏輯運算子
| 運算子 | 含義 |
|---|---|
| ALL | 如果所有比較都為真,則返回真 |
| AND | 如果兩個表示式都為真,則返回真 |
| ANY | 如果任一比較為真,則返回真。 |
| BETWEEN | 如果運算元在某個範圍內,則返回真 |
| EXISTS | 如果子查詢包含任何行,則返回真 |
| IN | 如果運算元等於列表中的某個值,則返回真 |
| LIKE | 如果運算元與某個模式匹配,則返回真 |
| NOT | 反轉任何其他布林運算子的結果。 |
| OR | 如果任一表達式為真,則返回真 |
| SOME | 如果某些表示式為真,則返回真 |
AND #
AND 運算子允許您在 SQL 語句(如 SELECT、UPDATE 和 DELETE)的 WHERE 子句中構建多個條件。
expression1 AND expression2Code language: SQL (Structured Query Language) (sql)如果兩個表示式的計算結果都為真,則 AND 運算子返回真。
試一試
以下示例查詢所有薪水大於 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 expression2Code language: SQL (Structured Query Language) (sql)但是,如果至少有一個表示式的計算結果為真,則 OR 運算子返回真。
例如,以下語句查詢薪水為 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) 進行比較,如果被比較的值為空,則返回真;否則返回假。
例如,以下語句查詢所有沒有電話號碼的員工。
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 運算子返回真;否則返回假。
以下語句查詢所有在 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 的結果為真;否則,結果為假。
例如,以下語句查詢所有有家屬的員工。
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 邏輯運算子以及如何使用它們來測試條件的真偽有了簡要的瞭解。在接下來的教程中,您將詳細學習每個邏輯運算子。