SQL 模糊查询 + NULL 空值。LIKE 通配符 % 和_、IS NULL

前言

学会精准条件查询后,工作中又会遇到新难题:

  • 需要按关键词模糊搜索 ,比如搜姓张、名字带 "明" 的用户,不会写 LIKE
  • 分不清 %_ 两个通配符到底有什么区别,经常用错;
  • 数据表有空值 NULL ,用普通=查不到,数据统计总是少一部分;
  • 分不清 NULL 空值空字符串 '',筛选结果一直出错;
  • 面试常考:模糊查询原理、通配符含义、NULL 为什么不能用等于判断。

本篇专门攻克LIKE 模糊查询、两大通配符、空值 IS NULL 判断,大白话讲解 + 完整案例 + 避坑指南,学完搞定所有模糊搜索和空值筛选场景。

知识点

一、什么是 LIKE 模糊查询

LIKE 专门用于字符串模糊匹配,搭配通配符使用,放在 WHERE 后面。 适用场景:搜索姓名、昵称、地址、商品名称、备注含某个关键字。 语法格式:

sql

复制代码
SELECT 字段列表 
FROM 表名
WHERE 字段 LIKE '匹配规则';

二、两大核心通配符

  1. % 百分号 代表任意 0 个或多个字符,可以匹配任意长度内容。
  2. _ 下划线 代表任意 1 个字符,只能匹配单个字符占位。

三、LIKE 四种常用匹配场景

  1. '张%':以开头
  2. '%明':以结尾
  3. '%华%'中间包含华字
  4. '李_':李后面跟任意一个字

四、空值核心知识点

  1. NULL:未赋值、未知空值;
  2. '' 空字符串:有值,只是内容为空;
  3. 绝对不能用 = NULL、!= NULL
  4. 空值专用判断:
  • IS NULL:判断是否为空
  • IS NOT NULL:判断是否不为空

通俗类比 + 实例表格

通俗类比

  • %万能补丁,能代替任意多字;
  • _单个空位,只能填一个字;
  • IS NULL 就是空白没填写
  • 空字符串 ''填了但写了个空

演示数据表:user 用户表

表格

id name age city email
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 = '';

易错 / 避坑点

  1. ❌ 混淆 % 和 _ ✅ % 匹配任意多个字符;_ 只匹配单个字符。

  2. ❌ 模糊查询不加单引号 ✅ 字符串模糊匹配规则必须加单引号

  3. ❌ 用 WHERE email = NULL 查空值 ✅ 永远无效,必须用 IS NULL

  4. ❌ 把 NULL 和 空字符串 '' 当成一样 ✅ NULL 是未赋值 ;'' 是有值为空,统计、筛选结果完全不同。

  5. ❌ 大表随意用前后模糊 %关键词% ✅ 会索引失效,查询变慢,生产尽量避免首尾都加 %。

核心小结

  1. LIKE 实现字符串模糊查询,搭配 % 和 _ 两个通配符;
  2. % 匹配任意多个字符,_ 只匹配单个字符;
  3. 四种常用模糊:开头匹配、结尾匹配、包含匹配、固定长度匹配;
  4. NULL 空值 只能用 IS NULL / IS NOT NULL 判断;
  5. 空字符串 '' 用 = '' 判断,和 NULL 不是一回事;
  6. 大表尽量少用 %关键词% 全模糊,容易造成索引失效、慢查询。

思考题

思考题 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;
相关推荐
雨辰AI2 小时前
信创数仓分层建模|国产数据库 ODS/DWD/DWS 分层落地规范(金仓 / 达梦 / 高斯适配)
数据库·云原生·政务
风哥2号2 小时前
MySQL8.x/9.x数据库安装自动化全过程-Fgedu
数据库·mysql自动化安装
疯狂打码的少年2 小时前
【数据库技术】SQL数据查询(SELECT基本语法)
数据库·笔记·sql·oracle
程序员黎剑3 小时前
Redis缓存击穿:热点Key过期打崩数据库的3种解决方案
数据库·redis·缓存
Carl_.Net软开3 小时前
NSSM后台启动influx时序数据库
数据库·时序数据库
IPdodo_3 小时前
静态 IP 访问异常排查:403/429 归因与迁移验收
服务器·网络·数据库·python·网络协议·php·性能测试
DevOpenClub3 小时前
PDF 多格式解析如何避免混用输出:TEXT、HTML、XML 与 TAG 数据契约
xml·前端·数据库·pdf·html
meilindehuzi_a3 小时前
从域名到数据库:React + Node.js 项目部署全流程与用户访问链路
数据库·react.js·node.js
泡干脆面就番茄3 小时前
MySQL_流程控制_分组查询与连接查询详解
数据库·mysql
Bode_20024 小时前
全生命周期 SQL 控制
数据库·智能制造