SQL Or運算子


在本教學中,您將學習如何使用SQL OR運算子組合兩個布林表示式。

1. SQL OR運算子簡介

SQL OR是一個邏輯運算子,它組合兩個布林表示式。 SQL OR運算子計算結果返回truefalse,具體取決於表示式的結果。

OR運算子通常用於在SELECTUPDATEDELETE語句的WHERE子句中,以形成靈活的條件。

以下說明了SQL OR運算子的語法:

SELECT
    column1,
    column2,
        ...
FROM
    table1
WHERE
    expression1
OR expression2;

下表顯示了比較truefalseNULL值時OR運算子的結果。

TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL

請注意,如果任一表示式為true,則OR運算子始終返回true

如果資料庫系統支援短路功能,則只要一個表示式為真,OR運算子就會停止評估條件的其餘部分。

注意,短路功能可以幫助資料庫系統通過在確定結果後立即中止處理邏輯表示式的剩餘部分來節省CPU計算。 有關短路功能的更多資訊,請檢視SQL AND運算子教學。

OR運算子與AND運算子一起使用時,資料庫系統會在AND運算子之後計算OR運算子。 它叫作優先規則。 但是,可以使用括號更改評估順序。

2. SQL OR運算子範例

我們將使用範例資料庫中的employees表來演示OR運算子。

mysql> DESC employees;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| employee_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
| first_name    | varchar(20)  | YES  |     | NULL    |                |
| last_name     | varchar(25)  | NO   |     | NULL    |                |
| email         | varchar(100) | NO   |     | NULL    |                |
| phone_number  | varchar(20)  | YES  |     | NULL    |                |
| hire_date     | date         | NO   |     | NULL    |                |
| job_id        | int(11)      | NO   | MUL | NULL    |                |
| salary        | decimal(8,2) | NO   |     | NULL    |                |
| manager_id    | int(11)      | YES  | MUL | NULL    |                |
| department_id | int(11)      | YES  | MUL | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set

以下宣告查詢了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年或1998年加入公司並在部門ID為3中工作的所有員工,可以使用ANDOR運算子,如下所示:

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;

執行上面查詢語句,得到以下結果 -

如果查詢使用許多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;

可以通過IN運算子替換OR運算子,如下所示:

SELECT
    first_name,
    last_name,
    hire_date
FROM
    employees
WHERE
    YEAR (hire_date) IN (1990, 1999, 2000)
ORDER BY
    hire_date;

執行上面範例程式碼,得到以下結果 -

+------------+-----------+------------+
| first_name | last_name | hire_date  |
+------------+-----------+------------+
| Alexander  | Lee       | 1990-01-03 |
| Diana      | Chen      | 1999-02-07 |
| Kimberely  | Yang      | 1999-05-24 |
| Karen      | Zhang     | 1999-08-10 |
| Min        | Su        | 1999-12-07 |
| Charles    | Yang      | 2000-01-04 |
+------------+-----------+------------+
6 rows in set

在本教學中,您已經學習了如何使用SQL OR運算子組合兩個布林表示式以形成靈活的條件。