一天一篇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 '/';   

  

猜你喜欢

转载自blog.csdn.net/weixin_39666581/article/details/82696139
今日推荐