第6章 过滤数据
使用SLECET语句的WHERE子句指定搜索条件
使用WHERE子句
例子:
SELECT prod_name, prod_price
FROM products
WHERE prod_price = 2.50;
WHERE子句的位置:在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后。
WHERE子句操作符
WHERE除了相等测试,还支持其他条件操作符。
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
< | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
注意:BETWEEN操作符指定的两个值必须用AND关键字分隔,且包括指定的开始值和结束值。
空值检查
在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。
NULL,它与字段包含0、空字符串或者仅仅包含空格不同。
SELECT语句有一个特殊的WHERE子句,用来检测具有NULL值的列,这就是IS NULL子句。
SELECT prod_name
FROM products
WHERE prod_price IS NULL;
在通过过滤选择不具有特定值的行时,我们有时可能希望返回包含NULL值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。
更强大的搜索条件
AND和OR操作符
MySQL允许通过AND和OR操作符,组合多条WHERE子句,以获得更强大的数据过滤条件。
SELECT prod_id, prod_price, prod_name
FROM products
WHERE vend_id = 1003 AND prod_price <= 10;
SELECT prod_id, prod_price, prod_name
FROM products
WHERE vend_id = 1002 AND vend_id = 1003;
- AND操作符指示DBMS只返回满足所有给定条件的行
- OR操作符指示DBMS匹配任一条件而不是同时匹配两个条件
- 当同时包含AND操作符和OR操作符的时候,AND操作符优先级更高。此外,使用圆括号可以改变运算优先级
IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。
SELECT prod_name, prod_price
FROM produdts
WHERE vend_id IN (1002,1003)
ORDER BY prod_name;
此SELECT语句检索供应商1002和1003制造的所有产品。
IN操作符完成与OR相同的功能,但IN操作符一般比OR操作符执行更快。
NOT操作符
NOT操作符代表着取反,即否定它之后的所有条件。
MySQL支持使用NOT对IN、BETWEEN和