Hello
一. 基础过滤
“基础过滤”包括以下内容:
- 面向已知值,进行过滤
- WHERE操作符的使用
- 非组合过滤、组合过滤
- SQL关键词
WHERE:表示过滤条件
// 基础语法
SELECT field FROM tb WHERE condition;
要点:
1.面向被检索的所有数据(并非对查询结果进行过滤)。
2.可以根据非检索列进行过滤(建议实践)。
2.SQL过滤比起应用程序过滤,具有高效、可伸缩性以及节省网络带宽的优点。
- 比较操作符表
- 非组合过滤
特殊关键词:BETWEEN AND、IS NULL、NOT、IN
// 区间过滤
SELECT field FROM tb WHERE field BETWEEN 0 AND 100;
// NULL值过滤
SELECT field FROM tb WHERE field IS NULL;
要点:
1.NULL值只能通过IS NULL匹配
2.NULL值只能通过NOT NULL不匹配
// 列表过滤
SELECT field FROM tb WHERE field IN (v1, v2...);
要点:
1.符合值列表中的任意一个值,都符合条件
2.IN最大的优点,是可以使用其他查询语句的结果
// 否定过滤
SELECT field FROM tb WHERE field NOT IN(v1, v2...);
要点:
1.NOT对后跟条件进行否定,语义为“非”
- 组合过滤
“组合过滤”:连接多个过滤条件
关键词:AND、OR
// “和”条件
SELECT field FROM tb WHERE condition1 AND condition2...;
// “或”条件
SELECT field FROM tb WHERE condition1 OR condition2...;
要点:
1.AND、OR可以连接任意个过滤条件。
2.AND的计算优先级比OR高。在结合多个条件时,可以使用括号包裹组合,确保不会因为默认优先级导致查询异常。
二. 模糊过滤
“模糊过滤”包括以下内容:
- 面向模式,进行过滤
- 通配符、模式介绍
- LIKE操作符的使用
- 通配符
“通配符”:用来匹配值的一部分的特殊字符
数量限制:任意个
位置限制:任意位置
通配符 | 说明 |
---|---|
% | 代表0个或多个任意字符 |
_ | 代表1个任意字符 |
要点:
1.通配符不能匹配NULL。
- 模式
由字面值、通配符或两者组合构成的搜索条件。
- SQL关键词
LIKE:表示使用某种模式查找
SELECT field FROM tb WHERE field LIKE pattern;
要点:
1.整个列值与模式匹配,才会被返回。
2.除非必要,否则不要把通配符用在搜索模式的开始处,这样的搜索是最慢的。
三. 正则表达式过滤
“正则表达式过滤”包括以下内容:
- 面向模式,进行过滤
- 应用场景
- 正则表达式元字符表
- REGEXP操作符的使用
- 应用场景
“通配符模式”只能用于搜索结构简单的文本,对于复杂组合无能为力。正则表达式能够扩展模式,更细腻的控制模式结构。
- 元字符表
元字符 | 说明 |
---|---|
| | 或 |
. | 匹配任意1个字符 |
[ ] | 匹配集合中的任意1个 |
[^ ] | 不匹配集合中的任意1个 |
[0-9] | 匹配0到9之间的任意1个数字 |
[a-z] | 匹配a-z之间的任意1个字母 |
\\ | 匹配特殊字符 |
- SQL关键词
REGEXP:表示应用正则表达式
// 不区分大小写
SELECT field FROM tb WHERE field REGEXP pattern;
注意:
这里笔者测了是区分大小写的(Ver 8.0.18)
// 强制区分大小写
SELECT field FROM tb WHERE field REGEXP BINARY pattern;
要点:
1.没有特别指定,只要列值的一部分与正则表达式相匹配,就会被返回。