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子句來根據條件過濾行記錄。