SQL Where子句

在本教程中,您將學習如何使用SQL WHERE子句根據指定的條件篩選表中的行記錄。

1. SQL WHERE子句簡介

要從表中選擇某些行,請在SELECT語句中使用WHERE子句。 以下說明了SELECT語句中WHERE子句的語法:

SELECT 
    column1, column2, ...
FROM
    table
WHERE
    condition;

WHERE子句緊跟在FROM子句之後出現。 WHERE子句包含一個或多個邏輯表達式,用於計算表中的每一行。 如果條件計算爲true,則滿足條件的行記錄將包含在結果集中; 否則,它將被排除在外。

請注意,SQL具有三值邏輯,即TRUEFALSEUNKNOWN。 這意味着如果某行導致條件計算爲FALSENULL,則不會返回該行。

請注意,WHERE子句後面的邏輯表達式也稱爲謂詞。 可以使用各種運算符來形成WHERE子句中使用的行選擇條件。

下表顯示了SQL比較運算符:

編號

運算符

含義

1

=

等於

2

<>!=

不等於

3

<

小於

4

>

大於

5

<=

小於或等於

6

>=

大於或等於

要形成一個簡單的表達式,可以使用上面的一個運算符和兩個操作數,這兩個操作數可以是一側的列名,另一側是文字值,例如:

salary > 1000

表示:「工資是否大於1000?」。或者可以在運算符的兩側使用列名稱,例如:

min_salary < max_salary

這個表達式提出了另一個問題:「最低工資是否低於最高薪水?」。
在表達式中使用的文字值可以是數字,字符,日期和時間,具體取決於使用的格式:

  • 數字:使用可以是整數或小數的數字而不使用任何格式,例如:100,200.5
  • 字符:使用由單引號或雙引號括起的字符,例如:'100''John Dan'
  • 日期:使用數據庫存儲的格式。 它取決於數據庫系統,例如,MySQL使用'yyyy-mm-dd'格式來存儲日期數據。
  • 時間:使用數據庫系統用於存儲時間的格式。 例如,MySQL使用'HH:MM:SS'來存儲時間數據。

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

2. SQL WHERE示例

我們將使用employees表來演示如何使用WHERE子句從表中選擇數據。

mysql> desc employees;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| employee_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
| first_name    | varchar(20)  | YES  |     | NULL    |                |
| last_name     | varchar(25)  | NO   |     | NULL    |                |
| email         | varchar(100) | NO   |     | NULL    |                |
| phone_number  | varchar(20)  | YES  |     | NULL    |                |
| hire_date     | date         | NO   |     | NULL    |                |
| job_id        | int(11)      | NO   | MUL | NULL    |                |
| salary        | decimal(8,2) | NO   |     | NULL    |                |
| manager_id    | int(11)      | YES  | MUL | NULL    |                |
| department_id | int(11)      | YES  | MUL | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set

帶有數字比較示例的SQL WHERE子句

以下查詢查找薪水大於14000的員工,並根據薪水按降序對結果集進行排序。

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

執行上面示例代碼,得到以下結果 -

SQL Where子句

以下查詢查找在部門ID爲5中工作的所有員工。

SELECT
    employee_id, first_name, last_name, department_id
FROM
    employees
WHERE
    department_id = 5
ORDER BY
    first_name;

執行上面示例代碼,得到以下結果 -
SQL Where子句

帶有字符示例的SQL WHERE子句

SQL不區分大小寫。 但是,當涉及比較中的值時,它區分大小寫。 例如,以下查詢查找姓氏(last_name)爲Zhang的員工。

SELECT
    employee_id, first_name, last_name
FROM
    employees
WHERE
    last_name = 'Zhang';

執行上面示例代碼,得到以下結果 -

mysql> SELECT
    employee_id, first_name, last_name
FROM
    employees
WHERE
    last_name = 'Zhang';
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         116 | Shelli     | Zhang     |
|         117 | Sigal      | Zhang     |
|         118 | Guy        | Zhang     |
|         119 | Karen      | Zhang     |
+-------------+------------+-----------+
4 rows in set

但是,如果查詢值是:ZHangzhang,則不會返回任何行記錄。

帶有日期示例的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;

執行上面示例代碼,得到以下結果 -

SQL Where子句

如果想查詢1999年加入公司的員工,可以通過以下幾種方式實現:

  • 使用YEAR函數從hire_date列獲取年份數據,並使用等於(=)運算符來形成表達式。
  • 使用AND運算符使用兩個表達式。
  • 使用BETWEEN運算符。

以下語句說明了如何使用第一種方式:

SELECT
    employee_id, first_name, last_name, hire_date
FROM
    employees
WHERE
    YEAR (hire_date) = 1999
ORDER BY
    hire_date DESC;

執行上面示例代碼,得到以下結果 -
SQL Where子句

在本教程中,我們向您展示瞭如何使用SQL WHERE子句根據指定的條件過濾數據。