MySQL LIKE 子句(附带实例)
在 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%';
- 这个查询将返回所有
username以John开头的用户,如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. 使用 LIKE 在 ORDER BY 中
你还可以在 ORDER BY 子句中使用 LIKE 来按匹配模式排序记录。
实例 7:根据模式排序
- 查询:查找所有以
John开头的用户名,并按字母顺序排序
SELECT * FROM users
WHERE username LIKE 'John%'
ORDER BY username;
- 这个查询将返回所有以
John开头的用户名,并按字母顺序排序。
8. 总结
LIKE 子句用于进行模糊查询,常见的应用场景包括:
- 使用
%通配符匹配零个或多个字符。 - 使用
_通配符匹配一个字符。 - 结合使用
%和_来构建更复杂的匹配模式。 - 使用
NOT LIKE来排除某些模式的记录。 - 默认情况下,
LIKE是不区分大小写的,但可以使用BINARY来强制区分大小写。
常见应用
- 查找以某个字符串开头、结尾或包含某个字符串的记录。
- 在数据库表中进行快速的模式匹配查询。