在本教程中,我們將學習如何在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'; SQL
執行上面查詢,得到以下結果 -
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 Shell
即使WHERE子句出現在語句的末尾,但MySQL會首先使用WHERE子句中的表達式來選擇匹配的行。它選擇具有職位名稱為銷售代表的行記錄。
jobtitle = 'Sales Rep'; Shell
MySQL從SELECT子句中的選擇列表中選擇列。
可以像上面的查詢一樣形成一個簡單的條件,或者是將多個表達式與邏輯運算符(如AND,OR等)組合在一起的一個非常復雜的例子。例如,要在辦公室代碼(officeCode)等于1中查找所有銷售代表,請使用以下查詢:
SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle = 'Sales Rep' AND officeCode = 1; SQL
執行上面查詢后,得到以下結果 -
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 Shell
下表列出了可用于在WHERE子句中形成過濾表達式的比較運算符。
操作符 描述 = 等于,幾乎任何數據類型都可以使用它。 <> 或 != 不等于 < 小于,通常使用數字和日期/時間數據類型。 > 大于, <= 小于或等于 >= 大于或等于 以下查詢使用不等于(!=)運算符來獲取不是銷售代表的其它所有員工:
SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle <> 'Sales Rep'; Shell
執行上面查詢語句, 得到以下結果 -
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 Shell
以下查詢將獲得辦公室代碼大于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 SQL
辦公室代碼小于或等于4(<= 4)的員工呢?
SELECT lastname, firstname, officeCode FROM employees WHERE officecode <= 4; SQL
執行上面查詢語句, 得到以下結果 -
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 Shell
更多關于MySQL WHERE子句…
還有一些有用的運算符可以在WHERE子句中使用來形成復雜的條件,例如:
- BETWEEN選擇在給定范圍值內的值。
- LIKE匹配基于模式匹配的值。
- IN指定值是否匹配列表中的任何值。
- IS NULL檢查該值是否為NULL。
在本教程中,我們學習了如何使用MySQL WHERE子句來根據條件過濾行記錄。