SQL Or運算符

在本教程中,您將學習如何使用SQL OR運算符組合兩個布爾表達式。

1. SQL OR運算符簡介

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

OR運算符通常用於在SELECT,UPDATE或DELETE語句的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;

執行上面示例代碼,得到以下結果 -

SQL Or運算符

要查找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;

執行上面查詢語句,得到以下結果 -
SQL Or運算符

如果不使用括號,查詢將檢索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;

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

SQL Or運算符

如果查詢使用許多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運算符組合兩個布爾表達式以形成靈活的條件。