Administrator
发布于 2025-09-12 / 7 阅读
0
0

MySQL第11课:SELECT与匹配运算符

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 常用正则表达式元字符

元字符

作用

示例

^

匹配字符串开始

^张

$

匹配字符串结束

com$

.

匹配任意单个字符

^李.$

[abc]

匹配a、b或c

[张李王]

[a-z]

匹配a到z的字符

[a-z]+

[0-9]

匹配数字

[0-9]{11}

|

或操作

qq|163

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%';

🎯 本章重点总结

运算符

语法

用途

示例

LIKE

LIKE '模式'

基本模式匹配

WHERE name LIKE '张%'

NOT LIKE

NOT LIKE '模式'

模式不匹配

WHERE email NOT LIKE '%qq.com'

💡 通配符总结

  • %:匹配0个或多个字符

  • _:匹配1个字符


📝 课后作业

  1. 创建员工表,包含姓名、工号、部门、邮箱等字段

  2. 使用LIKE查询所有姓"王"的员工

  3. 使用REGEXP查询邮箱为公司域名的员工

  4. 组合使用匹配运算符进行复杂查询


评论