boxmoe_header_banner_img

Hello! 欢迎来到悠悠畅享网!

文章导读

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


avatar
站长 2025年8月16日 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

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



评论(已关闭)

评论已关闭

==========================