1. 什么是匹配运算符
1.1 匹配运算符的概念
匹配运算符用于在文本数据中查找特定模式
主要应用于字符串类型的字段查询
可以实现模糊查询、模式匹配等功能
1.2 常用的匹配运算符
LIKE:基本模式匹配
NOT LIKE:模式不匹配
REGEXP:正则表达式匹配
RLIKE:REGEXP的别名
2. LIKE 运算符
2.1 基本语法
SELECT * FROM 表名
WHERE 列名 LIKE '模式字符串';
2.2 通配符介绍
2.3 创建示例表
-- 创建学生信息表
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
phone VARCHAR(20),
email VARCHAR(100),
address VARCHAR(200)
);
-- 插入示例数据
INSERT INTO students VALUES
(1, '张三', '13800138000', 'zhangsan@qq.com', '北京市朝阳区'),
(2, '李四', '13900139000', 'lisi@gmail.com', '上海市浦东新区'),
(3, '王小五', '13600136000', 'wangxiaowu@163.com', '广州市天河区'),
(4, '赵六六', '13700137000', 'zhaoliuliu@qq.com', '深圳市南山区'),
(5, '孙七', '13500135000', 'sunqi@163.com', '北京市海淀区'),
(6, '周八', '13400134000', 'zhouba@gmail.com', '杭州市西湖区');
3. LIKE 运算符实战
3.1 % 通配符使用
示例1:查找所有姓张的学生
SELECT * FROM students
WHERE name LIKE '张%';
示例2:查找QQ邮箱的学生
SELECT * FROM students
WHERE email LIKE '%@qq.com';
示例3:查找名字中包含"小"的学生
SELECT * FROM students
WHERE name LIKE '%小%';
示例4:查找以"区"结尾的地址
SELECT * FROM students
WHERE address LIKE '%区';
3.2 _ 通配符使用
示例5:查找姓李且名字为两个字的学生
SELECT * FROM students
WHERE name LIKE '李_';
示例6:查找名字为三个字且第二个字是"小"的学生
SELECT * FROM students
WHERE name LIKE '_小_';
示例7:查找手机号以136开头的学生
SELECT * FROM students
WHERE phone LIKE '136%';
4. NOT LIKE 运算符
4.1 基本语法
SELECT * FROM 表名
WHERE 列名 NOT LIKE '模式字符串';
4.2 使用示例
示例1:查找不使用QQ邮箱的学生
SELECT * FROM students
WHERE email NOT LIKE '%@qq.com';
示例2:查找名字不包含"小"的学生
SELECT * FROM students
WHERE name NOT LIKE '%小%';
示例3:查找地址不是北京市的学生
SELECT * FROM students
WHERE address NOT LIKE '北京市%';
5. REGEXP 正则表达式匹配
5.1 基本语法
SELECT * FROM 表名
WHERE 列名 REGEXP '正则表达式';
5.2 常用正则表达式元字符
5.3 REGEXP 使用示例
示例1:查找姓张或姓李的学生
SELECT * FROM students
WHERE name REGEXP '^[张李]';
示例2:查找gmail或163邮箱的学生
SELECT * FROM students
WHERE email REGEXP '@(gmail|163)\\.com$';
示例3:查找名字为三个字的学生
SELECT * FROM students
WHERE name REGEXP '^.{3}$';
示例4:验证手机号格式(11位数字)
SELECT * FROM students
WHERE phone REGEXP '^1[3-9][0-9]{9}$';
6. 综合实战练习
6.1 创建商品表
CREATE TABLE products (
id INT PRIMARY KEY,
product_code VARCHAR(20),
product_name VARCHAR(100),
category VARCHAR(50),
description TEXT
);
INSERT INTO products VALUES
(1, 'PH-001', 'iPhone 14 Pro', '手机', '苹果最新款智能手机'),
(2, 'PH-002', '华为Mate 50', '手机', '华为旗舰手机'),
(3, 'NB-001', '联想ThinkPad', '笔记本电脑', '商务办公笔记本电脑'),
(4, 'AC-001', '美的空调', '家用电器', '智能变频空调'),
(5, 'PH-003', '小米13', '手机', '小米年度旗舰'),
(6, 'NB-002', 'MacBook Pro', '笔记本电脑', '苹果专业笔记本');
6.2 综合查询练习
练习1:查找所有手机类商品
SELECT * FROM products
WHERE category LIKE '%手机%';
练习2:查找商品代码以PH开头的商品
SELECT * FROM products
WHERE product_code LIKE 'PH%';
练习3:查找商品名称包含"Pro"的商品
SELECT * FROM products
WHERE product_name LIKE '%Pro%';
练习4:使用正则表达式查找手机或笔记本电脑
SELECT * FROM products
WHERE category REGEXP '手机|笔记本';
练习5:查找商品代码格式为"XX-001"的商品
SELECT * FROM products
WHERE product_code REGEXP '^[A-Z]{2}-001$';
7. 匹配运算符组合使用
7.1 多个LIKE条件组合
-- 查找姓张或姓李,且使用QQ邮箱的学生
SELECT * FROM students
WHERE (name LIKE '张%' OR name LIKE '李%')
AND email LIKE '%@qq.com';
8. 性能优化与注意事项
8.1 性能考虑
-- 不推荐:通配符开头导致全表扫描
SELECT * FROM students WHERE name LIKE '%小%';
-- 推荐:通配符在末尾可以使用索引
SELECT * FROM students WHERE name LIKE '张%';
8.2 转义特殊字符
-- 如果要查找包含%或_的记录,需要转义
SELECT * FROM products
WHERE description LIKE '%30\%%' ESCAPE '\\';
8.3 大小写敏感性
-- MySQL默认不区分大小写,如需区分:
SELECT * FROM students
WHERE name LIKE BINARY 'Zhang%';
🎯 本章重点总结
💡 通配符总结
%
:匹配0个或多个字符_
:匹配1个字符
📝 课后作业
创建员工表,包含姓名、工号、部门、邮箱等字段
使用LIKE查询所有姓"王"的员工
使用REGEXP查询邮箱为公司域名的员工
组合使用匹配运算符进行复杂查询