SQL必知必会(4)过滤数据

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。

WHERE子句在表名(FROM子句)之后。

1
2
3
SELECT prod_name, prod_price 
FROM Products
WHERE prod_price = 3.49;
prod_name prod_price
Fish bean bag toy 3.49
Bird bean bag toy 3.49
Rabbit bean bag toy 3.49

WHERE子句的位置。如果同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则报错。

WHERE子句操作符

操作符 说明 操作符 说明
= 等于 > 大于
<> 不等于 >= 大于等于
!= 不等于 !> 不大于
< 小于 BETWEEN 在指定的两个值之间
<= 小于等于 IS NULL 为NULL值
!< 不小于

检查单个值:

1
2
3
SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;
prod_name prod_price
Fish bean bag toy 3.49
Bird bean bag toy 3.49
Rabbit bean bag toy 3.49
8 inch teddy bear 5.99
12 inch teddy bear 8.99
Raggedy Ann 4.99
King doll 9.49
Queen doll 9.49

不匹配检查:

1
2
3
SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';
vend_id prod_name
BRS01 8 inch teddy bear
BRS01 12 inch teddy bear
BRS01 18 inch teddy bear
FNG01 King doll
FNG01 Queen doll

<>!=通常可以互换,但取决于DBMS是否支持。

范围值检查:

1
2
3
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
prod_name prod_price
8 inch teddy bear 5.99
12 inch teddy bear 8.99
King doll 9.49
Queen doll 9.49

使用BETWEEN时,必须指定两个值,这两个值必须用AND关键字分隔。BETWEEN匹配的是“闭区间”。

空值检查:
NULL:无值,它与字段包含0、空字符串和空格都不同。

1
2
3
SELECT prod_name
FROM Products
WHERE prod_price IS NULL;

Empty set (0.00 sec)

1
2
3
SELECT cust_name
FROM Customers
WHERE cust_email IS NULL;
cust_name
Kids Place
The Toy Store

确定值是否为NULL,不能直接检查是否 = NULL。

NULL和非匹配。“未知”有特殊的含义,数据库不知道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回含有NULL的行。过滤数据时,一定要验证被过滤列中含NULL的行,确实出现在返回的数据中。