摘要:在本教程中,您將學習如何使用 SQL WHERE 子句根據一個或多個條件篩選行。
SQL WHERE 子句簡介 #
要根據一個或多個條件從表中選擇特定的行,您可以在 SELECT 語句中使用 WHERE 子句。
以下是 WHERE 子句的語法
SELECT
column1, column2, ...
FROM
table_name
WHERE
condition;Code language: SQL (Structured Query Language) (sql)WHERE 子句緊跟在 FROM 子句之後。它包含一個或多個布林表示式,用於評估表中的每一行。
如果某一行使條件評估為 true,查詢將在結果集中包含該行。
請注意,SQL 具有三值邏輯,即 true、false 和 NULL。這意味著如果某一行導致 condition 評估為 false 或 null,查詢將不會在結果集中包含該行。
跟在 WHERE 子句後面的條件也稱為謂詞。您可以使用運算子來構成靈活的條件以篩選行。
下表顯示了 SQL 比較運算子
| 運算子 | 含義 |
|---|---|
| = | 等於 |
| <> (!=) | 不等於 |
| < | 小於 |
| > | 大於 |
| <= | 小於或等於 |
| >= | 大於或等於 |
要構建一個簡單的條件,您可以使用上述運算子之一以及兩個運算元,運算元可以是一側的列名和另一側的字面值,例如
salary > 1000Code language: SQL (Structured Query Language) (sql)它提出的問題是:“薪水是否大於 1000?”
或者您可以在運算子的兩側都使用列名,例如
min_salary < max_salaryCode language: SQL (Structured Query Language) (sql)此表示式提出了另一個問題:“最低薪水是否小於最高薪水?”
您在條件中使用的字面值可以是數字、字串、日期和時間。以下是典型格式
- 數字可以是沒有任何格式的整數或小數,例如
100、123.45 - 字串用單引號括起來,例如
'100'、'John Doe'。 - 日期取決於資料庫系統,但通用格式是
'yyyy-mm-dd'。 - 時間使用
'HH:MM:SS'來表示時間值。
除了 SELECT 語句外,您還可以在 UPDATE 或 DELETE 語句中使用 WHERE 子句來指定要更新或刪除的行。
SQL WHERE 子句示例 #
我們將使用 employees 表來演示如何使用 WHERE 子句篩選行。

根據數值篩選行 #
以下查詢使用 WHERE 子句選擇薪水大於 14,000 的員工。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary > 14000
ORDER BY
salary DESC;Code language: SQL (Structured Query Language) (sql)輸出
employee_id | first_name | last_name | salary
-------------+------------+-----------+----------
100 | Steven | King | 24000.00
101 | Neena | Kochhar | 17000.00
102 | Lex | De Haan | 17000.00Code language: plaintext (plaintext)根據字串值篩選行 #
以下語句使用 WHERE 子句查詢姓氏為 Chen 的員工。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
last_name = 'Chen';Code language: SQL (Structured Query Language) (sql)輸出
employee_id | first_name | last_name
-------------+------------+-----------
110 | John | ChenCode language: plaintext (plaintext)在比較值時,SQL 對字串進行區分大小寫的匹配。
根據日期篩選行 #
以下查詢使用 WHERE 子句查詢所有在 1999年1月1日 之後加入公司的員工。
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
hire_date >= '1999-01-01'
ORDER BY
hire_date DESC;Code language: SQL (Structured Query Language) (sql) first_name | last_name | hire_date
------------+------------+------------
Charles | Johnson | 2000-01-04
Luis | Popp | 1999-12-07
Karen | Colmenares | 1999-08-10
Kimberely | Grant | 1999-05-24
Diana | Lorentz | 1999-02-07Code language: plaintext (plaintext)如果您想查詢在 1999 年加入公司的員工,可以使用以下選項之一
- 使用
EXTRACT函式從hire_date列中提取年份,並在表示式中使用等於 (=) 運算子。 - 使用帶有
AND運算子的兩個表示式,將入職日期與1999年1月1日和1999年12月31日進行比較。 - 使用
BETWEEN運算子。
以下語句使用 EXTRACT 函式獲取年份,並在 WHERE 子句中將其與 1999 進行比較。
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
EXTRACT(YEAR FROM hire_date) = 1999
ORDER BY
hire_date DESC;Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name | hire_date
------------+------------+------------
Luis | Popp | 1999-12-07
Karen | Colmenares | 1999-08-10
Kimberely | Grant | 1999-05-24
Diana | Lorentz | 1999-02-07Code language: plaintext (plaintext)摘要 #
- 使用
WHERE子句根據一個或多個條件篩選行。
資料庫 #
- PostgreSQL WHERE 子句
- Oracle WHERE 子句
- SQL Server WHERE 子句
- MySQL WHERE 子句
- SQLite WHERE 子句
- Db2 WHERE 子句
- MariaDB WHERE 子句