SQL WHERE 子句

在本教程中,你將學習如何使用 SQL 從表中選擇特定記錄。

根據條件選擇記錄

在上一章中,我們學習瞭如何從表或表列中獲取所有記錄。但是,在現實世界中,我們通常只需要選擇,更新或刪除那些滿足特定條件的記錄,例如屬於某個年齡組或國家/地區的使用者等。

WHERE 子句用於 SELECTUPDATEDELETE。但是,你將在後續章節中看到此子句與其他語句的使用。

語法

WHERE 子句與 SELECT 語句一起使用,僅提取滿足指定條件的記錄。基本語法如下:

SELECT column_list FROM table_name WHERE condition ; 

這裡,column_list 是要獲取其值的資料庫表的列/欄位的名稱,如名稱年齡國家 / 地區等。但是,如果要獲取表中可用的所有列的值,可以使用以下語法:

SELECT * FROM table_name WHERE condition ; 

現在,讓我們看看一些示例,說明它實際上是如何工作的。

假設我們在資料庫中有一個名為 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 子句過濾記錄

以下 SQL 語句將返回 employees 表中的所有員工,其薪水大於 7000.該 WHERE 子句只是過濾掉了不需要的資料。

SELECT * FROM employees
WHERE salary > 7000;

執行後,輸出將如下所示:

+--------+--------------+------------+--------+---------+
| 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 |
+--------+--------------+------------+--------+---------+

如你所見,輸出僅包含薪水大於 7000 的員工。同樣,你可以從特定列中獲取記錄,如下所示:

SELECT emp_id, emp_name, hire_date, salary
FROM employees
WHERE salary > 7000;

執行上面的語句後,你將獲得如下輸出:

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

以下語句將獲取員工 ID 為 2 的員工的記錄。

SELECT * FROM employees
WHERE emp_id = 2;

該語句將產生以下輸出:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+

這次我們在輸出中只有一行,因為 emp_id 對每個員工都是唯一的。

注意: 要填充基於文字的表欄位,你需要將字串括在單引號中。但是,如果你的字串本身包含引號,你應該用反斜槓轉義它 'Let\'s go' 。數值不需要任何引號。

WHERE 條款允許的運算子

SQL 支援許多可以在 WHERE 子句中使用的不同運算子,最重要的運算子在下表中進行了總結。

操作者 描述
= 等於 WHERE id = 2
> 大於 WHERE age > 30
< 少於 WHERE age < 18
>= 大於或等於 WHERE rating >= 4
<= 小於等於 WHERE price <= 100
LIKE 簡單的模式匹配 WHERE name LIKE 'Dav'
IN 檢查指定的值是否與列表或子查詢中的任何值匹配 WHERE country IN ('USA', 'UK')
BETWEEN 檢查指定的值是否在值範圍內 WHERE rating BETWEEN 3 AND 5