第六章 過濾數據
WHERE
子句,指定搜索條件。
6.1 使用WHERE
子句
只檢索所需數據需要指定搜索條件(search criteria),在使用SELECT
語句中,數據根據WHERE
子句中指定的條件進行搜索。如下,
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 |
+---------------+------------+
- 注意,語句順序。在同時使用
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 |
+-----------+------------+
分析,由於MySQL不區分大小寫,所以prod_name值區fuses或Fuses是相同的。
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 |
+---------------+------------+
6.2.2 不匹配檢查
例如,不是由供應商1003供應的產品,
mysql> SELECT prod_name, prod_price FROM products WHERE vend_id <> 1003;
+--------------+------------+
| prod_name | prod_price |
+--------------+------------+
| .5 ton anvil | 5.99 |
| 1 ton anvil | 9.99 |
| 2 ton anvil | 14.99 |
| Fuses | 3.42 |
| JetPack 1000 | 35.00 |
| JetPack 2000 | 55.00 |
| Oil can | 8.99 |
+--------------+------------+
- 注意,如何使用引號。單引號用來限定字符串。如果值與串類型的列比較,需要增加限定引號; 與數據比較,不需要增加引號。
6.2.3 範圍值查找
使用BETWEEN
操作符,進行範圍查找。可以檢索數值,或者日期。
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
操作數據,包括兩個邊界值。
6.2.4 空值檢查
NULL
空值,與字段0、空字符或僅僅空格是不同的。
SELECT
語句中,有特色WHERE
子句用來檢索空值,IS NULL
.
mysql> SELECT prod_name FROM products WHERE prod_price IS NULL;
Empty set (0.00 sec)
mysql> SELECT cust_id FROM customers WHERE cust_email IS NULL;
+---------+
| cust_id |
+---------+
| 10002 |
| 10005 |
| 10006 |
| 10007 |
| 10008 |
+---------+
- 注意,在過濾數據時,一定要驗證是否包含
NULL
的空行。