mysql学习2:模糊匹配查询like,regexp,in

mysql模糊匹配查询like,regexp,in

 

摘要

内容比较简单,无摘要。
 

关键词

模糊查询  like  regexp  in  contact

 

正文

下图是示例用到的数据表信息
mysql学习2:模糊匹配查询like,regexp,in

MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式

 

一、SQL模式

SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。
注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。
语法:SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中关于条件,SQL提供了两种种匹配模式:
  1. 百分号(%):示任意个或多个字符,可匹配任意类型和长度的字符。
  示例1:SELECT * FROM character WHERE name LIKE ‘%孙%';即匹配e姓名为“孙行者”,“行者孙,“行者孙”三行数据
  示例2:SELECT * FROM character WHERE name LIke '%孙%' and name like '%行%'; 即匹配姓名为“孙行者”,“行者孙,“行者孙”三行数据
  示例3:SELECT * FROM character WHERE name LIke '%孙%行%‘;只能匹配姓名为“孙行者”一行数据
  注意示例2和示例3的区别
  2.下划线(_):表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)
  示例1:SELECT * FROM character WHERE name LIKE ‘_三_';即把姓名为“唐三藏”的一行数据
  示例2:SELECT * FROM character WHERE name LIKE ‘_三';即把姓名为“唐三”一行数据
 

二、正则模式

由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词),以下是正则表达式中常用的字符
  1. “.”匹配任何单个的字符(单字节字符)。一个字符类“[...]”匹配在方括号内的任何字符。
  示例1::“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。
  2. “ * ”匹配零个或多个在它前面的东西。
  示例:“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。
  3. 注意:正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。
  4. “^”匹配名字的开始
  示例:姓名以“孙”开始的 SELECT * FROM role WHERE name REGEXP "^孙";;即匹配姓名为“孙行者”,“孙悟空两行数据
  5. 使用“$”匹配名字的结尾
  示例:示例:姓名以“孙”结尾的 SELECT * FROM role WHERE name REGEXP "孙$";;即匹配姓名为“者行孙”,“行者孙”两行数据
 

三、in查询

叫in查询不是很合理 ,更合理的说法是 :in其实和=类似,区别在于:=后面是一个值。in 后面可以是多个值。
  示例1:select * from role where name in("唐三");即匹配姓名为“唐三”一行数据;
  示例2:select * from role where name in("唐三","唐三藏");即匹配姓名为“唐三”,“唐三藏”一行数据;
  示例3:select * from role where name in("唐三","%行者%"),只匹配姓名为“唐三”一行数据;即in查询不支持模糊查询,如示例4
  示例4:select * from role where name in("%行者%"),无匹配结果
 

四、like contact模糊查询

CONCAT(str1,str2,…) 函数返回结果为连接参数产生的字符串。
  示例1:select * from role where name like contact("%","三","%");即匹配姓名为“唐三”,“唐三藏”两行行数据;
like contact模糊查询强大的地方在于可以对传进来的参数进行某查询,比如经前端提交上的数据,赋值给参数name,则可以select * from table where name like contact("%",${name},"%")
上一篇:MySQL中的模糊查询和通配符转义


下一篇:重置手机过程