SQL AND 和 OR 運算子

在本教程中,你將學習如何使用 ANDOR 操作符,它們跟 WHERE 子句一起來根據多個條件過濾記錄。

根據條件選擇記錄

在上一章中,我們學習瞭如何使用帶有 WHERE 子句的單個條件從表中獲取記錄。但有時你需要根據多種條件過濾記錄,例如選擇年齡大於 30 且國家為美國的使用者,選擇價格低於 100 美元且評級大於 4 的產品等。

AND 運算子

AND 操作是結合兩個條件,並返回一個邏輯運算子 TRUE 只有在兩個條件評估為 TRUE 。該 AND 運算子往往跟 SELECTUPDATEDELETE 語句中的 WHERE 一起使用,來形成條件來篩選結果集。

SELECT column1_name, column2_name, columnN_nameFROM table_nameWHERE condition1 AND condition2;

讓我們看一些示例來說明它是如何工作的。

假設我們在資料庫中有一個名為 employees 的表,其中包含以下記錄:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

WHERE 子句和 AND 操作符

以下 SQL 語句將僅返回 employee 表中工資大於 7000 且 dept_id 等於 5 的那些僱員。

SELECT * FROM employees
WHERE salary > 7000 AND dept_id = 5;

執行後,你將獲得如下輸出:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
+--------+--------------+------------+--------+---------+

OR 運算子

類似地, OR 運算子也是一個邏輯運算子,它結合了兩個條件,但它 TRUE 在任何一個條件時返回 TRUE

以下 SQL 語句將返回 employees 表中的所有僱員,其僱員表的薪水大於 7000 或 dept_id 等於 5。

SELECT * FROM employees
WHERE salary > 7000 OR dept_id = 5;

這次你會得到這樣的輸出:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
+--------+--------------+------------+--------+---------+

結合 ANDOR 運算子

你還可以組合 ANDOR 建立複雜的條件表示式。

以下 SQL 語句將返回薪水大於 5000 且 dept_id 等於 1 或 5 的所有員工。

SELECT * FROM employees
WHERE salary > 5000 AND (dept_id = 1 OR dept_id = 5);

執行上述查詢後,你將獲得如下輸出:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
+--------+--------------+------------+--------+---------+