跳至主要内容

SQL CONTAINS:全面教程

解锁 SQL CONTAINS 的强大功能,用于高级文本搜索。深入了解逻辑运算符、邻近搜索和通配符的用法,以实现精确的数据分析。
· 5分钟 阅读

使用 AI 探索

对于数据科学家或数据工程师来说,搜索和处理文本数据的能力不可或缺。SQL 的 CONTAINS 函数是一款强大的工具,能够在数据库中执行复杂的全文搜索,按特定模式或关键词检索数据。

本教程将带您高效使用 SQL CONTAINS,帮助您在数据分析中充分发挥其潜力。

理解 SQL CONTAINS

SQL CONTAINS用于全文搜索,允许您在文本数据中按特定的词、短语或模式进行查询。它在大型文本字段中查找特定信息时尤其有用,因为事先并不知道数据的确切位置。

语法与参数

SQL CONTAINS 的基本语法如下:

CONTAINS (column_name, 'search_pattern')

关键组成包括:

  • 列名:执行搜索的字段。必须是建立了全文索引的列。
  • 搜索模式:您希望在该列中查找的文本,使用单引号括起。

运算符与通配符

为细化搜索,SQL CONTAINS 支持多种运算符:

  • AND 与 OR:用于组合多个搜索词。
  • NEAR:查找彼此在一定距离内出现的词。
  • 星号(*):作为通配符,用于当精确词可能只是更长字符串的一部分时进行搜索。

实现 SQL CONTAINS

下面通过实用示例演示如何应用 SQL CONTAINS:

基本用法

若要在名为 "fruit" 的列中搜索 "apple" 和 "orange" 这两个词,可以使用:

CONTAINS (fruit, '"apple" AND "orange"')

该查询将返回在 "fruit" 列中同时包含这两个词的行。

高级搜索

对于更复杂的搜索,将 CONTAINS 与其他 SQL 函数结合可实现精细查询,例如搜索彼此相近的短语,或使用通配符查找一个词的多种变体。

高级搜索可以结合 CONTAINS 与逻辑运算符、使用邻近搜索,以及利用通配符字符来发掘文本字段中的模式或特定数据点。

将 CONTAINS 与逻辑运算符结合

SQL CONTAINS 支持使用 AND、OR 和 NOT 等逻辑运算符,根据多重条件细化搜索。例如,要查找文本列中同时包含 "technology" 和 "innovation" 的条目,可以如下编写查询:

SELECT 
  * 
FROM 
  your_table 
WHERE 
  CONTAINS(
    your_column, '"technology" AND "innovation"'
  );

相反,若要查找包含任一词的条目,请使用 OR:

SELECT 
  * 
FROM 
  your_table 
WHERE 
  CONTAINS(
    your_column, '"technology" OR "innovation"'
  );

邻近搜索

NEAR 运算符特别适用于查找在文本中彼此接近出现的词或短语。这在术语间关系影响含义的语境中尤为重要。例如,要搜索 "climate" 与 "change" 在彼此 10 个词以内的情况:

SELECT 
  * 
FROM 
  your_table 
WHERE 
  CONTAINS(
    your_column, 'NEAR((climate, change), 10)'
  );

该查询会优先返回 "climate" 与 "change" 紧密相关的记录,为特定研究问题提供更相关的结果。

通配符搜索

通配符通过允许可变字符的加入来扩展搜索范围。星号(*)在 CONTAINS 查询中充当通配符,使部分匹配成为可能。例如,要查找 "compute" 的变体,如 "computer"、"computing" 或 "computation",可以使用:

SELECT 
  * 
FROM 
  your_table 
WHERE 
  CONTAINS(your_column, '"compute*"');

当您希望围绕词根捕获更广泛的数据,或不确定数据库中使用的确切术语时,此方法尤其有用。

高级模式匹配

在需要更复杂模式匹配的场景中,可考虑将 SQL CONTAINS 与 LIKE 运算符或正则表达式结合使用。尽管 CONTAINS 擅长全文搜索,但 LIKE 与正则可以提供模式灵活性,例如匹配特定字符序列或格式(如电子邮箱地址或电话号码)。

实用示例:结合多种技术实现全面搜索

假设您需要查找与环境技术相关的数据库记录,但不确定文本中使用的确切表述。您可以如下组合多种技术:

SELECT 
  * 
FROM 
  your_table 
WHERE 
  CONTAINS(
    your_column, '("environment*" NEAR "technology*", 10) OR "climate change" OR "renewable energy"'
  ) 
  AND your_column LIKE '%sustainability%';

该查询展示了如何同时利用 CONTAINS 的邻近与通配符搜索,并结合 LIKE 运算符进行额外的模式匹配,从而为复杂文本搜索提供稳健策略。

数据科学中 SQL CONTAINS 的实用示例

作为数据科学家,我会处理多种类型的数据集,主要涉及客户满意度与反馈等文本数据。在本示例中,我们将查找可指示满意或不满意的特定关键词。

ID

FeedbackText

SatisfactionScore

1

I am very happy with the service.

5

2

Not satisfied with the product quality.

2

3

The delivery was quick, and the product works great...

5

4

Customer service was unhelpful and rude.

1

5

Happy with my purchase. Will recommend!

4

CustomerFeedback 表

要使用CONTAINS,您的数据库可能需要启用全文搜索(Full-Text Search)。

CONTAINS 关键字用于查找 “FeedbackText” 列包含 “happy” 一词的记录。

SELECT 
  * 
FROM 
  CustomerFeedback 
WHERE 
  CONTAINS(FeedbackText, 'happy');

上述查询将返回 CustomerFeedback 表中 FeedbackText 列包含 “happy” 一词的行。

ID

FeedbackText

SatisfactionScore

1

I am very happy with the service.

5

3

The delivery was quick, and the product works great...

5

5

Happy with my purchase. Will recommend!

4

您无法在 SQLite 数据库中使用 CONTAINS 命令。可改用:

SELECT 
  * 
FROM 
  CustomerFeedback 
WHERE 
  FeedbackText LIKE '%happy%';

超越 CONTAINS:模式匹配与字符串处理

虽然 CONTAINS 在文本搜索方面功能强大,SQL 还提供了其他处理文本数据的技术:

LIKE 运算符

与CONTAINS 类似,LIKE 运算符也支持模式匹配,但语法更简单,使用 % 作为通配符。例如,要查找产品名称中包含 "apple" 的任何记录:

SELECT 
  * 
FROM 
  Products 
WHERE 
  productName LIKE '%apple%'

高级字符串函数

SQL 提供了 LEFT 与 REVERSE 等函数,用于提取或处理字符串的一部分,为文本分析与处理提供了广泛能力。您可在我们的 Cleaning Data in SQL Server Databases 课程中进一步学习。

结语

SQL CONTAINS 函数及其相关的文本处理能力是数据从业者的必备工具。通过理解并应用这些技术,您可以高效地在数据库中搜索和分析文本数据,挖掘洞察,提升数据分析项目的效果。

请记住,查询的有效性不仅取决于是否掌握语法,还取决于对数据语境与结构的理解。请结合真实世界数据集与SQL 项目进行练习,并探索多种函数,以充分发挥 SQL 在文本数据分析中的力量。

要进一步了解 SQL 运算符并探索 SQL 基础,请查看我们的 SQL 基础速查表 与 SQL 基础技能路径。

Abid Ali Awan

作者

Abid Ali Awan

作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

主题