SQL LIKE 运算符

摘要:在本教程中,您将学习如何使用 SQL LIKE 运算符来测试一个值是否与某个模式匹配。

SQL LIKE 运算符简介 #

LIKE 运算符是 SQL 逻辑运算符之一。如果一个值与模式匹配,LIKE 运算符返回 true,否则返回 false

以下是 LIKE 运算符的语法:

expression LIKE patternCode language: SQL (Structured Query Language) (sql)

在此语法中,LIKE 运算符测试 expression 是否与 pattern 匹配。

SQL 提供了两种通配符来构建模式:

  •  % 百分号通配符匹配零个、一个或多个字符。
  •  _ 下划线通配符匹配单个字符。

当您在字符串中使用通配符时,SQL 会对它们进行特殊处理。

下表显示了使用 %_ 通配符的示例:

表达式含义
LIKE 'Kim%'匹配以 Kim 开头的字符串
LIKE '%er'匹配以 er 结尾的字符串
LIKE '%ch%'匹配包含 ch 的字符串
LIKE 'Le_'匹配以 Le 开头且后跟一个字符的字符串,例如 LesLen……
LIKE '_uy'匹配以 uy 结尾且前面有一个字符的字符串,例如 guy
LIKE '%are_'匹配包含字符串 are 并以单个字符结尾的字符串。
LIKE '_are%'匹配包含字符串 are、以单个字符开头并以任意数量字符结尾的字符串。

请注意,除了 %_ 通配符外,某些数据库系统可能支持其他通配符。

NOT LIKE #

要对 LIKE 运算符的结果取反,可以使用 NOT 运算符:

expression NOT LIKE patternCode language: SQL (Structured Query Language) (sql)

如果表达式与模式不匹配,NOT LIKE 运算符返回 true,否则返回 false

转义字符 #

要匹配包含通配符的字符串,例如 10%,您需要指示 LIKE 运算符将 10% 中的 % 视为普通字符。

为此,您可以在 ESCAPE 子句后显式指定一个转义字符:

expression LIKE pattern ESCAPE escape_characterCode language: SQL (Structured Query Language) (sql)

例如:

value LIKE '%10!%%' ESCAPE '!'Code language: SQL (Structured Query Language) (sql)

在此示例中,! 是一个转义字符,它指示 LIKE 运算符将紧跟其后的 % 视为普通字符。

在实践中,您通常在  WHERE 子句中使用 LIKE 运算符来筛选值与模式匹配的行。此外,您还可以在 UPDATEDELETE 语句的 WHERE 子句中使用 LIKE 运算符来筛选要更新和删除的行。

SQL LIKE 运算符示例 #

我们将使用示例数据库中的 employees 表进行演示。

employees_table

查找以特定字符串开头的名字 #

以下查询使用 LIKE 运算符查找所有名字以字符串 Da 开头的员工:

SELECT
  first_name,
  last_name
FROM
  employees
WHERE
  first_name LIKE 'Da%'
ORDER BY
  first_name;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name | last_name
------------+-----------
 Daniel     | Faviet
 David      | AustinCode language: plaintext (plaintext)

查找以特定字符串结尾的名字 #

以下语句使用 LIKE 运算符查找名字以 er 结尾的员工:

SELECT
  first_name,
  last_name
FROM
  employees
WHERE
  first_name LIKE '%er'
ORDER BY
  first_name;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name | last_name
------------+-----------
 Alexander  | Hunold
 Alexander  | Khoo
 Jennifer   | WhalenCode language: plaintext (plaintext)

查找包含特定字符串的名字 #

以下查询使用 LIKE 运算符查找名字中包含 an 的员工:

SELECT
  first_name,
  last_name
FROM
  employees
WHERE
  first_name LIKE '%an%'
ORDER BY
  first_name;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name  | last_name
-------------+-----------
 Alexander   | Khoo
 Alexander   | Hunold
 Daniel      | Faviet
 Diana       | Lorentz
 Hermann     | Baer
 Jose Manuel | Urman
 Nancy       | Greenberg
 Shanta      | Vollman
 Susan       | MavrisCode language: plaintext (plaintext)

使用 _ 通配符 #

以下查询使用 LIKE 运算符查找名字以 Jo 开头且后跟两个字符的员工:

SELECT
  first_name,
  last_name
FROM
  employees
WHERE
  first_name LIKE 'Jo__'
ORDER BY
  first_name;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name | last_name
------------+-----------
 John       | Chen
 John       | RussellCode language: plaintext (plaintext)

组合使用通配符 #

以下查询结合使用 %_ 通配符,查找名字以任意数量字符开头,并以单个字符结尾的员工:

SELECT
  first_name,
  last_name
FROM
  employees
WHERE
  first_name LIKE '%are_'
ORDER BY
  first_name;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name | last_name
------------+------------
 Karen      | Colmenares
 Karen      | PartnersCode language: plaintext (plaintext)

SQL NOT LIKE 运算符示例 #

以下示例使用 NOT LIKE 运算符查找所有名字以字母 S 开头,但不以 Sh 开头的员工:

SELECT
  first_name,
  last_name
FROM
  employees
WHERE
  first_name LIKE 'S%'
  AND first_name NOT LIKE 'Sh%'
ORDER BY
  first_name;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name | last_name
------------+-----------
 Sarah      | Bell
 Sigal      | Tobias
 Steven     | King
 Susan      | MavrisCode language: plaintext (plaintext)

摘要 #

  • 如果一个值与模式匹配,LIKE 运算符返回 true,否则返回 false
  • 使用 NOT 运算符对 LIKE 运算符取反。
  • 使用 % 通配符匹配一个或多个字符。
  • 使用 _ 通配符匹配单个字符。

数据库 #

测验 #

本教程是否有帮助?
© .