MySQL之模糊查询

本文介绍了MySQL中实现模糊查询的两种方式:标准SQL模式匹配和扩展正则表达式模式匹配。详细解释了每种方式的使用方法及通配符特点,并对比了两者的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.标准SQL模式匹配

2.扩展正则表达式模式匹配

3.两种匹配模式的区别


在MySQL中实现模糊查询有2种方式:1.使用标准SQL模式匹配 2.使用扩展正则表达式模式匹配。

1.标准SQL模式匹配

在标准SQL模式下进行的匹配,缺省是忽略大小写的,并且不能使用 "=" 或 "!=" ,而必须使用 "LIKE" 或 "NOT LIKE" 关键字.

该模式共有"_" 和 "%" 两个通配符:

"_"  匹配任意单个字符

"%"  匹配任意多个字符(包括0个)

例如:

SELECT * FROM table_name WHERE filed_name LIKE '_abc_';  
#查询 filed_name 为 5 个字符,且中间三个字符是 "abc" 或 "ABC" 的所有记录
SELECT * FROM table_name WHERE filed_name LIKE 'abc%';  
#查询 filed_name 以 "abc" 或 "ABC" 开头的所有记录
SELECT * FROM table_name WHERE filed_name LIKE '%abc';  
#查询 filed_name 以 "abc" 或 "ABC" 结尾的所有记录
SELECT * FROM table_name WHERE filed_name LIKE '%abc%'; 
#查询 filed_name 中包含 "abc" 或 "ABC" 的所有记录,包含以 "abc" 或 "ABC" 开头或结尾的记录

PS: 虽然似乎 "%" 可以匹配任何东西,但有一个例外,那就是 NULL。 

如果查询条件中包含有 "_" 或 "%" 通配符,就需要使用 "ESCAPE" 关键字指定转义字符来对查询条件中的特殊字符进行转义,转义字符后面的 "_" 或 "%" 将不再作为通配符了,前面没有转义字符的"_" 或 "%" 仍然起通配符作用,若未指定转义字符则使用缺省的 "\" 作为转义字符。

例如: 

SELECT * FROM table_name WHERE filed_name LIKE 'abc\%%';
#查询 filed_name 以 "abc%" 或 "ABC%" 开头的所有记录,使用缺省转义字符 "\"
SELECT * FROM table_name WHERE filed_name LIKE 'abc/%%' ESCAPE '/'; 
#查询 filed_name 以 "abc%" 或 "ABC%" 开头的所有记录,指定转义字符为 "/"

2.扩展正则表达式模式匹配

在此种模式下,在MySQL中使用正则表达式进行匹配,缺省也是不区分大小写的,要使用关键词 "REGEXP"和 "NOT REGEXP"(或"RLIKE" 和 "NOT RLIKE",它们是同义词)。

正则表达式模式常用通配符:

"."      匹配除 "\n" 之外的任意单个字符,要匹配包括 '\n' 在内的任意字符,请使用'[.\n]'
"[]"     匹配在方括号内的任意字符。如,"[abc]" 则匹配"a"、"b"或者"c",为了限定字符的取值范围,可以使用 "-",
         "[a-z]" 匹配小写字母中的任意一个,而 "[^a-z]" 匹配非小写字母中的任意一个
"?"      匹配0个或1个在它前面的字符
"+"      匹配1个或多个在它前面的字符
"*"      匹配0个或多个在它前面的字符。如,"x*" 匹配任意数量的 "x" 字符,"[0-9]*"匹配任意数量的数字,而".*"匹配任意数量的任意字符
"{n}"    匹配n个在它前面的字符。"8{5}" 匹配5个8,即88888
"{n,}"   匹配至少n个在它前面的字符。"8{5,}" 匹配至少5个8
"{n,m}"  匹配n-m个在它前面的字符。"[0-9]{5,11}" 匹配任意数字重复5到11次。
"^"      匹配开始位置。
"$"      匹配结束位置。

例如:  

SELECT * FROM table_name WHERE filed_name REGEXP '^abc%{1,3}$';
#查询 filed_name 以 "abc" 或 "ABC" 开头,并以1至3个 "%" 结尾的所有记录

PS正则表达式本身是区分大小写的,但是在MySQL中使用正则表达式进行匹配是不区分大小写的,要区分大小写需使用BINARY关键字,例如:  

SELECT * FROM table_name WHERE filed_name REGEXP BINARY '^abc%{1,3}$';
#查询 filed_name 以 "abc" 开头,并以1至3个 "%" 结尾的所有记录

3.两种匹配模式的区别

-标准SQL模式使用 "LIKE" 或 "NOT LIKE" 进行查询,正则表达式模式使用 "REGEXP" 或 "NOT REGEXP"(或 "RLIKE" 和 "NOT RLIKE")进行查询。

-"LIKE" 会对整个字段值进行匹配,而 "REGEXP" 会在字段值内进行匹配。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值