一天一篇mysql之十六:mysql中的like
MySQL LIKE 语法
LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容,语法如下:
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
在 LIKE 前面加上 NOT 运算符时,表示与 LIKE 相反的意思,即选择 column 不包含 pattern 的数据记录。
LIKE 通常与通配符 % 一起使用,% 表示通配 pattern 中未出现的内容。而不加通配符 % 的 LIKE 语法,表示精确匹配,其实际效果等同于 = 等于运算符。
栗子,首先建一个表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for actor
-- ----------------------------
DROP TABLE IF EXISTS `actor`;
CREATE TABLE `actor` (
`actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(45) NOT NULL,
`last_name` varchar(45) NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`actor_id`),
KEY `idx_actor_last_name` (`last_name`)
) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8;
随便插几条数据
INSERT INTO `sakila`.`actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES ('1', 'PENELOpE', 'GUINESS', '2018-09-17 21:51:06');
INSERT INTO `sakila`.`actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES ('54', 'PENELOPE', 'PINKETT', '2006-02-15 04:34:33');
INSERT INTO `sakila`.`actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES ('104', 'PENELOpE', 'CRONYN', '2018-09-17 21:51:14');
INSERT INTO `sakila`.`actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES ('120', 'PENELOPE', 'MONROE', '2006-02-15 04:34:33');
下面执行以下sql
SELECT * FROM actor a WHERE a.first_name LIKE "%P%p%";
得到结果
由图可以分析出这个模糊查询成功,并且发现到并不区分大小写,如果区分大小写?
先把字段中的一些值改为小写,然后在like后面拼接上binary
Sql的like语句中的通配符:百分号、下划线和escape
%:表示任意个或多个字符。可匹配任意类型和长度的字符。
Sql代码
select * from user where username like '%huxiao';
select * from user where username like 'huxiao%';
select * from user where username like '%huxiao%';
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%猫%’
若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%猫%’
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)
Sql代码
select * from user where username like '_';
select * from user where username like 'huxia_';
select * from user where username like 'h_xiao';
如果我就真的要查%或者_,怎么办呢?使用escape,转义字符后面的%或_就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用
Sql代码
select username from gg_user where username like '%xiao/_%' escape '/';
推荐阅读
-
mysql进阶讲解之数据表中带OR的多条件查询
-
MySQL中关于ORDERBY、DISTINCT、ALTER、LIKE/NOTLIKE、REGEXP/NOTREGEXP、COUNT、MAX的使用介绍
-
史上最简单的MySQL数据备份与还原教程(中)(三十六)
-
MySQL多表联查之ThinkPHP中的实现
-
python中的mysql数据库LIKE操作符详解
-
MySQL中, 如何查询某一天, 某一月, 某一年的数据
-
关于MySQL中的 like操作符详情
-
mysql中FIND_IN_SET的应用(判断某字符串是否在带逗号的字符串之_MySQL
-
mysql中获取一天、一周、一月时间数据的各种sql语句写法_MySQL
-
MYSQL中取当前年份的第一天和当前周,月,季度的第一天/最后一天_MySQL