查询语句 like 模糊查询

前言

建表语句在最后

  • like 应该是最常用的查询条件了
  • 必须掌握地!

like 的语法格式

LIKE  '字符串'
NOT LIKE  '字符串'
  • NOT :取反,不满足指定字符串的匹配
  • 字符串:可以是精确的字符串,也可以是包含通配符的字符串
  • LIKE 支持 % 和 _ 两个通配符

确认测试表里有什么数据,方便后面的例子做对比

在这里插入图片描述

% 通配符查询的例子
  • % 应该是最常用的通配符了,它代表任意长度的字符串,包括0
  • 比如:a%b 表示以字母 a 开头,以字母 b 结尾的任意长度的字符串;改字符串可以代表 ab,acb,accb,agdsbd 等字符串
查询 username 包含 ng 的记录
SELECT * FROM test_table WHERE username LIKE '%ng%';

在这里插入图片描述

查询username字段开头不为test且department字段等于aooo的记录
SELECT * FROM test_table WHERE username NOT LIKE 'test%' AND department = 'aooo';

在这里插入图片描述

知识点

匹配的字符串必须加单引号或上引号 LIKE ‘%test%’

_ 通配符查询的例子
  • _ 只能代表单个字符,字符的长度不能等于0,即字符长度必须等于1;相对于 % 来说 - 没那么常用
  • 比如 a_b 可以代表 abb、acb、atb 等字符串

查询username字段test开头且后面只跟一个字符结尾的记录

SELECT * FROM test_table WHERE username LIKE 'test_';

在这里插入图片描述

like 区分大小写的例子
  • 默认情况下,like 匹配的字符串是不区分大小写的;like “test1” 和 like “TEST1” 匹配的结果是一样的
  • 如果需要区分大小写,需要加入 binary 关键字
不会返回任何记录,test1和test2不会被匹配到
select * from yyTest where username like binary "TEST_";
使用转义符的例子
  • 如果查询的字符串包含%,可以使用 \ 转义符
  • 实际场景:搜索功能,搜索框只输入%看是否返回所有记录,如果是的话证明没有做转义可以提个优化项哦!
转义符+通配符联合使用的栗子
SELECT * FROM test_table WHERE username LIKE '%\%';

使用通配符的注意点

  • 注意大小写:不加binary关键字的话,大小写是不敏感的
  • 注意头部、尾部多余的空格: " test% " 是不会匹配到“test1”的
  • 注意NULL:通配符是不能匹配到字段为NULL的记录的
  • 不要过度使用通配符:因为Mysql对通配符的处理速度会比其他操作花费更长的时间
  • 在确定使用通配符后:除非绝对有必要,否则**不要把它们用在字符串的开始处,**把通配符置于搜索模式的开始处,搜索起来是最慢的。
CREATE TABLE `test_table` (
  `id` int(10) NOT NULL,
  `sex` varchar(20) DEFAULT NULL,
  `username` varchar(255) DEFAULT NULL,
  `department` varchar(20) DEFAULT NULL,
  `age` int(10) DEFAULT NULL,
  `height` int(10) DEFAULT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (2, '男', 'lisan', 'aooo', 23, 170, '2021-10-14 19:30:42');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (3, '女', 'wangsi', 'boooo', 14, 185, '2021-10-14 18:52:03');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (4, '男', 'zhangswu', 'cfgg', 21, 180, '2021-10-14 18:52:11');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (5, '女', 'testnamet', 'dfgf', 18, 160, '2021-10-14 19:24:07');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (6, '女', 'guoda', 'gdfg', 13, 165, '2021-10-14 18:52:14');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (7, '男', 'chener', 'aooo', 19, 162, '2021-10-14 18:52:08');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (8, '男', 'test1', 'ddgd', 20, 178, '2021-10-14 19:43:09');
INSERT INTO `test`.`test_table` (`id`, `sex`, `username`, `department`, `age`, `height`, `date`) VALUES (21, '男', 'test2', 'aooo', 18, 175, '2021-10-14 19:43:12');

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐