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 |
+---------+