sql通配符(大量查找搜索索引)

SQL 通配符可以理解成数据库里的 "万能钥匙" 或 "模糊匹配的小工具" ,专门用来在查询时做模糊搜索,搭配 LIKE 关键字使用,能代替一个或多个字符,解决 "记不清完整内容,只想找相似数据" 的问题。

下面用最通俗的话,讲清楚常用的通配符和用法,还会配生活中的例子类比:

一、最常用的两个核心通配符

1. %:匹配任意数量的任意字符(包括 0 个)大量搜索

可以把它想象成 "输入法的 * 号",比如搜 "苹 %",就会出来苹果、苹果手机、平安果等所有以 "苹" 开头的内容。

举 SQL 例子

假设你有一张用户表(user),里面有姓名(name)字段,想找所有姓 "张" 的用户:

复制代码

SELECT * FROM user WHERE name LIKE '张%';

  • 匹配结果:张三、张三丰、张无忌、张(单字名)都能被找到。

再比如,想找姓名里包含 "小" 字的用户:

复制代码

SELECT * FROM user WHERE name LIKE '%小%';

  • 匹配结果:小李、张小胖、王二小都能被找到。
2. _:匹配一个且仅一个任意字符 单一搜索

这个是 "严格的单字占位符",只能替一个字,多了少了都不行。

举 SQL 例子

想找姓名是 "张"+ 一个字的用户(比如张三、张四,排除张三丰):

复制代码

SELECT * FROM user WHERE name LIKE '张_';

  • 匹配结果:只有 "张三""张五" 这种两个字的张姓用户,三个字的 "张三丰" 会被排除。

再比如,想找名字是 3 个字,且中间是 "小" 的用户:

复制代码

SELECT * FROM user WHERE name LIKE '_小_';

  • 匹配结果:李小龙、王小花、张小胖都能被找到,而 "小敏"(两个字)、"李大小花"(四个字)会被排除。

下面的 SQL 语句选取 name 以 "G" 开始,然后是一个任意字符,然后是 "o",然后是一个任意字符,然后是 "le" 的所有网站:

SELECT * FROM Websites

WHERE name LIKE 'G_o_le';

二、其他常见通配符(依数据库类型略有差异)

这些是 "细分场景的工具",不同数据库(比如 MySQL、SQL Server)支持度不同,最常用的是 MySQL 的\[\]和\^

1. \[\]:匹配括号里的任意一个字符

相当于 "选择题",只能选括号里的某一个字。

例子(MySQL/SQL Server)

想找姓 "张",第二个字是 "三" 或 "五" 的用户:

复制代码

SELECT * FROM user WHERE name LIKE '张[三五]';

  • 匹配结果:张三、张五会被找到,张四、张三丰被排除。
2. \^(MySQL)/ !(SQL Server):匹配不在括号里的任意一个字符

和\[\]相反,是 "排除法"。

例子(MySQL)

想找姓 "张",第二个字不是 "三" 的两个字用户:

SELECT * FROM user WHERE name LIKE '张[^三]';

  • 匹配结果:张四、张五会被找到,张三被排除。

下面的 SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站:

SELECT * FROM Websites

WHERE name REGEXP '^GFs';

下面的 SQL 语句选取 name 以 A 到 H 字母开头的网站:

SELECT * FROM Websites

WHERE name REGEXP '^A-H';

下面的 SQL 语句选取 name 不以 A 到 H 字母开头的网站:

SELECT * FROM Websites

WHERE name REGEXP '^\^A-H';

三、关键提醒

  1. 通配符必须和 LIKE 关键字搭配用,不能单独用;
  1. % 能匹配 0 个字符,所以'张%'能匹配单字名 "张",而'张_'不行;
  1. 如果想匹配通配符本身(比如数据里真的有 % 或_),需要加转义符(比如 MySQL 用\,写成\%或\_)

总结一下:%是 "多字通配",_是 "单字通配",\[\]是 "指定范围通配",用它们就能轻松实现模糊查询,不用死记完整的字段内容啦。

相关推荐
TDengine (老段)17 分钟前
TDengine 扫描算子 — TableScan、TagScan 与下推优化
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
放下华子我只抽RuiKe524 分钟前
FastAPI 全栈后端(三):数据库与 ORM
前端·数据库·react.js·oracle·性能优化·前端框架·fastapi
BAGAE1 小时前
星链卫星数据获取:从太空安全到实时通信的技术革命
网络·数据结构·数据库·算法·云计算·hbase
zh_xuan1 小时前
Android导出并查看数据库
数据库·sqlite
小短腿的代码世界1 小时前
Qt定时器高精度架构:从QTimer源码到纳秒级定时调度
数据库·qt·架构
herinspace1 小时前
管家婆辉煌软件如何新增往来单位档案分类
服务器·数据库·电脑·管家婆软件
程序猿乐锅1 小时前
【MySQL | 第九篇】MySQL 存储过程
数据库·mysql
栗子~~1 小时前
金融场景下BigDecimal 运算规范 + 常用场景使用 + 数据库字段设计详解
java·数据库·金融
他们叫我技术总监2 小时前
Kettle(PDI)连接TDengine数据库实战:一个有趣的小现象
大数据·数据库·tdengine
SilentSamsara2 小时前
RAG 系统入门:LangChain/LlamaIndex + Chroma 向量数据库的检索增强实战
数据库·人工智能·python·青少年编程·langchain