在本教程中,我們將學習如何在SELECT語句中使用MySQL WHERE子句來過濾結(jié)果集中的行記錄。
如果使用SELECT語句但不使用WHERE子句在表中查詢數(shù)據(jù),則會獲取表中的所有行記錄,這些行記錄中大部分是不想要的行記錄。例如,在一些表中存放商業(yè)交易中的數(shù)據(jù)。 從這些表中獲取所有行,尤其是對于諸如員工,銷售訂單,采購訂單,生產(chǎn)訂單等的大型表格來說,這是沒有意義的,因為我們經(jīng)常想要的是一些特定的數(shù)據(jù),例如本季度的銷售額 ,今年銷量比去年同期的銷量等等。
WHERE子句允許根據(jù)指定的過濾表達式或條件來指定要選擇的行。
您還將學習如何使用LIMIT子句來限制
SELECT語句返回的行數(shù)。
我們將繼續(xù)使用示例數(shù)據(jù)庫(yiibaidb)中employees表中的數(shù)據(jù),如下圖所示。
假設只想從employees表中獲取銷售代表員工,可使用以下查詢:
SELECT
lastname, firstname, jobtitle
FROM
employees
WHERE
jobtitle = 'Sales Rep';
執(zhí)行上面查詢,得到以下結(jié)果 -
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子句出現(xiàn)在語句的末尾,但MySQL會首先使用WHERE子句中的表達式來選擇匹配的行。它選擇具有職位名稱為銷售代表的行記錄。
jobtitle = 'Sales Rep';
MySQL從SELECT子句中的選擇列表中選擇列。
可以像上面的查詢一樣形成一個簡單的條件,或者是將多個表達式與邏輯運算符(如AND,OR等)組合在一起的一個非常復雜的例子。例如,要在辦公室代碼(officeCode)等于1中查找所有銷售代表,請使用以下查詢:
SELECT
lastname, firstname, jobtitle
FROM
employees
WHERE
jobtitle = 'Sales Rep' AND officeCode = 1;
執(zhí)行上面查詢后,得到以下結(jié)果 -
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子句中形成過濾表達式的比較運算符。
| 操作符 | 描述 |
|---|---|
= |
等于,幾乎任何數(shù)據(jù)類型都可以使用它。 |
<> 或 != |
不等于 |
< |
小于,通常使用數(shù)字和日期/時間數(shù)據(jù)類型。 |
> |
大于, |
<= |
小于或等于 |
>= |
大于或等于 |
以下查詢使用不等于(!=)運算符來獲取不是銷售代表的其它所有員工:
SELECT
lastname, firstname, jobtitle
FROM
employees
WHERE
jobtitle <> 'Sales Rep';
執(zhí)行上面查詢語句, 得到以下結(jié)果 -
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;
執(zhí)行上面查詢語句, 得到以下結(jié)果 -
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
更多關(guān)于MySQL WHERE子句…
還有一些有用的運算符可以在WHERE子句中使用來形成復雜的條件,例如:
在本教程中,我們學習了如何使用MySQL WHERE子句來根據(jù)條件過濾行記錄。