0

0

sql怎样用LIKE进行简单的模糊查询 sql模糊查询的基础语句用法

看不見的法師

看不見的法師

发布时间:2025-08-16 14:05:01

|

624人浏览过

|

来源于php中文网

原创

sql中模糊查询主要依赖like操作符配合通配符%(代表任意长度的任意字符)和\_(代表单个任意字符),用于实现非精确匹配;2. 常见用法包括:'张%'查找以“张”开头的字符串,'%三'查找以“三”结尾的字符串,'%限量版%'查找包含“限量版”的字符串,'\_小\_'查找三个字且中间为“小”的字符串;3. 模糊匹配在用户搜索、数据清洗、报告统计和异常识别中至关重要,能应对输入不规范或数据变体问题;4. 通配符%可匹配零到多个字符,适用于模糊和包含场景,而\_仅匹配一个字符,适用于固定长度或特定位置的精确匹配;5. not like用于排除符合特定模式的记录,常用于排除测试数据、识别格式异常(如邮箱、电话号码)、筛选不包含关键词的内容以及结合escape排除含通配符字面值的数据,提升了数据过滤的灵活性。

sql怎样用LIKE进行简单的模糊查询 sql模糊查询的基础语句用法

SQL中,要进行简单的模糊查询,我们主要依赖

LIKE
操作符。它的核心在于通过模式匹配来筛选字符串数据,而不是进行精确的比对。这就像你在一个杂乱的文档堆里找东西,不记得确切的名字,只记得几个关键词或开头结尾,
LIKE
就是帮你做这件事的工具。它主要配合两个通配符使用:百分号(
%
)代表任意长度(包括零个)的任意字符序列,而下划线(
_
)则代表一个且仅一个任意字符。

SQL模糊查询的基础语句用法,说白了,就是把

LIKE
操作符放到
WHERE
子句后面,然后跟上你想要匹配的模式字符串。这个模式字符串里,通配符就是我们的魔法棒。

最常见的几种用法:

  1. 查找以特定字符开头的记录:如果你想找所有名字以“张”开头的用户,你可以这么写:

    SELECT *
    FROM Users
    WHERE UserName LIKE '张%';

    这里

    '张%'
    的意思是“以‘张’字开头,后面跟着任意数量的任意字符”。

  2. 查找以特定字符结尾的记录:要是你只记得某个名字的最后一个字是“三”,那可以这样:

    SELECT *
    FROM Products
    WHERE ProductName LIKE '%三';

    '%三'
    表示“前面可以是任意数量的任意字符,但必须以‘三’字结尾”。

  3. 查找包含特定字符序列的记录:这是最常用的,比如你想找所有描述里包含“限量版”的产品:

    SELECT *
    FROM Descriptions
    WHERE ProductDescription LIKE '%限量版%';

    '%限量版%'
    意味着“无论前面有什么,后面有什么,只要中间包含‘限量版’就行”。

  4. 查找特定位置的字符:有时候我们对长度有要求,或者知道某个位置的字符是什么。比如,我想找所有名字是三个字,且中间那个字是“小”的:

    SELECT *
    FROM Employees
    WHERE EmployeeName LIKE '_小_';

    '_小_'
    表示“第一个字符是任意一个字符,第二个字符是‘小’,第三个字符是任意一个字符”。这在处理一些固定格式的编码或者特定长度的字段时特别有用。

理解了这几个基础模式,基本上就能应付日常大部分的模糊查询需求了。

为什么在数据查询中模糊匹配如此重要?它能解决哪些实际问题?

在我看来,模糊匹配在数据查询中简直是不可或缺的。想想看,我们的数据世界从来都不是完美无缺的,用户输入可能五花八门,数据录入也难免有疏漏。如果只有精确匹配,那很多时候我们根本就找不到想要的信息。

它能解决的实际问题太多了:

Copy Leaks
Copy Leaks

AI内容检测和分级,帮助创建和保护原创内容

下载
  • 用户搜索体验:当用户在电商网站搜索“手机壳”时,他可能输入“手机壳”、“手机保护套”、“手机套”,甚至“IPHONE壳”。如果只支持精确匹配,那用户体验会非常糟糕。模糊查询能让系统理解用户的意图,即使输入不完全精确也能返回相关结果。
  • 数据清洗与分析:我在处理一些历史数据时,经常遇到“张三”、“张叁”、“张三丰”这样的情况。如果想找出所有“张三”相关的人,精确匹配肯定不行。利用
    LIKE '张三%'
    或者
    LIKE '%张三%'
    ,就能把这些变体都找出来,方便后续的清洗和统一。
  • 报告与统计:需要统计所有“销售部”或“市场部”的员工,但部门名称可能写成“销售部(北京)”、“销售一部”、“市场部-华南区”等。一个
    LIKE '%销售部%' OR LIKE '%市场部%'
    就能轻松搞定。
  • 识别异常或模式:比如,你想找出所有邮箱地址不符合常规格式(比如没有
    @
    符号)的用户,或者所有电话号码不是11位的记录。模糊查询配合
    NOT LIKE
    就能派上用场。

可以说,模糊匹配是让数据“活”起来的关键,它让查询变得更加灵活和智能,适应了现实世界中数据固有的不确定性。

LIKE
操作符中的通配符
%
_
,它们在实际使用中有何异同?

%
_
这两个通配符,虽然都是用来做模式匹配的,但它们的“权力”和“范围”是截然不同的,理解它们的不同,能让你写出更精确、更符合需求的查询语句。

百分号(

%

  • 含义:代表零个、一个或多个任意字符。它的特点是“贪婪”且“灵活”。
  • 何时用
    • 当你只知道字符串的开头或结尾,想匹配所有可能性时(如
      'ABC%'
      '%XYZ'
      )。
    • 当你只知道字符串中包含某个子串,而对子串前后的内容长度不确定时(如
      '%KEYWORD%'
      )。
    • 你甚至可以只用一个
      '%'
      来匹配所有非NULL的字符串,虽然这没什么实际意义,但说明了它的“全能性”。
  • 例子
    • LIKE '王%'
      :能匹配“王”、“王小明”、“王大锤”。
    • LIKE '%手机'
      :能匹配“华为手机”、“我的手机”。
    • LIKE '%苹果%'
      :能匹配“苹果手机”、“我爱吃苹果派”。

下划线(

_

  • 含义:代表一个且仅一个任意字符。它的特点是“精准”且“固定”。
  • 何时用
    • 当你对字符串的长度有严格要求,或者你知道某个位置的字符是任意的,但其他位置是固定的时。
    • 在处理一些编码、序列号或者固定格式的短文本时非常有用。
  • 例子
    • LIKE '张__'
      :只匹配三个字的,且第一个字是“张”的名字,如“张三丰”、“张小明”,但不会匹配“张”或“张大炮”。
    • LIKE 'A_C'
      :只匹配三个字符,开头是A,结尾是C的,如“ABC”、“ADC”、“A9C”。
    • LIKE '_____'
      :匹配任意五个字符的字符串。

异同总结

  • 相同点:都是用于
    LIKE
    操作符的通配符,都匹配任意字符。
  • 不同点
    • %
      匹配零到多个字符,
      _
      匹配一个字符。这是最核心的区别
    • %
      更适合“模糊”和“包含”的场景,
      _
      更适合“固定长度”和“特定位置”的场景。

实际使用中,我通常会根据对匹配精度的要求来选择。如果只是想看看有没有包含某个词,

%
是首选;如果我知道某个字段是固定格式,比如产品编码是
XXX-YYY-ZZZ
,而我只记得
XXX
ZZZ
,那
LIKE 'XXX-%-ZZZ'
可能就更合适,或者如果我知道中间是3个字符,
LIKE 'XXX-___-ZZZ'
则更精确。

NOT LIKE
的用途是什么?何时会用到它?

NOT LIKE
,顾名思义,就是
LIKE
的反面,它用于查找那些不符合指定模式的字符串。这在数据过滤、异常数据识别或者排除特定类型信息时,简直是神来之笔。

我个人在以下几种场景中经常用到

NOT LIKE

  1. 排除特定类型的记录

    • 比如,我想查看所有产品中,除了“测试”或“演示”用的产品以外的真实商品数据。
      SELECT *
      FROM Products
      WHERE ProductName NOT LIKE '%测试%' AND ProductName NOT LIKE '%演示%';
    • 或者,我想列出所有部门,但不想看到“临时部门”或“已撤销部门”:
      SELECT *
      FROM Departments
      WHERE DeptName NOT LIKE '%临时%' AND DeptName NOT LIKE '%撤销%';
  2. 数据质量检查与异常识别

    • 这是
      NOT LIKE
      非常实用的一个地方。比如,我想找出所有邮箱地址格式不规范(比如没有
      @
      符号,或者没有
      .com
      等后缀)的用户,以便进行数据清洗。
      SELECT UserID, Email
      FROM Users
      WHERE Email NOT LIKE '%@%' OR Email NOT LIKE '%.%'; -- 简单示例,实际邮箱校验更复杂
    • 再比如,我想找出所有电话号码不是以“1”开头的记录,这可能意味着数据录入错误。
      SELECT CustomerID, PhoneNumber
      FROM Customers
      WHERE PhoneNumber NOT LIKE '1%';
  3. 筛选不包含特定关键词的内容

    • 在内容管理系统中,你可能想找出所有文章中,不包含某个敏感词或已过时术语的。
      SELECT ArticleID, Title
      FROM Articles
      WHERE Content NOT LIKE '%敏感词%' AND Content NOT LIKE '%过时术语%';
  4. 处理包含通配符本身的数据

    • 如果你的数据中本身就包含
      %
      _
      字符,而你想把它们作为字面值来匹配,就需要用到
      ESCAPE
      子句。但如果你想排除那些包含这些字面值的记录,
      NOT LIKE
      就配合
      ESCAPE
      一起用。例如,查找不包含字面值
      50%
      的字符串:
      SELECT ItemCode
      FROM Inventory
      WHERE ItemCode NOT LIKE '%50\%%' ESCAPE '\';

      这里

      \
      是转义字符,告诉SQL
      %
      不是通配符,而是要匹配的字面值。

总的来说,

NOT LIKE
LIKE
的有力补充,它让我们可以从“找什么”转变为“排除什么”,在数据筛选和质量控制上提供了极大的灵活性。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

682

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

347

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

676

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

575

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

417

2024.04.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.5万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号