第4课 过滤数据
这一课将讲授如何使用SELECT语句的
WHERE子句指定搜索条件。
4.1 使用WHERE子句
通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定
搜索条件(search criteria),搜索条件也称为
过滤条件(filter condition)。WHERE子句在表名(FROM子句)之后给出,如下所示:
SELECT prod_name, prod_price
FROM Products
WHERE
prod_price = 3.49;
|
结果只返回prod_price值为3.49的行
警告:WHERE子句的位置—— 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。
4.2 WHERE子句操作符
4.2.2 不匹配检查
SELECT vend_id, prod_name
FROM Products
WHERE vend_id <>
'DLL01'
;
|
提示:何时使用引号——如果仔细观察上述WHERE子句中的条件,会看到有的值括在单引号内,而有的值未括起来。单引号用来限定字符串。如果将值与字符串类型的列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。
警告:是!=还是<>?
!=和<>通常可以互换。但是,并非所有DBMS都支持这两种不等于操作符。例如,Microsoft Access支持<>而不支持!=。如果有疑问,请参阅相应的DBMS文档。
4.2.3 范围值检查
要检查某个范围的值,可以使用BETWEEN操作符。
SELECT prod_name, prod_price FROM Products
WHERE prod_price
BETWEEN 5 AND 10;
|
4.2.4 空值检查
在一个列不包含值时,称其包含
空值NULL。
确定值是否为NULL,不能简单地检查是否= NULL。SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是
IS NULL子句。其语法如下:
SELECT prod_name
FROM Products
WHERE
prod_price
IS NULL
;
|
警告:NULL和非匹配
通过过滤选择不包含指定值的所有行时,你可能希望返回含NULL值的行。但是这做不到。因为未知(unknown)有特殊的含义,数据库不知道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。
过滤数据时,一定要验证被过滤列中含NULL的行确实出现在返回的数据中。