过滤数据
- 简单过滤
- where 子句操作符
- 检查单个值
- 范围值检擦
- 空值检查
- 高级过滤
- 多个过滤条件
- 求值顺序
- IN 操作符
- NOT 操作符
在 s q l sql sql 语句中,通过 WHERE 子句指定搜索条件进行过滤。
简单过滤
- 包含:WHERE,BETWEEN,IS NULL;
where 子句操作符
操作符 | Value | 操作符 | value |
---|---|---|---|
= | 等于 | > | 大于 |
<> | 不等于 | >= | 大于等于 |
!= | 不等于 | !> | 不大于 |
< | 小于 | BETWEEN | 在指定的两个值之间 |
<= | 小于等于 | IS NULL | 为 NULL 值 |
!< | 不小于 |
!=
与 <>
通常可以互换,但是并非所有的 DBMS 都支持两种不等于操作符,但是都至少支持其中一种操作符。读者选择不同的 DBMS 时需注意。
检查单个值
e . g . e.g. e.g. 列出所有价格小于10美元的产品;
SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;
e . g . e.g. e.g. 列出所有不是供应商 DLL01 制造的产品;
SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01'
范围值检擦
范围值的检查使用 BETWEEN
操作符,示例如下;
e . g . e.g. e.g. 检索价格在 5 美元到 10 美元之间的所有产品;
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
BETWEEN
匹配范围中所有的值,包括开始值与结束值。
空值检查
空值 NULL
,是无值,与字段为0、空字符串和仅仅空格不同。当一个列不包含值时,称为包含空值。
e . g . e.g. e.g. 检索有没有价格为空值;
SELECT prod_name
FROM Products
WHERE prod_price IS NULL;
高级过滤
- 包含:NOT,IN,AND,OR;
多个过滤条件
AND
- 多个过滤条件中间都需要添加 AND 关键字;
- AND 操作符指示 DBMS 检索匹配同时满足前后条件的行。
e . g . e.g. e.g. 检索商品由供应商 DDL01 制造且价格小于等于 4 美元的所有商品代码、名称和价格;
SELECT prod_id, prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;
OR
- OR 操作符指示 DBMS 检索匹配满足前后任一条件的行;
e . g . e.g. e.g. 检索商品由供应商 DDL01 制造或者 BRS01 制造的名称和价格;
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DDL01' or vend_id = 'BRS01';
求值顺序
AND + OR 在多个过滤条件组合时,AND 的优先级高于 OR 优先级。
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price >= 10;
-- 上述过滤逻辑等同于:
WHERE vend_id = 'DLL01' OR (vend_id = 'BRS01' AND prod_price >= 10);
-- 而不等同于:
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10;
读者理解上述三个语句的逻辑,即明白求值顺序。总而言之,由于 AND 优先级高于 OR 优先级,过滤语句会优先执行 AND 语句的前后的组合,即 A OR (B AND C) ;
IN 操作符
- IN 操作符后跟随一个范围值,范围内每个条件都可以进行匹配。
e . g . e.g. e.g. 检索由供应商 DLL01 和 BRS01 制造的所有产品。
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01', 'BRS01')
- 效果同本文上述部分通过 OR 语句连接的过滤语句;但是对比来看,IN 操作符的语法更加直观且清晰;
- IN 操作符也可以包含其他 SELECT 语句,动态地建立 WHERE 子句;
- IN 操作符理论上比一组 OR 操作符执行得更快。
NOT 操作符
- NOT 操作符否定其后所跟得条件,结果剔除满足其后所跟条件的行;
e . g . e.g. e.g. 检索不是由供应商 DDL01 制造的其他所有商品名称;
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01';
–
以上