MySQL LIKE 子句(附带实例)
                           
天天向上
发布: 2025-02-18 00:27:04

原创
623 人浏览过

在 MySQL 中,LIKE 子句用于根据模式匹配来筛选数据。它通常与 WHERE 子句一起使用,用来查找列值与给定模式匹配的记录。LIKE 子句支持通配符,允许你执行部分匹配搜索。

1. 基本语法

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
  • column_name:你要查询的列。
  • pattern:你要匹配的模式。模式可以包含通配符来表示模糊匹配。

2. 常用的通配符

  • %:表示零个或多个字符。
  • _:表示一个字符。

3. 实例:LIKE 子句的使用

实例 1:% 通配符

% 通配符可以匹配零个或多个字符。

  • 查询:查找所有以 John 开头的用户
SELECT * FROM users
WHERE username LIKE 'John%';
  • 这个查询将返回所有 usernameJohn 开头的用户,如 John, Johnny, John123 等。

实例 2:% 通配符

  • 查询:查找所有以 a 结尾的用户名
SELECT * FROM users
WHERE username LIKE '%a';
  • 这个查询将返回所有 username 以字母 a 结尾的用户,如 Anna, Maria 等。

实例 3:_ 通配符

_ 通配符用于匹配一个单独的字符。

  • 查询:查找所有包含 4 个字符的用户名,且第一个字符是 J
SELECT * FROM users
WHERE username LIKE 'J___';
  • 这个查询将返回所有 username 只有 4 个字符,且以 J 开头的用户,如 John, James 等。

实例 4:%_ 结合使用

你可以将 %_ 通配符结合使用,以实现更复杂的匹配模式。

  • 查询:查找所有包含两个字符 a 的用户名
SELECT * FROM users
WHERE username LIKE '%a_a%';
  • 这个查询将返回所有 username 包含两个 a 字符的用户,如 Alana, Amanda 等。

4. 大小写敏感性

  • 在 MySQL 中,LIKE 子句默认是 不区分大小写 的(这取决于你的列字符集和排序规则)。
  • MySQL 默认的排序规则(如 latin1_swedish_ci)是区分大小写的。如果你使用的是区分大小写的排序规则(如 utf8_bin),LIKE 将是 区分大小写 的。

实例 5:大小写敏感

  • 查询:查找以 john 开头的用户名(大小写敏感)
SELECT * FROM users
WHERE username LIKE BINARY 'john%';
  • 这个查询将只返回以 john 开头的用户名,而不包括 John, JOHN 等。

5. 使用 NOT LIKE

如果你要查找不符合模式的记录,可以使用 NOT LIKE 来排除匹配的项。

实例 6:NOT LIKE 排除匹配项

  • 查询:查找所有不以 John 开头的用户
SELECT * FROM users
WHERE username NOT LIKE 'John%';
  • 这个查询将返回所有 username 不以 John 开头的用户。

6. LIKE 和通配符的性能考虑

  • 效率问题:使用 LIKE% 通配符会导致数据库扫描整个表,尤其是当 % 位于模式的开头时。这可能会影响查询性能。
  • 如果你的查询只在前缀匹配时使用 LIKE(例如 LIKE 'John%'),则可以使用索引加速查询。
  • 如果使用通配符 % 在模式的开头(例如 LIKE '%John%'),则无法使用索引,可能会导致全表扫描,查询性能较差。

7. 使用 LIKEORDER BY

你还可以在 ORDER BY 子句中使用 LIKE 来按匹配模式排序记录。

实例 7:根据模式排序

  • 查询:查找所有以 John 开头的用户名,并按字母顺序排序
SELECT * FROM users
WHERE username LIKE 'John%'
ORDER BY username;
  • 这个查询将返回所有以 John 开头的用户名,并按字母顺序排序。

8. 总结

LIKE 子句用于进行模糊查询,常见的应用场景包括:

  1. 使用 % 通配符匹配零个或多个字符。
  2. 使用 _ 通配符匹配一个字符。
  3. 结合使用 %_ 来构建更复杂的匹配模式。
  4. 使用 NOT LIKE 来排除某些模式的记录。
  5. 默认情况下,LIKE 是不区分大小写的,但可以使用 BINARY 来强制区分大小写。

常见应用

  • 查找以某个字符串开头、结尾或包含某个字符串的记录。
  • 在数据库表中进行快速的模式匹配查询。
发表回复 0

Your email address will not be published. Required fields are marked *