嗨客网搜索
数据库教程
Mysql通配符过滤

Mysql通配符过滤教程

前面的教程中,我们了解到,想要根据条件查询的时候,是必须知道对应的字段的具体条件才能够过滤出数据。但是如果我们只知道一个字段的部分条件,这个时候该怎么办呢?

在 SQL 语句中可以使用 like 关键字进行查询。它后面跟着一些通配符语句。

本章节,我们用 student 表来做例子,它的建表 sql 如下

CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stu_no` int(11) DEFAULT NULL, `stu_name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 插入语句 INSERT INTO student (`id`,`stu_no`,`stu_name`,`age`) VALUES (1,1001,'小明',17), (2,1002,'红红',16), (3,1003,'小军',18), (4,1004,'小亮',19), (5,1005,'亮亮',19), (6,1006,'小杰',16), (7,1007,'小亮',20), (8,1008,'无年龄',null), (9,1009,'欧阳亮亮',19);

通配符详解

语法

select 列名1,列名2... from 表名 where 列名 like 通配符语句;

描述

通配符这边和之前文章中讲到到查询语句差不多,只不过多了一个通配符,通配符语句也要使用在 where 语句 后面,通配符有 % 通配符,_ 通配符和 [] 通配符。

  • % 通配符,表示任何多字符出现任意次数。
  • _ 通配符,表示任何单字符出现单个次数。

案例

%通配符

SELECT * FROM student WHERE stu_name LIKE '%亮%';

运行结果如下

21 通配符查询.png

% 通配符,它可以代表搜索模式中给定位置的 0 个,1个或者多个字符。例子中的 ‘%亮%’ 表示查找名字中含有亮这个字的记录。它可以以亮开头,也可以名字中间包行亮,或者以亮结尾。

SELECT * FROM student WHERE stu_name LIKE '亮%';

运行结果如下

22 通配符查询2.png

上面的例子表示查询以名字为亮开头的学生信息,亮后面的 % 表示不限个数和不限字符的意思。如果 % 放在亮前面,那么就是表示查询名字的最后一个字是亮的名字。运行结果如下

23 通配符查询3.png

_通配符

SELECT * FROM student WHERE stu_name LIKE '_亮';

运行结果如下

24 _通配符查询.png

_ 与 % 不同之处在于,_ 它只能代替一个字符,它可以放在 like 后面语句的字符的任何位置。它只能表示任意字母的一次。

Mysql通配符过滤总结

% 通配符,表示任何多字符出现任意次数。它可以放在字符的任意位置。它虽然看起来可以匹配任意字符,但是不能表示 null。

_ 用法与 % 类似,但是它只能表示任意字母的一次。它可以放在 like 语句中的字母的任意位置。

通配符虽然很方便使用,但是它的性能比较差,查询比一般的查询耗费的时间更长,所以在正式环境中,如果其它操作符能够达到相同的目的,应该使用其它操作符。

嗨客网顶部