MySQL模糊查询详解

发布时间:2024年01月04日


💖The Begin💖点点关注,收藏不迷路💖

一、什么是模糊查询

模糊查询是指在数据库中进行的基于模糊条件的数据检索操作。通过模糊查询,我们可以根据模糊的关键字来查找包含该关键字的数据。在实际开发中,模糊查询常常用于处理一些需要模糊匹配的场景,比如搜索引擎、商品搜索等。

二、MySQL中的模糊查询

2.1 使用LIKE关键字

LIKE关键字是MySQL中用于模糊查询的常用关键字。它可以用来匹配包含指定模式的字符串。其基本语法如下:

SELECT * FROM table_name WHERE column_name LIKE 'pattern';

其中,table_name表示表名,column_name表示列名,pattern是要查找的模式。

在LIKE语句中,可以使用通配符来表示模糊匹配的规则,常用的通配符有:

%:表示任意字符,可以是0个、1个或多个字符。
_:表示单个字符。

示例:

SELECT * FROM users WHERE name LIKE 'J%';  -- 匹配以J开头的名字
SELECT * FROM users WHERE name LIKE '%son';  -- 匹配以son结尾的名字
SELECT * FROM users WHERE name LIKE '%mi%';  -- 匹配包含mi的名字
SELECT * FROM users WHERE name LIKE '_ohn';  -- 匹配以ohn结尾的四个字母名字

2.2 使用正则表达式(REGEXP)

MySQL还支持使用正则表达式进行模糊查询。正则表达式是一种用于匹配字符串的强大工具,可以根据特定的规则来匹配和查找符合条件的字符串。

在MySQL中,可以通过使用REGEXP关键字来进行正则表达式的模糊查询。其基本语法如下:

SELECT * FROM table_name WHERE column_name REGEXP 'pattern';

其中,table_name表示表名,column_name表示列名,pattern是要查找的正则表达式。

示例:

1、匹配指定字符集合中的任意字符,查找姓名中包含字符”a”或”o”的记录:

SELECT * FROM users WHERE name REGEXP '[ao]';

2、匹配指定字符集合之外的任意字符,其中,[^abc]表示匹配除了字符集合中的任意字符之外的字符:

SELECT * FROM users WHERE name REGEXP '[^abc]';

3、查询所有以字母"A"开头的用户名:

SELECT * FROM users WHERE name REGEXP '^A';

除了以特定字符开头,正则表达式还可以用于匹配其他模式,例如以特定字符结尾、包含特定字符等。

4、查询以字母"A"结尾的用户名:

SELECT * FROM users WHERE name REGEXP 'A$';

5、查询包含字母"A"的用户名:

SELECT * FROM users WHERE name REGEXP 'A';

6、查询以字母"A"开头且以字母"B"结尾的用户名:

SELECT * FROM users WHERE name REGEXP '^A.*B$';

7、匹配指定范围的字符,其中,[a-z]表示匹配任意小写字母:

SELECT * FROM users WHERE name REGEXP '[a-z]';

这些只是一些常用的MySQL正则表达式示例,更多需要去学习正则表达式。

2.3 使用BETWEEN AND

BETWEEN AND用于查询某个范围内的数据。

其基本语法如下:

SELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;

其中,table_name是要查询的表名,column_name是要查询的列名,value1和value2是范围的起始值和结束值。

示例:

假设我们有一个名为products的表,其中有一个名为price的列,我们想要查询价格在100到200之间的产品。

使用BETWEEN AND操作符,可以这样查询:

SELECT * FROM products WHERE price BETWEEN 100 AND 200;

在上述示例中,price BETWEEN 100 AND 200表示价格在100到200之间的条件,包含(100 AND 200在内)。

注意事项

在使用BETWEEN AND操作符时,需要注意以下几点:

1、起始值和结束值可以是任意数据类型,但它们必须是可比较的。

2、范围是包含边界值的,即起始值和结束值都会被包括在查询结果中。

3、如果要查询不包含边界值的范围,可以使用`>``<`操作符。

如:SELECT * FROM products WHERE price > 100 AND price < 200;

4BETWEEN AND操作符也可以用于日期和时间类型的列。

2.4 使用IN操作符

IN操作符用于查询某个列中包含指定值的数据。其基本语法如下:

SELECT * FROM table_name WHERE column_name IN (value1, value2, ...);

其中,table_name是要查询的表名,column_name是要匹配的列名,value1, value2, …是要匹配的值。

如果不使用IN操作符来查询多个指定值的数据,可以使用OR操作符来实现相同的效果。以下是使用OR操作符改写的示例:

SELECT * FROM table_name WHERE column_name = value1 OR column_name = value2 OR column_name = value3;

在上述示例中,我们使用多个OR操作符来连接多个条件,每个条件都是对column_name进行等于比较。这样就可以查询到与指定值匹配的数据。

当需要查询的值较多时,使用IN操作符会更加简洁和方便。而使用多个OR操作符可能会导致查询语句变得冗长和难以维护。

因此,如果可能的话,建议使用IN操作符来查询多个指定值的数据。

注意事项

在使用IN操作符和模糊查询时,需要注意:

1、对于IN操作符,要确保要匹配的列和值的数据类型一致,否则可能会导致匹配失败。
2IN操作符适用于查询多个离散的值,而BETWEEN AND操作符适用于查询连续的范围值。

2.5 使用IS NULL操作符

IS NULL操作符用于查询空值(NULL)的数据。其基本语法如下:

SELECT * FROM table_name WHERE column_name IS NULL;

示例:

以下是一些关于IS NULL的示例:

1、查询某个列中为空值的数据:

SELECT * FROM table_name WHERE column_name IS NULL;

2、查询某个列中不为空值的数据:

SELECT * FROM table_name WHERE column_name IS NOT NULL;

注意事项:

在使用IS NULL进行查询时,需要注意以下几点:

1IS NULL只能用于查询空值(NULL),不能用于查询空字符串('')或者其他非空值。

2、当某个列允许为空时,可以使用IS NULL来判断该列是否为空。

3、如果某个列不允许为空,使用IS NULL来查询该列将不会返回任何结果。

4、在使用IS NULL进行查询时,需要注意空值(NULL)的特殊性,确保查询条件的准确性。

💖The End💖点点关注,收藏不迷路💖
文章来源:https://blog.csdn.net/qq_41840843/article/details/135395965
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。