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

wufei123 发布于 2025-08-29 阅读(5)

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 '_小_';

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

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

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

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

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

  • 用户搜索体验:当用户在电商网站搜索“手机壳”时,他可能输入“手机壳”、“手机保护套”、“手机套”,甚至“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
的有力补充,它让我们可以从“找什么”转变为“排除什么”,在数据筛选和质量控制上提供了极大的灵活性。

以上就是sql怎样用LIKE进行简单的模糊查询 sql模糊查询的基础语句用法的详细内容,更多请关注知识资源分享宝库其它相关文章!

标签:  模糊 查询 用法 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。