在本教學中,您將學習如何使用SQL WHERE
子句根據指定的條件篩選表中的行記錄。
要從表中選擇某些行,請在SELECT
語句中使用WHERE
子句。 以下說明了SELECT
語句中WHERE
子句的語法:
SELECT
column1, column2, ...
FROM
table
WHERE
condition;
WHERE
子句緊跟在FROM
子句之後出現。 WHERE
子句包含一個或多個邏輯表示式,用於計算表中的每一行。 如果條件計算為true
,則滿足條件的行記錄將包含在結果集中; 否則,它將被排除在外。
請注意,SQL具有三值邏輯,即TRUE
,FALSE
和UNKNOWN
。 這意味著如果某行導致條件計算為FALSE
或NULL
,則不會返回該行。
請注意,WHERE
子句後面的邏輯表示式也稱為謂詞。 可以使用各種運算子來形成WHERE
子句中使用的行選擇條件。
下表顯示了SQL比較運算子:
編號 | 運算子 | 含義 |
---|---|---|
1 | = |
等於 |
2 | <> 或!= |
不等於 |
3 | < |
小於 |
4 | > |
大於 |
5 | <= |
小於或等於 |
6 | >= |
大於或等於 |
要形成一個簡單的表示式,可以使用上面的一個運算子和兩個運算元,這兩個運算元可以是一側的列名,另一側是文字值,例如:
salary > 1000
表示:「工資是否大於1000?」。或者可以在運算子的兩側使用列名稱,例如:
min_salary < max_salary
這個表示式提出了另一個問題:「最低工資是否低於最高薪水?」。
在表示式中使用的文字值可以是數位,字元,日期和時間,具體取決於使用的格式:
100
,200.5
'100'
,'John Dan'
。'yyyy-mm-dd'
格式來儲存日期資料。'HH:MM:SS'
來儲存時間資料。除SELECT
語句外,還可以在UPDATE或DELETE語句中使用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;
執行上面範例程式碼,得到以下結果 -
以下查詢查詢在部門ID為5
中工作的所有員工。
SELECT
employee_id, first_name, last_name, department_id
FROM
employees
WHERE
department_id = 5
ORDER BY
first_name;
執行上面範例程式碼,得到以下結果 -
帶有字元範例的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
但是,如果查詢值是:ZHang
或zhang
,則不會返回任何行記錄。
帶有日期範例的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;
執行上面範例程式碼,得到以下結果 -
如果想查詢1999年加入公司的員工,可以通過以下幾種方式實現:
以下語句說明了如何使用第一種方式:
SELECT
employee_id, first_name, last_name, hire_date
FROM
employees
WHERE
YEAR (hire_date) = 1999
ORDER BY
hire_date DESC;
執行上面範例程式碼,得到以下結果 -
在本教學中,我們向您展示了如何使用SQL WHERE
子句根據指定的條件過濾資料。