第六章 过滤数据
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
的空行。