摘要:在本教學中,您將學習如何使用 SQL OR 運算子來組合兩個布林運算式。
SQL OR 運算子簡介
SQL OR 是一個邏輯運算子,它組合兩個布林運算式。SQL OR 運算子會根據運算式的結果傳回 true 或 false。
OR 運算子通常用在 WHERE
子句中,用於 SELECT
、 UPDATE
或 DELETE
陳述式,以形成一個彈性的條件。
以下說明 SQL OR 運算子的語法
SELECT
column1,
column2,
...
FROM
table1
WHERE
expression1
OR expression2;
下表顯示當我們比較 true、false 和 NULL 值時,OR
運算子的結果。
TRUE | FALSE | NULL | |
TRUE | TRUE | TRUE | TRUE |
FALSE | TRUE | FALSE | NULL |
NULL | TRUE | NULL | NULL |
請注意,如果其中一個運算式為 true,OR 運算子總是會傳回 true。
如果資料庫系統支援短路功能,一旦有一個運算式為 true,OR
運算子就會停止評估條件的其餘部分。
請注意,短路功能藉由在可以確定結果時立即中止處理邏輯運算式的其餘部分,來幫助資料庫系統節省 CPU 計算。有關短路功能的更多資訊,請查看SQL AND 運算子教學。
當您將 OR 運算子與 AND 運算子一起使用時,資料庫系統會在 AND 運算子之後評估 OR 運算子。這被稱為優先順序規則。但是,您可以使用括號來更改評估順序。
SQL OR 運算子範例
我們將使用來自範例資料庫的 employees
表格來示範 OR
運算子。

以下陳述式會找出所有在 1997 年或 1998 年加入公司的員工。
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
YEAR (hire_date) = 1997 OR YEAR (hire_date) = 1998
ORDER BY
first_name,
last_name;

若要找出所有在 1997 年或 1997 年加入公司且在部門 ID 3 工作的員工,您可以使用 AND
和 OR
運算子,如下所示
SELECT
first_name,
last_name,
hire_date,
department_id
FROM
employees
WHERE
department_id = 3
AND (
YEAR (hire_date) = 1997
OR YEAR (hire_date) = 1998
)
ORDER BY
first_name,
last_name;
如果您不使用括號,查詢將會檢索在 1997 年加入公司且在部門 ID 3 工作的員工,或是在 1998 年加入公司而不論部門的員工。
這是因為資料庫系統會在 AND
運算子之後評估 OR
運算子。
SELECT
first_name,
last_name,
hire_date,
department_id
FROM
employees
WHERE
department_id = 3
AND YEAR (hire_date) = 1997
OR YEAR (hire_date) = 1998
ORDER BY
first_name,
last_name;
Code language: SQL (Structured Query Language) (sql)

如果查詢使用許多 OR
運算子,它將變得難以閱讀。為了讓查詢更易於閱讀,您可以使用 IN
運算子來代替。
例如,以下查詢會找出所有在 1990 年、1999 年或 2000 年加入公司的員工。
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
YEAR (hire_date) = 2000
OR YEAR (hire_date) = 1999
OR YEAR (hire_date) = 1990;
Code language: SQL (Structured Query Language) (sql)
您可以將 OR
運算子替換為 IN
運算子,如下所示
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
YEAR (hire_date) IN (1990, 1999, 2000)
ORDER BY
hire_date;
Code language: SQL (Structured Query Language) (sql)

在本教學中,您已學習如何使用 SQL OR
運算子來組合兩個布林運算式,以形成一個彈性的條件。