SQL AND 和 OR 運算子
在本教程中,你將學習如何使用 AND
& OR
操作符,它們跟 WHERE
子句一起來根據多個條件過濾記錄。
根據條件選擇記錄
在上一章中,我們學習瞭如何使用帶有 WHERE
子句的單個條件從表中獲取記錄。但有時你需要根據多種條件過濾記錄,例如選擇年齡大於 30 且國家為美國的使用者,選擇價格低於 100 美元且評級大於 4 的產品等。
AND
運算子
AND
操作是結合兩個條件,並返回一個邏輯運算子 TRUE
只有在兩個條件評估為 TRUE
。該 AND
運算子往往跟 SELECT
, UPDATE
或 DELETE
語句中的 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 |
+--------+--------------+------------+--------+---------+
結合 AND
與 OR
運算子
你還可以組合 AND
並 OR
建立複雜的條件表示式。
以下 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 |
+--------+--------------+------------+--------+---------+