SQL WHERE

摘要:在本教程中,您將學習如何使用 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 具有三值邏輯,即 truefalseNULL。這意味著如果某一行導致 condition 評估為 falsenull,查詢將不會在結果集中包含該行。

跟在 WHERE 子句後面的條件也稱為謂詞。您可以使用運算子來構成靈活的條件以篩選行。

下表顯示了 SQL 比較運算子

運算子含義
=等於
<> (!=)不等於
<小於
>大於
<=小於或等於
>=大於或等於

要構建一個簡單的條件,您可以使用上述運算子之一以及兩個運算元,運算元可以是一側的列名和另一側的字面值,例如

salary > 1000Code language: SQL (Structured Query Language) (sql)

它提出的問題是:“薪水是否大於 1000?”

或者您可以在運算子的兩側都使用列名,例如

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

此表示式提出了另一個問題:“最低薪水是否小於最高薪水?”

您在條件中使用的字面值可以是數字、字串、日期和時間。以下是典型格式

  • 數字可以是沒有任何格式的整數或小數,例如 100123.45
  • 字串用單引號括起來,例如 '100''John Doe'
  • 日期取決於資料庫系統,但通用格式是 'yyyy-mm-dd'
  • 時間使用 'HH:MM:SS' 來表示時間值。

除了 SELECT 語句外,您還可以在 UPDATEDELETE 語句中使用 WHERE 子句來指定要更新或刪除的行。

SQL WHERE 子句示例 #

我們將使用 employees 表來演示如何使用 WHERE 子句篩選行。

SQL WHERE Clause: Employees Table

根據數值篩選行 #

以下查詢使用 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 年加入公司的員工,可以使用以下選項之一

  1. 使用 EXTRACT 函式從 hire_date 列中提取年份,並在表示式中使用等於 (=) 運算子。
  2. 使用帶有 AND 運算子的兩個表示式,將入職日期與 1999年1月1日1999年12月31日 進行比較。
  3. 使用 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 子句根據一個或多個條件篩選行。

資料庫 #

測驗 #

本教程是否有幫助?
© .