SQL WHERE

摘要:在本教學中,您將學習如何使用 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 > 1000Code language: SQL (Structured Query Language) (sql)

這是在問一個問題:「薪水是否大於 1000?」。

或者,您也可以在運算子的兩邊都使用欄位名稱,例如:

min_salary < max_salaryCode language: SQL (Structured Query Language) (sql)

此運算式在問另一個問題:「最低薪水是否小於最高薪水?」。

您在運算式中使用的常值可以是數字、字元、日期和時間,具體取決於您使用的格式。

  • 數字:使用數字,可以是整數或小數,無需任何格式設定,例如:100、200.5
  • 字元:使用單引號或雙引號括住的字元,例如:"100"、"John Doe"。
  • 日期:使用資料庫儲存的格式。這取決於資料庫系統,例如,MySQL 使用 'yyyy-mm-dd' 格式來儲存日期資料。
  • 時間:使用資料庫系統用來儲存時間的格式。例如,MySQL 使用 'HH:MM:SS' 來儲存時間資料。

除了 SELECT 陳述式,您還可以在 UPDATEDELETE 陳述式中使用 WHERE 子句,以指定要更新或刪除的資料列。

SQL WHERE 範例

我們將使用 employees 資料表來示範如何使用 WHERE 子句從資料表中選取資料。

employees_table

使用數值比較的 SQL WHERE 子句範例

以下查詢會找出薪水大於 14,000 的員工,並根據薪水以遞減順序排序結果集

SELECT
	employee_id,
	first_name,
	last_name,
	salary
FROM
	employees
WHERE
	salary > 14000
ORDER BY
	salary DESC;

試試看

SQL WHERE numeric example

以下查詢會找出在部門 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)

試試看

SQL WHERE characters comparison

但是,如果您使用 CHENchen,則不會傳回任何資料列。

使用日期的 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)

試試看

SQL WHERE date example

如果您想找出在 1999 年加入公司的員工,您可以使用幾種方法:

  1. 使用 YEAR 函數從 hire_date 欄位取得年份資料,並使用等於 (=) 運算子來形成運算式。
  2. 使用兩個與 AND 運算子結合的運算式。
  3. 使用 BETWEEN 運算子。

以下陳述式說明第一種方法:

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 date equals

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

這個教學對您有幫助嗎?