在本教學中,您將學習如何使用SQL OR運算符組合兩個布爾運算式。
1. SQL OR運算符簡介
SQL OR是一個邏輯運算符,它組合兩個布爾運算式。 SQL OR運算符計算結果返回true或false,具體取決於運算式的結果。
OR運算符通常用於在SELECT,UPDATE或DELETE語句的WHERE子句中,以形成靈活的條件。
以下說明了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。
如果資料庫系統支持短路功能,則只要一個運算式為真,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中工作的所有員工,可以使用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;
執行上面查詢語句,得到以下結果 -

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