MySQL里的模糊查询

1. 什么是模糊查询?
模糊查询就是根据一个不明确的条件查询数据,它和精确查询某个值或者某个字段是相对的。
2. 模糊查询的三种方式

  • 第①种: 可以用between and 、in、is null、is not null 这些关键字进行模糊匹配查询。

示例:

--使用 between and 查询学号在2~9之间的学生的信息
SELECT * FROM student WHERE sid BETWEEN 2 AND 9;
--使用 in 查询学号为(1,8,10,13)的学生的信息
SELECT * FROM student WHERE sid IN(1,8,10,13);
--使用 is nul 查询email为空的学生的信息
SELECT * FROM student WHERE email IS NULL;
--使用 is not null 查询email不为空的学生的信息
SELECT * FROM student WHERE email IS NOT NULL;
  • 第②种: 用like关键字搭配百分号%或者下划线_这两种通配符进行模糊匹配查询。
    • % 表示的是匹配任意个数的字符
    • _ 表示的是匹配单个字符

示例:

-- 查询name字段中包含五的
select * from user where name like'%五%';
-- 查询name字段中最后一个字符 为 五的
select * from users where name like '%五';
-- 查询name字段中第一个字符 为 王 的
select * from users where name like '王%';
-- 使用 _ 单个的下划线。表示一个任意字符,使用和%类似
-- 查询表中 name 字段为两个字符的数据
select * from users where name like '__';
-- 查询 name 字段最后为五,的两个字符的数据
select * from users where name like '_五';
  • 第③种: 用REGEXP关键字,利用正则表达式的方式进行模糊查询匹配。
    说明一般来说前面两种方式就可以解决大部分的业务需求了,但是有时候也需要用正则的方式。
    例如,我们要从员工表中查询出姓张的,姓王的,姓李的等多姓氏的员工的话,这个时候用like关键字搭配通配符进行模糊匹配查询的话需要用多个or关键字进行连接,代码很繁琐,如果用正则来进行模糊匹配的话就只需要一个简短表达式。

示例:

-- 查询出张姓、凌姓、马姓的员工的全部信息(like方式)
SELECT * FROM student WHERE sname LIKE '张%' OR sname LIKE '凌%' OR sname LIKE '马%';
-- 查询出张姓、凌姓、马姓的员工的全部信息(正则方式)
SELECT * FROM student WHERE sname REGEXP '^张|^凌|^马';

正则表达式概念:

  • 它描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
  • 几乎大多数的语言都是支持正则表达的语法的,可以通用。比如Java、c++、python、js…

常用语法:

-- 字符类 --
[abc]			a、b 或 c(简单类) 
[^abc] 			任何字符,除了 a、b 或 c(否定) 
[a-zA-Z] 		a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
[a-d[m-p]] 		a 到 d 或 m 到 p:[a-dm-p](并集) 
[a-z&&[def]] 	d、e 或 f(交集) 
[a-z&&[^bc]]	a 到 z,除了 b 和 c:[ad-z](减去) 
[a-z&&[^m-p]]   a 到 z,而非 m 到 p:[a-lq-z](减去) 
-- 预定义字符类 --
. 				任何字符(与行结束符可能匹配也可能不匹配) 
\d 				数字:[0-9] 
\D 				非数字: [^0-9] 
\s 				空白字符:[ \t\n\x0B\f\r] 
\S 				非空白字符:[^\s] 
\w 				单词字符:[a-zA-Z_0-9] 
\W 				非单词字符:[^\w] 
-- 边界匹配器 --
^ 				行的开头 
$ 				行的结尾 
\b 				单词边界 
\B 				非单词边界 
-- 数量词 -- 
X? 				X,一次或一次也没有 
X* 				X,零次或多次 
X+ 				X,一次或多次 
X{n} 			X,恰好 n 次 
X{n,} 			X,至少 n 次 
X{n,m} 			X,至少 n 次,但是不超过 m 次 
-- 运算符 --
XY 				X 后跟 Y 
X|Y 			X 或 Y 
(X) 			用来将X这个表达式包裹起来

更多关于正则表达式可以参考 [ 菜鸟教程 ]

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值