过滤数据
数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指 定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。
例如2.1中的查询城市,发现会有很多重复的城市,那是因为数据表中,该城市每有个新状态就会生成新的一行,因此数据表中有一列为是否最新,将这个条件卡住就能得到最新状态城市的唯一行
输入:
SELECT
city_name
from dw.dim_city
where is_enabled=1
keys:
1、过滤的值需要和字段相符,如果是数字(a=1),如果是字符(a=‘a’)
2、where与order by的顺序:where先order by后(必须,否则报错!)
过滤的操作符**
| 操作符 | 说 明 |
|---|---|
| = | 等于 |
| < > | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| !< | 不小于 |
| > | 大于 |
| >= | 大于等于 |
| !> | 不大于 |
| BETWEEN | 在指定的两个值之间 |
| IS NULL | 为NULL值 |
keys:
1、操作符是可以兼容的,比如不等于既可以写作<>,也可以写作!=
2、使用以上操作符可以过滤单值、不匹配、范围值、空值,试一试?
组合过滤
输入:
SELECT
city_name
from dw.dim_city
where is_enabled=1 and city_name=’北京’
keys:
1、and字符是把两个过滤条件组合起来,逻辑是“且”,就是同时满足
2、多个条件如果都需要同时满足,那就是条件1 and 条件2 and 条件3 and …… and 条件n
输入:
SELECT
city_name
from dw.dim_city
where city_name=’北京’ or city_name=’上海’
keys:
1、or字符是把两个过滤条件组合起来,逻辑是“或”,就是只要满足其一
2、多个条件如果都需要同时满足,那就是条件1 or 条件2 or 条件3 or …… or 条件n
组合过滤顺序
输入:
SELECT
city_name
from dw.dim_city
where is_enabled=1 and city_name=’北京’ or city_name=’上海’
输入:
SELECT
city_name
from dw.dim_city
where is_enabled=1 and (city_name=’北京’ or city_name=’上海’ )
大家可以试下上面这两个sql,看看结果有什么不同
keys:
1、and和or的优先级:and逻辑先,or逻辑后
2、提升优先级:()英文的括号可以定义优先执行的逻辑,可以将or左右的过滤条件组合为一个整体逻辑
范围条件过滤
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值。
输入:
SELECT
city_name
from dw.dim_city
where city_name in (‘北京’ ,’上海’ )
keys:
1、功能与or相当
2、在有很多合法选项时,IN操作符的语法更清楚,更直观。
3、在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理。
4、 IN操作符一般比一组OR操作符执行得更快。
BETWEEN
WHERE product_price __BETWEEN 5 AND 6
keys:
between必须和and同时用。
通配符过滤
通配符(wildcard):用来匹配值的一部分的特殊字符。通配符只能用于文本字段(串),非文本字数据类型字段不能使用通配符搜索。
输入:
SELECT
city_name,first_alpha
from dw.dim_city
where first_alpha like ‘c%’
keys:
1、为了使用通配符,必须使用like;=’c%’是错误的
2、百分号%通配符:%表示任何字符出现任意次数,包括0个字符。但是单独使用不能匹配null
3、区分大小写:c%能找出小写c开头的所有行,C%能找出大写C开头的所有行,之间不行
4、位置:%c(c结尾的所有行);%c%(中间有c的所有行);c%(c开头的所有行);c%a(c开头a结尾的所有行)
输入:
SELECT
city_name,first_alpha
from dw.dim_city
where first_alpha like ‘chengd‘
keys:
1、下划线()通配符:用途与%一致,但是只匹配单个字符
否定条件过滤
输入:
SELECT
city_name,first_alpha
from dw.dim_city
where first_alpha not like ‘c%’
输入:
SELECT
city_name,first_alpha
from dw.dim_city
where city_name not in (‘北京’ ,’上海’ )
keys:
1、not:表示否定,配合in或like或is使用(not like;not in;is not;not between),
