3、过滤数据 WHERE + LIKE
阅读书籍《SQL必知必会(第4版)》笔记
WHERE 子句在表名(FROM子句)之后给出
1、单一条件
WHERE prod_price = 3.49
WHERE prod_price BETWEEN 5 AND 10; # 范围查询
WHERE prod_price IS NULL; # 是否为 NULL 查询
2、高级过滤:操作符
1、AND子句、OR子句 -> 逻辑操作符
WHERE vend_id = 'DLL01' AND prod_price <= 4; # 返回满足所有给定条件的行
WHERE vend_id = 'DLL01' OR vend_id = 'BRS1'; # 匹配任一条件的行
- 优先处理 AND 操作符,再处理 OR
# 错误写法
WHERE vend_id = 'DLL01' OR vend_id = 'BRS1'
AND prod_price > 10;
-- vend_id = 'BRS1' AND prod_price > 10 被 sql 错误理解,被组合在一起了 --
# 正确写法 - 注意括号的使用,消除歧义
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS1')
AND prod_price > 10;
2、IN操作符 -> 指定条件范围
WHERE vend_id IN ('DLL01', 'BRS01')
# 和 OR 完成了相同的功能,但 执行更快
3、NOT 操作符 -> 否定其后跟的任何条件
WHERE NOT vend_id = 'DLL01'
3、通配符过滤(只能作用于字符串)
LIKE 操作符
- 不要过度使用通配符,性能比较差
- 尽量不要放在搜索模式的开始处,搜索起来是最慢的
# % 百分号 - 表示任何字符出现任意次数(% 不会匹配 NULL)
WHERE prod_name LIKE 'Fish%'; # 搜索以FISH开头的词
WHERE prod_name LIKE '%bean bag%'; # 搜索含有 bean bag 的值
WHERE prod_name LIKE 'F%y'; # 搜索以 F 开头,y 结尾的值
# _ 下划线 - 只匹配任意1个字符
WHERE prod_name LIKE '_ _ inch teddy bear'; # 搜索两个通配符匹配的值
# [] 方括号 - 指定一个字符集
[JM] # J或者M
[^JM] # 不等于J或者M