3、过滤数据 WHERE + LIKE

Posted by CodingWithAlice on July 11, 2022

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 查询

D5C92A6A-F84E-4B62-99CC-07C2BC0BA614

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