摘要:在本教學中,您將學習如何使用 SQL 的 WHERE
子句,根據指定的條件篩選資料列。
SQL WHERE 子句簡介
若要從資料表中選取特定的資料列,您可以在 SELECT
陳述式中使用 WHERE
子句。以下說明 SELECT
陳述式中 WHERE
子句的語法:
SELECT
column1, column2, ...
FROM
table_name
WHERE
condition;
Code language: SQL (Structured Query Language) (sql)
WHERE
子句會緊接在 FROM
子句之後。WHERE
子句包含一個或多個邏輯運算式,這些運算式會評估資料表中的每一列。如果某列導致條件評估為 true,則該列會包含在結果集中;否則,該列將會被排除。
請注意,SQL 具有三值邏輯,分別是 TRUE、FALSE 和 UNKNOWN。這表示如果某列導致條件評估為 FALSE 或 NULL,則該列將不會被傳回。
請注意,WHERE
子句後面的邏輯運算式也稱為謂詞 (predicate)。您可以使用各種運算子來形成 WHERE
子句中使用的資料列選取條件。
下表顯示 SQL 比較運算子
運算子 | 意義 |
---|---|
= | 等於 |
<> (!=) | 不等於 |
< | 小於 |
> | 大於 |
<= | 小於或等於 |
>= | 大於或等於 |
若要形成一個簡單的運算式,您可以使用上述的其中一個運算子,並搭配兩個運算元,其中一個運算元可以是欄位名稱,另一個運算元可以是常值,例如:
salary > 1000
Code language: SQL (Structured Query Language) (sql)
這是在問一個問題:「薪水是否大於 1000?」。
或者,您也可以在運算子的兩邊都使用欄位名稱,例如:
min_salary < max_salary
Code language: SQL (Structured Query Language) (sql)
此運算式在問另一個問題:「最低薪水是否小於最高薪水?」。
您在運算式中使用的常值可以是數字、字元、日期和時間,具體取決於您使用的格式。
- 數字:使用數字,可以是整數或小數,無需任何格式設定,例如:100、200.5
- 字元:使用單引號或雙引號括住的字元,例如:"100"、"John Doe"。
- 日期:使用資料庫儲存的格式。這取決於資料庫系統,例如,MySQL 使用
'yyyy-mm-dd'
格式來儲存日期資料。 - 時間:使用資料庫系統用來儲存時間的格式。例如,MySQL 使用
'HH:MM:SS'
來儲存時間資料。
除了 SELECT
陳述式,您還可以在 UPDATE
或 DELETE
陳述式中使用 WHERE
子句,以指定要更新或刪除的資料列。
SQL WHERE 範例
我們將使用 employees
資料表來示範如何使用 WHERE
子句從資料表中選取資料。

使用數值比較的 SQL WHERE 子句範例
以下查詢會找出薪水大於 14,000 的員工,並根據薪水以遞減順序排序結果集。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary > 14000
ORDER BY
salary DESC;

以下查詢會找出在部門 ID 為 5 的所有員工。
SELECT
employee_id,
first_name,
last_name,
department_id
FROM
employees
WHERE
department_id = 5
ORDER BY
first_name;
Code language: SQL (Structured Query Language) (sql)
使用字元的 SQL WHERE 子句範例
SQL 不區分大小寫。然而,在比較中的值方面,它是區分大小寫的。例如,以下查詢會找出姓氏為 Chen
的員工。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
last_name = 'Chen';
Code language: SQL (Structured Query Language) (sql)

但是,如果您使用 CHEN
或 chen
,則不會傳回任何資料列。
使用日期的 SQL WHERE 子句範例
若要取得在 1999 年 1 月 1 日
之後加入公司的所有員工,您可以使用以下查詢:
SELECT
employee_id,
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)

如果您想找出在 1999 年加入公司的員工,您可以使用幾種方法:
以下陳述式說明第一種方法:
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees
WHERE
YEAR (hire_date) = 1999
ORDER BY
hire_date DESC;
Code language: SQL (Structured Query Language) (sql)

在本教學中,我們已向您展示如何使用 SQL WHERE
子句,根據指定的條件來篩選資料。