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運算符組合兩個布爾運算式以形成靈活的條件。


上一篇: SQL And運算符 下一篇: SQL Between運算符