SQL 模糊查询 + NULL 空值。LIKE 通配符 % 和_、IS NULL
前言
学会精准条件查询后,工作中又会遇到新难题:
- 需要按关键词模糊搜索,比如搜姓张、名字带 “明” 的用户,不会写
LIKE; - 分不清%和_两个通配符到底有什么区别,经常用错;
- 数据表有空值 NULL,用普通
=查不到,数据统计总是少一部分; - 分不清NULL 空值和空字符串 '',筛选结果一直出错;
- 面试常考:模糊查询原理、通配符含义、NULL 为什么不能用等于判断。
本篇专门攻克LIKE 模糊查询、两大通配符、空值 IS NULL 判断,大白话讲解 + 完整案例 + 避坑指南,学完搞定所有模糊搜索和空值筛选场景。
知识点
一、什么是 LIKE 模糊查询
LIKE专门用于字符串模糊匹配,搭配通配符使用,放在 WHERE 后面。 适用场景:搜索姓名、昵称、地址、商品名称、备注含某个关键字。 语法格式:
sql
SELECT 字段列表 FROM 表名 WHERE 字段 LIKE '匹配规则';二、两大核心通配符
- % 百分号代表任意 0 个或多个字符,可以匹配任意长度内容。
- _ 下划线代表任意 1 个字符,只能匹配单个字符占位。
三、LIKE 四种常用匹配场景
'张%':以张开头'%明':以明结尾'%华%':中间包含华字'李_':李后面跟任意一个字
四、空值核心知识点
- NULL:未赋值、未知空值;
- '' 空字符串:有值,只是内容为空;
- 绝对不能用 = NULL、!= NULL;
- 空值专用判断:
- IS NULL:判断是否为空
- IS NOT NULL:判断是否不为空
通俗类比 + 实例表格
通俗类比
- %像万能补丁,能代替任意多字;
- _像单个空位,只能填一个字;
- IS NULL就是空白没填写;
- 空字符串 ''是填了但写了个空。
演示数据表:user 用户表
表格
| id | name | age | city | |
|---|---|---|---|---|
| 1 | 张三 | 25 | 北京 | zs@qq.com |
| 2 | 张小凡 | 22 | 上海 | NULL |
| 3 | 王五 | 28 | 广州 | wang@qq.com |
| 4 | 李六 | 30 | 北京 | '' |
| 5 | 李明宇 | 35 | 深圳 | lm@qq.com |
SQL 代码演示
1. % 通配符实战
sql
-- 1. 以张开头 SELECT * FROM user WHERE name LIKE '张%'; -- 2. 以宇结尾 SELECT * FROM user WHERE name LIKE '%宇'; -- 3. 名字包含 明 字 SELECT * FROM user WHERE name LIKE '%明%';2. _ 下划线通配符实战
sql
-- 李开头,总共两个字:李X SELECT * FROM user WHERE name LIKE '李_';3. 空值 NULL 查询
sql
-- 查询email为NULL的用户 SELECT * FROM user WHERE email IS NULL; -- 查询email不为NULL的用户 SELECT * FROM user WHERE email IS NOT NULL;4. 空字符串 '' 查询
sql
-- 查询是空字符串的,要用 = '' SELECT * FROM user WHERE email = '';易错 / 避坑点
❌ 混淆 % 和 _ ✅ % 匹配任意多个字符;_ 只匹配单个字符。
❌ 模糊查询不加单引号 ✅ 字符串模糊匹配规则必须加单引号。
❌ 用
WHERE email = NULL查空值 ✅ 永远无效,必须用IS NULL。❌ 把 NULL 和 空字符串 '' 当成一样 ✅ NULL 是未赋值;'' 是有值为空,统计、筛选结果完全不同。
❌ 大表随意用前后模糊
%关键词%✅ 会索引失效,查询变慢,生产尽量避免首尾都加 %。
核心小结
- LIKE实现字符串模糊查询,搭配 % 和 _ 两个通配符;
- %匹配任意多个字符,_只匹配单个字符;
- 四种常用模糊:开头匹配、结尾匹配、包含匹配、固定长度匹配;
- NULL 空值只能用IS NULL / IS NOT NULL判断;
- 空字符串 '' 用
= ''判断,和 NULL 不是一回事; - 大表尽量少用
%关键词%全模糊,容易造成索引失效、慢查询。
思考题
思考题 1
LIKE '王_'和LIKE '王%'有什么区别?
答案:LIKE '王_'匹配王后面刚好 1 个字符;LIKE '王%'匹配王后面任意 0 个或多个字符。
思考题 2
查出名字中包含 “六” 字的所有用户,写出 SQL。
答案:
sql
SELECT * FROM user WHERE name LIKE '%六%';思考题 3
查询 email 为空值 NULL 的用户,正确写法是什么?
答案:
sql
SELECT * FROM user WHERE email IS NULL;