[Mysql] LIKE与通配符

练习案例数据

DROP TABLE IF EXISTS contact_info; 
CREATE TABLE contact_info( 
employee_id VARCHAR(8), 
employee_name VARCHAR(8), 
email VARCHAR(32) 
) 
ENGINE = InnoDB 
DEFAULT CHARSET = utf8; 
INSERT INTO 
contact_info (employee_id,employee_name,email) 
VALUE ('e001','小王','12345@qq.com') 
,('e002','张杰','88888@163.com') 
,('e003','王菲菲','wangfeifei@163.com') 
,('e004','李云','liyun001@qq.com')
,('e005','小王王','67891@qq.com');

contact_info表(员工联系方式表)

employee_id:员工号   employee_name:员工姓名   email:个人邮箱


在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符(通配符是用来匹配值的一部分的特殊字符)

为在搜索子句中使用通配符,必须与LIKE操作符一起使用

可使用以下通配符:

通配符描述
百分号(%)替代0个、1个或多个字符
下划线(_)仅替代一个字符

使用通配符要记住的技巧:

1.不要过度使用通配符

如果其他操作符能达到相同的目的,应该使用其他操作符

2.在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处

把通配符置于搜索模式的开始处,搜索起来是最慢的

3.仔细注意通配符的位置

如果放错地方,可能不会返回想要的数据

1.百分号(%)通配符

查询时表示在该位置可以是任意个(0 - n 个)任意字符,必须和LIKE操作符一起使用

注意NULL 

虽然%通配符可以匹配任何东西,但有一个例外,即NULL

即使是WHERE 字段名 LIKE '%'也不能匹配用值NULL作为该字段名的行

案例1:查询使用163邮箱的员工信息

SELECT * FROM contact_info WHERE email LIKE'%@163.com';

结果展示:

案例2:查询个人邮箱中包含"8"这个数字的员工信息

SELECT * FROM contact_info WHERE email LIKE'%8%';

结果展示:

"%8%"这种写法代表8可以出现在个人邮箱的任何位置,即个人邮箱中包含8

案例3: 查询姓"王"的员工信息

SELECT * FROM contact_info WHERE employee_name LIKE'王%';

结果展示:

2.下划线(_)通配符

查询时表示在该位置有且只有一个字符,字符的内容不限,必须和LIKE操作符一起使用

下划线(_)的用途与%一样,但下划线只匹配单个字符而不是多个字符

与%能匹配0个字符不一样,_总是匹配一个字符,不能多也不能少

案例1:查询姓"张"且姓名为两个字的员工信息

SELECT * FROM contact_info WHERE employee_name LIKE'张_';

结果展示:

案例2:查询姓"王"且姓名为三个字的员工信息

SELECT * FROM contact_info WHERE employee_name LIKE'王__';

结果展示:

使用两个下划线"__"匹配两个字符

案例3:查询名字中第二个字是"王"并且名字一共是两个字的学生信息

SELECT * FROM contact_info WHERE employee_name LIKE'_王';

结果展示:

3.扩展练习案例

导入数据

DROP TABLE IF EXISTS `world`;
CREATE TABLE `world`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `country` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `capital` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `world` VALUES (1, 'China', 'Beijing');
INSERT INTO `world` VALUES (2, 'Singapore', 'Singapore City');
INSERT INTO `world` VALUES (3, 'Germany', 'Berlin');
INSERT INTO `world` VALUES (4, 'Canada', 'Ottawa');
INSERT INTO `world` VALUES (5, 'Mexico', 'Mexico City');
INSERT INTO `world` VALUES (6, 'New Zealand', 'Wellington');
INSERT INTO `world` VALUES (7, 'Yemen', 'Sana\'a');
INSERT INTO `world` VALUES (8, 'Luxembourg ', 'Luxembourg');
INSERT INTO `world` VALUES (9, 'Monaco', 'Monaco-Ville');
INSERT INTO `world` VALUES (10, 'Italy', 'Rome');

world表(部分国家名与首都表)

country:国名   capital:首都

1.找出以Y为开头的国家信息

SELECT country, capital
FROM world
WHERE country LIKE'Y%';

结果展示:

2.找出以Y为结尾的国家信息

SELECT country, capital
FROM world
WHERE country LIKE'%Y';

结果展示:

注意:"%Y"、"%y" 查询的结果都一样,说明LIKE模糊查询不区分大小写

3.找出上述所有国家信息,其国家名包括字母x

SELECT country, capital
FROM world
WHERE country LIKE'%x%';

结果展示:

4.找出上述所有国家信息,其国家名以land作结尾

SELECT country, capital
FROM world
WHERE country LIKE'%land';

结果展示:

5.找出上述所有国家信息,其国家名以C开头,na结尾

SELECT country, capital
FROM world
WHERE country LIKE'C%na';

结果展示:

6.找出上述所有国家信息,其首都名包括字母tt

SELECT country, capital
FROM world
WHERE capital LIKE'%tt%';

结果展示:

7*.找出上述所有国家信息,其国家名包括三个或以上的a

SELECT country, capital
FROM world
WHERE country LIKE'%a%a%a%';

结果展示:

8.找出上述所有国家信息,其国家名以t作第二个字母

SELECT country, capital 
FROM world 
WHERE country LIKE '_t%';

结果展示:

9.找出上述所有国家信息,其国家名都有两个字母o,被另外三个字母相隔着

SELECT country, capital 
FROM world 
WHERE country LIKE '%o___o%';

结果展示:

10.找出上述所有国家信息,其首都名都是由4个字母组成

SELECT country, capital 
FROM world 
WHERE capital LIKE '____';

结果展示:

11.找出上述所有国家信息,其首都和国家名字是相同的

SELECT country, capital 
FROM world 
WHERE country = capital;

结果展示:

12*.找出上述所有国家信息,其首都是国家名字加上"City"

SELECT country, capital 
FROM world 
WHERE capital = CONCAT(country,' City');

结果展示:

13*.找出上述所有国家信息,首都要有国家的名字出现

SELECT country, capital 
FROM world 
WHERE capital LIKE CONCAT('%',country,'%');

结果展示:

14*.找出上述所有国家信息,首都是国家名字的延伸,例如你应显示Mexico City,因它比其国家名字Mexico长;你不应显示Luxembourg,因它的首都和国家名字是相同的

SELECT country, capital 
FROM world 
WHERE capital LIKE CONCAT('%',country,'%') AND capital != country;

结果展示:

15*.首都名"Monaco-Ville"由国家名字"Monaco"和延伸词"-Ville"组合而成,如首都是国家名字的延伸,显示国家名字,及其延伸词

SELECT country,REPLACE(capital,country, '')AS '延伸词'
FROM world 
WHERE capital LIKE CONCAT('%',country,'%') AND REPLACE(capital,country, '') != '';

结果展示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值