mysql学习2:模糊匹配查询like,regexp,in
mysql模糊匹配查询like,regexp,in
摘要
内容⽐较简单,⽆摘要。
关键词
模糊查询  like  regexp  in  contact
正⽂
下图是⽰例⽤到的数据表信息
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},"%")

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。