写点什么

mysql 进阶 (六) 模糊查询的四种常见用法介绍

  • 2022 年 7 月 17 日
  • 本文字数:1932 字

    阅读完需:约 6 分钟

mysql进阶(六)模糊查询的四种常见用法介绍

应用 mysql 进行查询操作时,模糊查询是经常遇到的一种应用场景。此篇文章主要介绍mysql中模糊查询的常见四种用法。 

一、%

表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。 

比如

SELECT * FROM [user] WHERE u_name LIKE '%三%';
复制代码


将会把 u_name 为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。 

另外,如果需要找出 u_name 中既有“三”又有“猫”的记录,请使用 and 条件。

SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%';
复制代码


若使用 

SELECT * FROM [user] WHERE u_name LIKE '%三%猫%' 
复制代码


虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。 

二、_

表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句: 

比如

SELECT * FROM [user] WHERE u_name LIKE '_三_';
复制代码


只找出“唐三藏”这样 u_name 为三个字且中间一个字是“三”的; 

再比如

SELECT * FROM [user] WHERE u_name LIKE '三__';
复制代码

只找出“三脚猫”这样 name 为三个字且第一个字是“三”的; 

三、[ ]

表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 

比如 

SELECT * FROM [user] WHERE u_name LIKE '[张李王]三';
复制代码

将找出“张三”、“李三”、“王三”(而不是“张李王三”); 

 [ ] 内有一系列字符(01234、abcde 之类的)则可略写为“0-4”、“a-e” 

SELECT * FROM [user] WHERE u_name LIKE '老[1-9]';
复制代码

将找出“老 1”、“老 2”、……、“老 9”; 

四、[^ ]

表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 

比如 

SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三';
复制代码

将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等; 

SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]'; 
复制代码

将排除“老 1”到“老 4”,寻找“老 5”、“老 6”、…… 

五、查询内容包含通配符处理

由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数: 

function sqlencode(str) 
str=replace(str,"';","';';") 
str=replace(str,"[","[[]") ';
str=replace(str,"_","[_]") 
str=replace(str,"%","[%]") 
sqlencode=str 
end function
复制代码

六、拓展阅读 MySQL 数据表中带 OR 的多条件查询


OR关键字可以联合多个条件进行查询。使用OR关键字时:

  • 只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来。

  • 如果不符合这些查询条件中的任何一条,这样的记录将被排除掉。


OR 关键字的基本语法格式如下:

条件表达式1 OR 条件表达式2 [...OR 条件表达式n]

OR 可以连接两个条件表达式,同时可以使用多个 OR 关键字,以连接更多的条件表达式。

6.1 实例 1

使用 OR 关键字查询 employee 表中 d_id 为 1001,或者 sex 为'男'的记录。SELECT 语句的代码如下:

SELECT * FROM employee WHERE d_id=1001 OR sex LIKE '男';
复制代码

可将 d_id 为 1001 的记录被查询了出来,同时,sex 为'男'的记录也被查询了出来。

这说明,使用 OR 关键字时,只要符合多个条件中的任意一个条件,就可以被查询出来。

6.2 实例 2

使用 OR 关键字查询 employee 表中的记录。查询条件为 num 取值在(1,2,3)集合中,或者 age 的范围为 24~26,或者 homeaddress 的取值中包含“厦门市”。SELECT 语句的代码如下:

SELECT * FROM employee WHERE
         num IN(1,2,3) OR age BETWEEN 24 AND 26
         OR homeaddress LIK '%厦门市%';
复制代码

结果显示,只要符合这 3 个条件表达式中的任意一个条件,这样的记录就会被查询出来。


注意⚠️:OR可以和AND一起使用。当两者一起使用时,AND 要比 OR 先运算。

6.3 实例 3

使用 OR 和 AND 关键字查询 employee 表中的记录。SELECT 语句的代码如下:

SELECT * FROM employee WHERE num IN(1,3,4) AND age=25 OR sex='女';
复制代码

结果显示,只要符合 num IN(1,3,4) AND age=25 的记录或者符合 sex='女'的记录都被显示了出来。

如果将条件的顺序换一下,将SELECT语句变成下面的情况:

SELECT * FROM employee WHERE sex='女' OR num IN(1,3,4) AND age=25;
复制代码

结果显示,与前面的SELECT语句的执行结果是一样的。

这说明,AND关键字前后的条件先结合,然后再与OR关键字的条件相结合。也就是说,AND 要比 OR 先运算。


注意⚠️:ANDOR关键字可以连接条件表达式。这些条件表达式中可以使用“=”、“>”等操作符,也可以使用INBETWEEN ANDLIKE等关键字,而且,LIKE关键字匹配字符串时可以使用“%”和“_”等通配符。

发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
mysql进阶(六)模糊查询的四种常见用法介绍_MySQL_No Silver Bullet_InfoQ写作社区