6.1 使用WHERE子句
只檢索所需數據需要指定搜索條件( search criteria) ,搜索條件也稱爲過濾條件( filter condition)。
在SELECT
語句中,數據根據WHERE
子句中指定的搜索條件進行過濾。WHERE
子句在表名(FROM
子句)之後給出,如下所示:
mysql> SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50;
+---------------+------------+
| prod_name | prod_price |
+---------------+------------+
| Carrots | 2.50 |
| TNT (1 stick) | 2.50 |
+---------------+------------+
- 分析:這條語句從
products
表中檢索兩個列,但不返回所有行,只返回prod_price
值爲2.50的行
WHERE子句的位置:在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE之後, 否則將會產生錯誤
6.2 WHERE子句操作符
操作符 | 說明 |
---|---|
= | 等於 |
<> | 不等於 |
!= | 不等於 |
< | 小於 |
<= | 小於等於 |
> | 大於 |
>= | 大於等於 |
BETWEEN | 在指定的兩個值之間 |
6.2.1 檢查單個值
mysql> SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';
+-----------+------------+
| prod_name | prod_price |
+-----------+------------+
| Fuses | 3.42 |
+-----------+------------+
- 分析:檢查
WHERE prod_name=‘fuses’
語句,它返回prod_name
的值爲Fuses
的一行。 MySQL在執行匹配時默認不區分大小寫,所以fuses
與Fuses
匹配。
現在來看幾個使用其他操作符的例子。第一個例子是列出價格小於10美元的所有產品:
mysql> SELECT prod_name, prod_price FROM products WHERE prod_price < 10;
+---------------+------------+
| prod_name | prod_price |
+---------------+------------+
| .5 ton anvil | 5.99 |
| 1 ton anvil | 9.99 |
| Carrots | 2.50 |
| Fuses | 3.42 |
| Oil can | 8.99 |
| Sling | 4.49 |
| TNT (1 stick) | 2.50 |
+---------------+------------+
下一條語句檢索價格小於等於10美元的所有產品(輸出的結果比第一個例子輸出的結果多兩種產品):
mysql> SELECT prod_name, prod_price FROM products WHERE prod_price <= 10;
+----------------+------------+
| prod_name | prod_price |
+----------------+------------+
| .5 ton anvil | 5.99 |
| 1 ton anvil | 9.99 |
| Bird seed | 10.00 |
| Carrots | 2.50 |
| Fuses | 3.42 |
| Oil can | 8.99 |
| Sling | 4.49 |
| TNT (1 stick) | 2.50 |
| TNT (5 sticks) | 10.00 |
+----------------+------------+
6.2.2 不匹配檢查
以下例子列出不是由供應商1003製造的所有產品:
mysql> SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003;
+---------+--------------+
| vend_id | prod_name |
+---------+--------------+
| 1001 | .5 ton anvil |
| 1001 | 1 ton anvil |
| 1001 | 2 ton anvil |
| 1002 | Fuses |
| 1002 | Oil can |
| 1005 | JetPack 1000 |
| 1005 | JetPack 2000 |
+---------+--------------+
何時使用引號:如果仔細觀察上述WHERE子句中使用的條件,會看到有的值括在單引號內(如前面使用的’fuses’),而有的值未括起來。單引號用來限定字符串。如果將值與字符串類型的列進行比較,則需要限定引號。用來與數值列進行比較的值不用引號。
下面是相同的例子,其中使用!=而不是<>操作符:
mysql> SELECT vend_id, prod_name FROM products WHERE vend_id != 1003;
6.2.3 範圍值檢查
BETWEEN操作符需要兩個值,即範圍的開始值和結束值。
下面的例子說明如何使用BETWEEN操作符,它檢索價格在5美元和10美元之間的所有產品:
mysql> SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
+----------------+------------+
| prod_name | prod_price |
+----------------+------------+
| .5 ton anvil | 5.99 |
| 1 ton anvil | 9.99 |
| Bird seed | 10.00 |
| Oil can | 8.99 |
| TNT (5 sticks) | 10.00 |
+----------------+------------+
- 分析:從這個例子中可以看到,在使用BETWEEN時,必須指定兩個值——所需範圍的低端值和高端值。這兩個值必須用AND關鍵字分隔。 BETWEEN匹配範圍中所有的值,包括指定的開始值和結束值。
6.2.4 空值檢查
NULL 無值(no value),它與字段包含0、空字符串或僅僅包含空格不同。
SELECT
語句有一個特殊的WHERE
子句,可用來檢查具有NULL
值的列。這個WHERE
子句就是IS NULL
子句。其語法如下:
mysql> SELECT cust_id FROM customers WHERE cust_email IS NULL;
+---------+
| cust_id |
+---------+
| 10002 |
| 10005 |
+---------+