MySQL 字段包含某个值

介绍
在开发过程中,我们经常需要处理数据库中的数据。而在处理数据时,有时候需要查询数据库中某个字段是否包含某个特定的值。本文将详细介绍在 MySQL 中如何进行字段包含某个值的查询。
准备工作
在开始之前,我们需要先创建一个示例数据库,并添加一些数据用于演示。假设我们有一个名为 mydatabase 的数据库,里面包含一张名为 users 的表,表结构如下:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
hobbies VARCHAR(100)
);
INSERT INTO users (name, hobbies) VALUES
('Alice', 'swimming,singing,drawing'),
('Bob', 'reading,cooking'),
('Charlie', 'swimming,cooking'),
('David', 'reading,drawing,gaming'),
('Eve', 'hiking,gaming');
上述代码创建了一个名为 users 的表,该表包含了 name 和 hobbies 两个字段。接下来我们将使用这个示例数据库进行演示。
通配符查询
在 MySQL 中,我们可以使用通配符进行字段包含某个值的查询。MySQL 中常用的通配符有 % 和 _。
%:表示零个或多个字符。_:表示一个字符。
接下来,我们将以 users 表中的 hobbies 字段为例,演示如何使用通配符进行查询。
查询包含某个值的记录
假设我们想要查询所有包含 swimming 这个爱好的用户,可以使用如下 SQL 语句:
SELECT * FROM users WHERE hobbies LIKE '%swimming%';
上述 SQL 语句中,LIKE 是用于模糊匹配的操作符,%swimming% 表示包含 swimming 的字符串。
运行以上 SQL 语句后,将返回以下结果:
+----+--------+---------------------+
| id | name | hobbies |
+----+--------+---------------------+
| 1 | Alice | swimming,singing,drawing |
| 3 | Charlie| swimming,cooking |
+----+--------+---------------------+
可以看到,返回了包含 swimming 爱好的用户信息。
查询以某个值开头或结尾的记录
除了查询包含某个值的记录,有时候我们还需要查询以某个值开头或结尾的记录。以查询以 reading 开头的用户为例,SQL 语句如下:
SELECT * FROM users WHERE hobbies LIKE 'reading%';
运行以上 SQL 语句后,将返回以下结果:
+----+-------+-------------------+
| id | name | hobbies |
+----+-------+-------------------+
| 2 | Bob | reading,cooking |
| 4 | David | reading,drawing |
+----+-------+-------------------+
可以看到,返回了以 reading 开头的用户信息。
同理,查询以某个值结尾的记录,SQL 语句如下:
SELECT * FROM users WHERE hobbies LIKE '%gaming';
运行以上 SQL 语句后,将返回以下结果:
+----+-------+---------------------------+
| id | name | hobbies |
+----+-------+---------------------------+
| 4 | David | reading,drawing,gaming |
| 5 | Eve | hiking,gaming |
+----+-------+---------------------------+
可以看到,返回了以 gaming 结尾的用户信息。
查询包含某个范围的记录
除了使用 % 和 _ 来匹配零个或多个字符,我们还可以使用 [] 来匹配指定范围的字符。例如,查询包含数字 0 到 9 的记录,SQL 语句如下:
SELECT * FROM users WHERE hobbies LIKE '%[0-9]%';
运行以上 SQL 语句后,将返回以下结果:
+----+------+- ----------------------+
| id | name | hobbies |
+----+-------+-----------------------+
| 4 | David | reading,drawing,gaming |
+----+-------+-----------------------+
可以看到,返回了包含数字的用户信息。
正则表达式查询
在 MySQL 中,我们还可以使用正则表达式进行字段包含某个值的查询。MySQL 提供了 REGEXP 和 RLIKE 两个操作符用于正则表达式匹配。
接下来,我们将以 users 表中的 hobbies 字段为例,演示如何使用正则表达式进行查询。
查询包含某个值的记录
假设我们想要查询所有包含 swimming 或 cooking 这两个爱好其中之一的用户,可以使用如下 SQL 语句:
SELECT * FROM users WHERE hobbies REGEXP '(swimming|cooking)';
上述 SQL 语句中,REGEXP 是用于正则表达式匹配的操作符,(swimming|cooking) 表示匹配 swimming 或 cooking。
运行以上 SQL 语句后,将返回以下结果:
+----+--------+---------------------------+
| id | name | hobbies |
+----+--------+---------------------------+
| 1 | Alice | swimming,singing,drawing |
| 2 | Bob | reading,cooking |
| 3 | Charlie| swimming,cooking |
| 4 | David | reading,drawing,gaming |
+----+--------+---------------------------+
可以看到,返回了包含 swimming 或 cooking 这两个爱好其中之一的用户信息。
查询以某个值开头或结尾的记录
除了查询以某个值开头或结尾的记录,有时候我们还需要查询两个值之间的记录。以查询以 read 开头并以 drawing 结尾的用户为例,SQL 语句如下:
SELECT * FROM users WHERE hobbies REGEXP '^read.*drawing$';
运行以上 SQL 语句后,将返回以下结果:
+----+------+------------------+
| id | name | hobbies |
+----+------+------------------+
| 4 | David| reading,drawing |
+----+------+------------------+
可以看到,返回了以 read 开头并以 drawing 结尾的用户信息。
查询包含某个范围的记录
除了使用 | 来匹配多个可能的值,我们还可以使用简写形式的正则表达式来匹配某个范围的字符。例如,查询包含数字 0 到 9 的记录,SQL 语句如下:
SELECT * FROM users WHERE hobbies REGEXP '[0-9]';
极客笔记