本资料为产品岗位作为日常工作参考,语言口语化
At 2019/4/27 By David.Yang
介绍什么是LIKE运算符
有时候我们在数据过滤时,并没有非常精准的过滤条件,
而是受限与一些比较模糊的查询,
比如天龙八部里面儿姓段的到哪儿都不受待见。
怎么查名字段开头的呢?
语法
ϒ LIKE作为过滤条件通常配合在WHERE子句当中使用
ϒ MYSQL提供两种方式来实现模糊匹配,用来与LIKE配合使用:百分号(%)、下划线(_)
百分号(%):通配符允许匹配任意字符串的[0]个或[多个]
下划线(_):通配符允许匹配任何[单个字符串]
LIKE使用(%)实现匹配
为了实现模糊匹配,我们将学生表进行一些修改,
补充姓、名两个字段
并完成数据的补充
语法
WHERE
column LIKE X%
ϒ column 需要匹配的字段值
ϒ LIKE 模糊关键字
ϒ X 匹配表达式
ϒ % 表示目标匹配符
以X开头的匹配
来了来了,我们可以开始玩儿了。
我们搜索学生名字,并且以[y]字母开头,可以使用%,
表达式
x%
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "y%";
来来来,瞅瞅都拿到些啥
以X结尾的匹配
我还要找名里边儿v结尾的学生有哪些
表达式
% x
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "%v";
yoyoyo,看看找到谁了
包含X的匹配
我还要找名里边儿只要带ng的学生
表达式
% x%
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "%ng%";
找到的学生们是
LIKE使用(_)实现匹配
来来来,我们来看看这3条有意思的数据,
他们都是s*i的规律,即s开头,i结尾,
我们使用_匹配看看有什么结果
表达式
x_y
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "s_i";
是返回了这么一条数据,为什么呢?
忘了我们上文定义语法时讲的么?
x_y表达式匹配时,通配符允许匹配任何[单个字符串]
ϒ 左匹配
表达式
x_
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "s_";
ϒ 右匹配
表达式
_x
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "_i";
NOT特性的LIKE运算符的使用
NOT关键子可以和LIKE组合使用,以用来查询不匹配特定表达式的数据。
语法
WHERE
column NOT LIKE X%
举个栗子
🌰
要找到所有不以s字符开头的学生,用NOT LIKE操作
SQL
SELECT
*
FROM
students
WHERE
firstname NOT LIKE "%s"
LIMIT 10;
瞅一瞅
LIKE与ESCAPE子句的使用
有时候吧,我们的数据当中本来就包含特殊符号,
还整好有%和_,
你说巧不巧?
那这时候使用LIKE查询会不会出问题呢?
该怎么办呢?
能办!
用转义,通过转义符号将其特殊内容转化成普通的文字字符,
就能够无障碍继续使用LIKE匹配了。
举个例子
🌰
构建了两人名字,有%字符
我们找出包含dun%的那个谁出来
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "dun\%%";
他来了
再比如
这人我贼讨厌,要找他也一样操作
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "%\_jing";
臭小子给揪出来了
怎么找出来的呢?
原来是这个是他“\”,英文的反斜杠,
在数据库和很多编程语言当中都是用“\”来表示转义,
即将特殊字符转化成普通字符。
自定义转义符号
如果我不想用“\”呢?
没问题啊,满足你。
使用ESCAPE,世界就是你的,
你可以自己指定符号作为你的转义符,
比如我就喜欢钱,
us doller,我用$
SQL
SELECT
*
FROM
students
WHERE
firstname LIKE "%$_jing" ESCAPE "$";
赵志敬,你逃不掉的
以上通过ESCAPE “你的符号”来实现自定义转义符
补充
ϒ LIKE运算符的使用是否正确对数据库的性能影响很大,LIKE运算符强制MYSQL扫描整个数据表以找到满足匹配条件的数据行,他不允许数据库引擎使用索引进行快速搜索,因此在数量较大时使用LIKE查询会造成数据库性能大幅度下降。
ϒ LIKE运算符不区分大小写,x% 和 X%效果相同
本文讲解了LIKE的模糊匹配怎么使用,
are you 会了么?