在本教學中,我們將學習如何在SELECT
語句中使用MySQL WHERE
子句來過濾結果集中的行記錄。
如果使用SELECT語句但不使用WHERE子句在表中查詢資料,則會獲取表中的所有行記錄,這些行記錄中大部分是不想要的行記錄。例如,在一些表中存放商業交易中的資料。 從這些表中獲取所有行,尤其是對於諸如員工,銷售訂單,採購訂單,生產訂單等的大型表格來說,這是沒有意義的,因為我們經常想要的是一些特定的資料,例如本季度的銷售額 ,今年銷量比去年同期的銷量等等。
WHERE
子句允許根據指定的過濾表示式或條件來指定要選擇的行。
您還將學習如何使用LIMIT子句來限制
SELECT
語句返回的行數。
我們將繼續使用範例資料庫(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
子句中使用來形成複雜的條件,例如:
在本教學中,我們學習了如何使用MySQL WHERE
子句來根據條件過濾行記錄。