笔记对应书本的七八九章
「written by Talaxy on 2/24/20」
组合WHERE子句
MySQL允许给出多个WHERE子句
这些子句可以使用两种方式使用:以AND子句的方式或者OR子句的方式使用。
操作符(operator):
用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符(logical operator)。
AND操作符:
select
OR操作符:
select
计算次序:
因为SQL中AND优先级比OR大,SQL会先整合所有的AND子句,再处理OR子句。我们可以用括号来明确分组相应的操作符:
select
IN操作符
IN操作符用来指定条件集合:
select
为什么使用IN操作符?
- 语法更清楚,更容易理解
- 比一般的OR操作符执行更快
- IN的最大优点是可以包含其他SELECT语句,是的能够更动态地建立WHERE子句(以后会详细介绍)
NOT操作符
WHERE子句中的NOT操作符只有一个功能,那就是否定它之后所跟的任何条件,比如:
select
MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反,这与多数其他DBMS的NOT有着很大的差别。
LIKE操作符
通配符(wildcard):
用来匹配值的一部分的特殊字符
搜索模式(search pattern):
由字面值、通配符或两者组合构成的搜索条件
通配符本身实际是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。要在检索子句中使用通配符,必须使用LIKE操作符。
谓词(predicate)
从技术上来说,LIKE是谓词而不是操作符
百分号(%)通配符
%表示任何字符出现的任意次数(包括0),例如找所有以词jet起头的行值:
select
在MySQL中,搜索可以是区分大小写的。
通配符可在搜索模式中任意位置使用,并且可以有多个通配符,比如: "%jet%"、"j%t"、 ...
%无法匹配NULL
下划线(_)通配符
下划线只能匹配单个字符,比如:
'_ ton anvil'能匹配'x ton anvil',但不能匹配'xx ton anvil'
使用操作符的技巧
- 不要过度使用通配符,尽量使用其他操作符
- 尽量把通配符置于搜索模式的最后处
正则表达式介绍
正则表达式是用来匹配文本的特殊的串(字符集合)
所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式。
正则表达式由正则表达式语言来建立
基本字符匹配
匹配值包含'1000'的行:
select
匹配后缀是'000'的行:
select
'.'是正则表达式语言中的一个特殊的字符。它表示匹配任意一个字符。因此上文可以匹配'1000'、'2000'等等
LIKE和REGEXP的区别:
对于'1000'这样的表达式,使用LIKE则是能匹配'1000',而REGEXP则能匹配任何包含'1000'的值。
即对于'abc 1000',LIKE不能匹配出来,而REGEXP能匹配出来
MySQL中的正则表达式不区分大小写,如果要区分大小写,需要在REGEXP后加上BINARY关键字,比如:
select
匹配几个字符之一:
比如 '[123] Ton',[123] 定义了一组字符,他的意思是匹配1或2或3,因此'1 Ton'、'2 Ton'、'3 Ton'都能匹配出来。
[123] 是 [1|2|3] 的缩写,但不是1|2|3的缩写
比如 '1|2|3 Ton' 会匹配'1'或者'2'或者'3 Ton'
如果要对一组字符取非,在开始处加个'^'即可,比如[^123]
控制范围:
[12345] 可以写成 [1-5] ,用'-'代表范围
同样的,可以 [a-z] 表示a到z的字符
匹配特殊字符:
若要匹配特殊字符('.'、'-'、'|'、'['、...),需要在这些符号之前加上'//'作为前导,比如匹配含有'.'的行:
select
还有一些空白符需要'//':
如果是匹配'',需要使用''
多数正则表达式只使用一个反斜杠来转译字符,而MySQL需要两个,一个给自己解释,一个给正则表达式解释
匹配字符类:
匹配多个实例:
举个例子,'[[:digit:]]{4}' 和 '[0-9][0-9][0-9][0-9]' 等价
定位符:
为了匹配特定位置的文本,需要使用定位符:
比如匹配开头是数字的文本,可以用'^[0-9]'
可以在不调用数据库的情况下测试正则表达式:
select
如果匹配返回1,否则返回0。这里返回的是0。