SQL WHERE 子句
在本教程中,你將學習如何使用 SQL 從表中選擇特定記錄。
根據條件選擇記錄
在上一章中,我們學習瞭如何從表或表列中獲取所有記錄。但是,在現實世界中,我們通常只需要選擇,更新或刪除那些滿足特定條件的記錄,例如屬於某個年齡組或國家/地區的使用者等。
WHERE
子句用於 SELECT
, UPDATE
和 DELETE
。但是,你將在後續章節中看到此子句與其他語句的使用。
語法
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 |