mysql upate 后面跟where_mysql not in语句


笔记对应书本的七八九章

「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 upate 后面跟where_MySQL_02


如果是匹配'',需要使用''

多数正则表达式只使用一个反斜杠来转译字符,而MySQL需要两个,一个给自己解释,一个给正则表达式解释

匹配字符类:


mysql upate 后面跟where_MySQL_03


匹配多个实例:


mysql upate 后面跟where_mysql not in语句_04


举个例子,'[[:digit:]]{4}' 和 '[0-9][0-9][0-9][0-9]' 等价

定位符:

为了匹配特定位置的文本,需要使用定位符:


mysql upate 后面跟where_操作符_05


比如匹配开头是数字的文本,可以用'^[0-9]'

可以在不调用数据库的情况下测试正则表达式:


select


如果匹配返回1,否则返回0。这里返回的是0。