在本教學中,您將學習如何使用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
運算子。 它叫作優先規則。 但是,可以使用括號更改評估順序。
我們將使用範例資料庫中的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
運算子組合兩個布林表示式以形成靈活的條件。