赞
赏
前面的教程中,我们了解到,想要根据条件查询的时候,是必须知道对应的字段的具体条件才能够过滤出数据。但是如果我们只知道一个字段的部分条件,这个时候该怎么办呢?
在 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 '%亮%';
运行结果如下
% 通配符,它可以代表搜索模式中给定位置的 0 个,1个或者多个字符。例子中的 ‘%亮%’ 表示查找名字中含有亮这个字的记录。它可以以亮开头,也可以名字中间包行亮,或者以亮结尾。
SELECT * FROM student WHERE stu_name LIKE '亮%';
运行结果如下
上面的例子表示查询以名字为亮开头的学生信息,亮后面的 % 表示不限个数和不限字符的意思。如果 % 放在亮前面,那么就是表示查询名字的最后一个字是亮的名字。运行结果如下
_通配符
SELECT * FROM student WHERE stu_name LIKE '_亮';
运行结果如下
_ 与 % 不同之处在于,_ 它只能代替一个字符,它可以放在 like 后面语句的字符的任何位置。它只能表示任意字母的一次。
Mysql通配符过滤总结
%
通配符,表示任何多字符出现任意次数。它可以放在字符的任意位置。它虽然看起来可以匹配任意字符,但是不能表示 null。
_
用法与%
类似,但是它只能表示任意字母的一次。它可以放在 like 语句中的字母的任意位置。通配符虽然很方便使用,但是它的性能比较差,查询比一般的查询耗费的时间更长,所以在正式环境中,如果其它操作符能够达到相同的目的,应该使用其它操作符。