当前位置:网站首页>MySQL LIKE – 语法和用法示例教程
MySQL LIKE – 语法和用法示例教程
2022-08-02 17:51:00 【allway2】
本教程解释了使用 MySQL LIKE 运算符的模式匹配:
模式匹配是几乎所有编程语言(如 Java/C#/Python 等)中的一个重要特性,它们主要利用正则表达式的使用来针对给定的字符串输入进行模式匹配。
MySQL 提供了一个易于使用的运算符,称为 LIKE,可用于将字符串值与指定的模式匹配,并且对于查询大型数据集很有用。
你将学到什么:[隐藏]
MySQL LIKE
句法:
LIKE 运算符与 SELECT 查询中的 WHERE 子句一起使用。
在一个简单的查询中,语法如下所示。
SELECT{column_names} [*] FROM{table_name} WHERE{column_with_string_value} LIKE{match_pattern} |
该语法的不同组成部分解释如下:
- {column_names}:这些是要显示为 SELECT 查询输出的列名。这些值可以是 * 用于选择所有列或单个列的逗号分隔名称。
- {table_name}:这是需要执行查询的表的名称。
- {column_with_string_value}:这是需要针对指定模式执行其值的列。请注意,任何比较都是在可以转换为字符串的列上进行的。
- {match_pattern}:这是需要比较列值的匹配表达式。匹配模式的样本可以是 - ' SM% '。这将匹配以 SM 开头的所有列值。示例: SMART、SMELL、SMOKE 等。
与此查询类似,LIKE 运算符甚至可以用于带有 JOINS 等的复杂查询,因为 LIKE 只是一个比较运算符,可以在任何可能进行列值比较的地方使用。
注意:与 LIKE 类似,我们也可以使用它的否定变体,即 'NOT LIKE'。因此,在这种情况下,使用“NOT LIKE”运算符的查询不会返回匹配结果,而是返回不匹配的结果。
MySQL 匹配模式
LIKE 运算符可以与 2 种模式一起使用。这些列在下表中:
| 图案 | |
|---|---|
| % (百分比) | 匹配任意数量的字符(包括根本没有字符) |
| _(下划线) | 匹配单个字符 |
现在我们将看到一些使用这两种模式的示例。
% 匹配模式
当您想在其放置之后或之前匹配 0 个或多个字符时,使用 % 模式。
例如:如果您想匹配具有员工姓名的列中的字符串“it”。假设有诸如 Amit、Anchit、Arpit、Nikita、Smith 等名称。我们可以看到所有名称都有“it”子字符串。但他们的定位不同。
假设列名是names,表名是student_names。
使用以下示例数据创建脚本来填充数据库:
CREATETABLEstudent_names (nameVARCHAR(100));INSERTINTOstudent_names VALUES('Amit'),('Ankit'),('Smith'),('Nikita'),('Mohit'); |
让我们看看如何使用 % Match 模式。
SELECT * FROM student_names WHERE name LIKE '%it%'输出:
| name |
|---|
| Amit |
| Ankit |
| Smith |
| Nikita |
| Mohit |
现在这意味着它可以匹配在任何位置具有“it”子字符串的字符串,并且匹配前后可以有任意数量的字符。您可以看到所有匹配的名称都作为输出返回。
重写查询以仅匹配以“it”子字符串结尾的名称。
SELECT * FROM student_names WHERE name LIKE '%it'所以在这里,我们删除了尾随的 '%' 符号并将 'it' 字符串放在末尾。此模式允许在 'it' 之前有任意数量的字符,但字符串应以 'it' 子字符串结尾。
上述查询的输出:
| name |
|---|
| Amit |
| Ankit |
| Mohit |
注意:这里需要注意的是,使用 '%' 字符提到的模式不区分大小写。所以对于上面的例子,我们可以使用 '%IT' 或 '%It' 而不是 '%it',输出仍然保持不变。
_匹配模式
现在让我们看看如何使用“_”匹配模式。我们知道 '_' 只允许一个字符。
假设我们要从同一张表(student_names)中查询所有 5 个字母的名字。
要在这种情况下使用 '_' 模式匹配器,我们指定了五个 _(下划线)以及 LIKE 模式,它将仅匹配那些长度为 5 个字符的名称。
SELECT * FROM student_names WHERE name LIKE '_____'输出:
| name |
|---|
| Ankit |
| Mohit |
| Smith |
让我们看另一个例子。假设我们要查找以子字符串 'it' 结尾的所有 5 个字母名称
SELECT * FROM student_names WHERE name LIKE '___it'在这里,我们使用了 3 个“_”(下划线)和需要匹配的实际子字符串。
输出:
| name |
|---|
| Ankit |
| Mohit |
| Smith |
结合 % 和 _ 模式匹配器
在本节中,我们将讨论如何将 % 和 _ 模式匹配器匹配在一起。
假设我们要查找所有具有“it”子字符串并且在单词“it”之后恰好有 2 个字符的名称
SELECT * FROM student_names WHERE name LIKE '%it_'在这里,我们结合了 % 和 _ 匹配模式来找到精确匹配。
输出:
| name |
|---|
| Smith |
| Nikita |
使用NOT LIKE
NOT LIKE 是对 LIKE 运算符返回的完全否定。即它将返回所有与模式匹配表达式不匹配的记录/行。
示例:假设我们要查找所有不是 4 个字符长的名称。
SELECT * FROM student_names WHERE name NOT LIKE '____'输出:
| name |
|---|
| Ankit |
| Smith |
| Nikita |
| Mohit |
您可以在上面的输出中看到,它只返回那些不是 4 个字符长的名称。
使用带有 ESCAPE 字符的 MySQL LIKE
在这里,我们将看到如何将 ESCAPE 字符与模式匹配器一起使用。
假设在假设的情况下,我们的名称实际上包含 % 和 _ 字符,并且我们想要找到这些名称,那么我们需要实际匹配 % 和 _。这可以使用转义字符来实现。
注意:转义字符的默认值为'\'(反斜杠)
将一些数据添加到包含带有 % 和 _ 字符的名称的 student_names 表中。
INSERT INTO student_names
VALUES('Darre%n'),('Julia_Roberts'),('Dane_Sherman%');以下是一些示例,可以更好地理解这一点。
#1) 找出所有带有 % 符号的名称。
SELECT * FROM student_names WHERE name LIKE '%\%%'输出:
| name |
|---|
| Darre%n |
| Dane_Sherman% |
#2) 查找所有带有 _ 符号的名称
SELECT * FROM student_names WHERE name LIKE '%\_%'输出:
| name |
|---|
| Julia_Roberts |
| Dane_Sherman% |
在上面的两个示例中,您可以看到我们使用转义字符来提及 % 和 _ 字符 - 即,为了匹配 % 字符本身,我们在 % 符号之前使用了转义字符 - 即像 '\%'
使用您自己选择的转义字符
现在让我们尝试扩展前面的示例。
MySQL 允许您指定 MySQL 在运行模式匹配搜索时应该使用的自己的 ESCAPE 字符。
让我们尝试将 Escape 字符更新为 '!' 而不是默认值 '\'
SELECT * FROM student_names WHERE name LIKE '%!_%' ESCAPE '!'输出:
| name |
|---|
| Julia_Roberts |
| Dane_Sherman% |
在上面的示例中,我们将转义字符覆盖为“!” 并在模式匹配器 '%!_%' 中使用相同的 - 我们要匹配名称中的 '_' 字符。
另请阅读 =>> Java 中的转义序列
经常问的问题
Q #1) %% 在 SQL 中是什么意思?
答案: '%%' 不会匹配任何特定的东西。它相当于只有 1个% 的字符。如果要匹配列值中的“%”字符本身,可以将其与默认值为 \' 的转义字符一起使用。
假设您要匹配具有 '%' 字符的列值,您可以将模式匹配写为 – LIKE '%\%%' (注意中间百分比 (%) 字符之前的额外反斜杠。
Q #2) MySQL 中的通配符是什么?
答: MySQL LIKE 运算符与 MySQL 中的 2 个通配符一起工作,以实现不同的模式匹配方式。
这些是:
- % - 这将匹配任意数量的字符(包括零)
- _ – 这将完全匹配一个字符
Q #3) 如何在 MySQL 中编写 LIKE 查询?
答: LIKE 是一个简单的运算符,通常与 SELECT 查询中的 WHERE 子句一起使用。它用于将列值与指定的模式进行匹配。
示例:假设有一个包含employee_details 的表,并且它有一个名为address 的列,其中包含房屋编号、街道名称等。您想要找出所有将街道定义为“Oxford Lane”作为其地址的员工。
我们可以使用 LIKE 运算符来编写这样的查询。
SELECT * FROM employee_details WHERE address LIKE '%Oxford Lane%'请注意,字符串模式在与指定的匹配表达式匹配时不区分大小写。
Q #4) 如何与 LIKE 运算符一起指定不同的转义字符?
答: MySQL 提供了一种指定自定义转义字符的方法,该字符将覆盖默认字符,即 \
这是一个将转义字符更改为“!”的示例 用于查询执行。
SELECT * FROM employee_details WHERE address LIKE '%!_%' ESCAPE '!'在上面的查询中,我们提到了“!” 作为转义字符并在匹配表达式中使用相同的字符。
Q #5) 如何使用 LIKE 运算符匹配实际的 % 或 _ 字符?
答: % 和 _ 等字符是特殊的通配符,当实际需要作为字符串的一部分进行匹配时,应将其转义。
默认转义字符是“\”,应在提及通配符之前使用。
假设我们想将 '_' 字符与给定的列值进行匹配,那么我们可以将匹配表达式写为 – LIKE '%\_%'
结论
在本教程中,我们了解了使用 LIKE 运算符(或否定版本,即 NOT LIKE)的不同方式。
我们还讨论了支持的通配符,即 _ 和 %,以及如果它们需要成为要搜索/匹配的字符串的一部分,它们如何被转义。
LIKE 运算符是 MySQL 提供的强大功能,一般用于在查询大量数据时过滤记录。
边栏推荐
- IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
- 织梦自定义表单添加全选和全不选功能按钮
- cache2go-源码阅读
- vulnhub W34kn3ss: 1
- 影响PoE供电传输距离的除了网线还有啥?
- 究极异常处理逻辑——多层次异常的处理顺序
- What is the difference between erp system and wms system
- Navicat 连接Oracle时提示oracle library is not loaded的问题解决
- 如何应对机器身份带来的安全风险
- Go 语言快速入门指南:第二篇 变量与常量
猜你喜欢

cache2go-源码阅读

Simulink脚本自动创建Autosar Parameter Port及Mapping

腾讯架构师是如何解释:Redis高性能通信的原理(精华版)

Code Inspection for DevOps

NeRF: The Secret of 3D Reconstruction Technology in the Popular Scientific Research Circle

The days of patching are more difficult than the days of writing code

有关代购系统搭建的那点事

发挥云网融合优势,天翼云为政企铺设数字化转型跑道

LeetCode 1947. 最大兼容性评分和(状态枚举DP)

一文看懂推荐系统:概要01:推荐系统的基本概念
随机推荐
golang刷leetcode 经典(4) 实现跳表
攻防世界-favorite_number
新特性解读 | MySQL 8.0 GIPK 不可见主键
判断文件属主
What is the difference between erp system and wms system
How to ensure the security of smart factories?
Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
详细教学——1688关键词搜索API操作流程
灵动微电子发布低功耗 MM32L0130 系列 MCU 产品
My recursive never burst stack
在线文档Sheet技术解析
golang源码分析(33)pollFD
KunlunBase 1.0 发布了!
redis总结_基础
redis summary_distributed cache
如何确保智能工厂的安全?
cpolar应用实例之多设备数据采集
IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
百问百答第49期:极客有约——国内可观测领域SaaS产品的发展前景
有关代购系统搭建的那点事