mysql 进阶 (六) 模糊查询的四种常见用法介绍
![mysql进阶(六)模糊查询的四种常见用法介绍](https://static001.geekbang.org/infoq/29/293ed706bc1056b5ea2afec663c24c07.webp)
应用 mysql 进行查询操作时,模糊查询是经常遇到的一种应用场景。此篇文章主要介绍mysql
中模糊查询的常见四种用法。
一、%
表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%
)表示。
比如
将会把 u_name 为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。
另外,如果需要找出 u_name 中既有“三”又有“猫”的记录,请使用 and 条件。
若使用
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
二、_
表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
比如
只找出“唐三藏”这样 u_name 为三个字且中间一个字是“三”的;
再比如
只找出“三脚猫”这样 name 为三个字且第一个字是“三”的;
三、[ ]
表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
比如
将找出“张三”、“李三”、“王三”(而不是“张李王三”);
如 [ ]
内有一系列字符(01234、abcde 之类的)则可略写为“0-4”、“a-e”
将找出“老 1”、“老 2”、……、“老 9”;
四、[^ ]
表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
比如
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
将排除“老 1”到“老 4”,寻找“老 5”、“老 6”、……
五、查询内容包含通配符处理
由于通配符的缘故,导致我们查询特殊字符“%
”、“_
”、“[
”的语句无法正常实现,而把特殊字符用“[ ]
”括起便可正常查询。据此我们写出以下函数:
六、拓展阅读 MySQL 数据表中带 OR 的多条件查询
OR
关键字可以联合多个条件进行查询。使用OR
关键字时:
只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来。
如果不符合这些查询条件中的任何一条,这样的记录将被排除掉。
OR 关键字的基本语法格式如下:
条件表达式1 OR 条件表达式2 [...OR 条件表达式n]
OR 可以连接两个条件表达式,同时可以使用多个 OR 关键字,以连接更多的条件表达式。
6.1 实例 1
使用 OR 关键字查询 employee 表中 d_id 为 1001,或者 sex 为'男'的记录。SELECT 语句的代码如下:
可将 d_id 为 1001 的记录被查询了出来,同时,sex 为'男'的记录也被查询了出来。
这说明,使用 OR 关键字时,只要符合多个条件中的任意一个条件,就可以被查询出来。
6.2 实例 2
使用 OR 关键字查询 employee 表中的记录。查询条件为 num 取值在(1,2,3)集合中,或者 age 的范围为 24~26,或者 homeaddress 的取值中包含“厦门市”。SELECT 语句的代码如下:
结果显示,只要符合这 3 个条件表达式中的任意一个条件,这样的记录就会被查询出来。
注意⚠️:OR
可以和AND
一起使用。当两者一起使用时,AND 要比 OR 先运算。
6.3 实例 3
使用 OR 和 AND 关键字查询 employee 表中的记录。SELECT 语句的代码如下:
结果显示,只要符合 num IN(1,3,4) AND age=25 的记录或者符合 sex='女'的记录都被显示了出来。
如果将条件的顺序换一下,将SELECT
语句变成下面的情况:
结果显示,与前面的SELECT
语句的执行结果是一样的。
这说明,AND
关键字前后的条件先结合,然后再与OR
关键字的条件相结合。也就是说,AND 要比 OR 先运算。
注意⚠️:AND
和OR
关键字可以连接条件表达式。这些条件表达式中可以使用“=
”、“>
”等操作符,也可以使用IN
、BETWEEN AND
和LIKE
等关键字,而且,LIKE
关键字匹配字符串时可以使用“%
”和“_
”等通配符。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/2e10a16fc2dd7c9cf0f168433】。文章转载请联系作者。
评论