MySQL WHERE語句
在本教程中,我們將學習如何在SELECT
語句中使用MySQL WHERE
子句來過濾結果集中的行記錄。
1. MySQL WHERE子句簡介
如果使用SELECT語句但不使用WHERE子句在表中查詢數據,則會獲取表中的所有行記錄,這些行記錄中大部分是不想要的行記錄。例如,在一些表中存放商業交易中的數據。 從這些表中獲取所有行,尤其是對於諸如員工,銷售訂單,採購訂單,生產訂單等的大型表格來說,這是沒有意義的,因爲我們經常想要的是一些特定的數據,例如本季度的銷售額 ,今年銷量比去年同期的銷量等等。
WHERE
子句允許根據指定的過濾表達式或條件來指定要選擇的行。
您還將學習如何使用LIMIT子句來限制
SELECT
語句返回的行數。
2. MySQL WHERE子句示例
我們將繼續使用示例數據庫(yiibaidb)中employees
表中的數據,如下圖所示。
假設只想從employees
表中獲取銷售代表員工,可使用以下查詢:
SELECT
lastname, firstname, jobtitle
FROM
employees
WHERE
jobtitle = 'Sales Rep';
執行上面查詢,得到以下結果 -
mysql> SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle = 'Sales Rep';
+-----------+-----------+-----------+
| lastname | firstname | jobtitle |
+-----------+-----------+-----------+
| Jennings | Leslie | Sales Rep |
| Thompson | Leslie | Sales Rep |
| Firrelli | Julie | Sales Rep |
| Patterson | Steve | Sales Rep |
| Tseng | Foon Yue | Sales Rep |
| Vanauf | George | Sales Rep |
| Bondur | Loui | Sales Rep |
| Hernandez | Gerard | Sales Rep |
| Castillo | Pamela | Sales Rep |
| Bott | Larry | Sales Rep |
| Jones | Barry | Sales Rep |
| Fixter | Andy | Sales Rep |
| Marsh | Peter | Sales Rep |
| King | Tom | Sales Rep |
| Nishi | Mami | Sales Rep |
| Kato | Yoshimi | Sales Rep |
| Gerard | Martin | Sales Rep |
+-----------+-----------+-----------+
17 rows in set
即使WHERE
子句出現在語句的末尾,但MySQL會首先使用WHERE
子句中的表達式來選擇匹配的行。它選擇具有職位名稱爲銷售代表的行記錄。
jobtitle = 'Sales Rep';
MySQL從SELECT
子句中的選擇列表中選擇列。
可以像上面的查詢一樣形成一個簡單的條件,或者是將多個表達式與邏輯運算符(如AND,OR等)組合在一起的一個非常複雜的例子。例如,要在辦公室代碼(officeCode
)等於1
中查找所有銷售代表,請使用以下查詢:
SELECT
lastname, firstname, jobtitle
FROM
employees
WHERE
jobtitle = 'Sales Rep' AND officeCode = 1;
執行上面查詢後,得到以下結果 -
mysql> SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle = 'Sales Rep' AND officeCode = 1;
+----------+-----------+-----------+
| lastname | firstname | jobtitle |
+----------+-----------+-----------+
| Jennings | Leslie | Sales Rep |
| Thompson | Leslie | Sales Rep |
+----------+-----------+-----------+
2 rows in set
下表列出了可用於在WHERE
子句中形成過濾表達式的比較運算符。
操作符
描述
=
等於,幾乎任何數據類型都可以使用它。
<>
或 !=
不等於
<
小於,通常使用數字和日期/時間數據類型。
>
大於,
<=
小於或等於
>=
大於或等於
以下查詢使用不等於(!=
)運算符來獲取不是銷售代表的其它所有員工:
SELECT
lastname, firstname, jobtitle
FROM
employees
WHERE
jobtitle <> 'Sales Rep';
執行上面查詢語句, 得到以下結果 -
mysql> SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle <> 'Sales Rep';
+-----------+-----------+----------------------+
| lastname | firstname | jobtitle |
+-----------+-----------+----------------------+
| Murphy | Diane | President |
| Patterson | Mary | VP Sales |
| Firrelli | Jeff | VP Marketing |
| Patterson | William | Sales Manager (APAC) |
| Bondur | Gerard | Sale Manager (EMEA) |
| Bow | Anthony | Sales Manager (NA) |
+-----------+-----------+----------------------+
6 rows in set
以下查詢將獲得辦公室代碼大於5
的每位員工:
mysql> SELECT lastname, firstname, officeCode FROM employees WHERE officecode > 5;
+-----------+-----------+------------+
| lastname | firstname | officeCode |
+-----------+-----------+------------+
| Patterson | William | 6 |
| Bott | Larry | 7 |
| Jones | Barry | 7 |
| Fixter | Andy | 6 |
| Marsh | Peter | 6 |
| King | Tom | 6 |
+-----------+-----------+------------+
6 rows in set
辦公室代碼小於或等於4
(<= 4
)的員工呢?
SELECT
lastname, firstname, officeCode
FROM
employees
WHERE officecode <= 4;
執行上面查詢語句, 得到以下結果 -
mysql> SELECT lastname, firstname, officeCode FROM employees WHERE officecode <= 4;
+-----------+-----------+------------+
| lastname | firstname | officeCode |
+-----------+-----------+------------+
| Murphy | Diane | 1 |
| Patterson | Mary | 1 |
| Firrelli | Jeff | 1 |
| Bondur | Gerard | 4 |
| Bow | Anthony | 1 |
| Jennings | Leslie | 1 |
| Thompson | Leslie | 1 |
| Firrelli | Julie | 2 |
| Patterson | Steve | 2 |
| Tseng | Foon Yue | 3 |
| Vanauf | George | 3 |
| Bondur | Loui | 4 |
| Hernandez | Gerard | 4 |
| Castillo | Pamela | 4 |
| Gerard | Martin | 4 |
+-----------+-----------+------------+
15 rows in set
更多關於MySQL WHERE子句…
還有一些有用的運算符可以在WHERE
子句中使用來形成複雜的條件,例如:
- BETWEEN選擇在給定範圍值內的值。
- LIKE匹配基於模式匹配的值。
- IN指定值是否匹配列表中的任何值。
-
IS NULL
檢查該值是否爲NULL
。
在本教程中,我們學習瞭如何使用MySQL WHERE
子句來根據條件過濾行記錄。