SQL 中 LIKE 运算符详解(词源角度)
一、LIKE 是什么?
LIKE 是 SQL 中的字符串模式匹配运算符,用于在 WHERE 子句中搜索符合某种模式的字符串。
sql
SELECT * FROM users WHERE name LIKE '张%'; -- 查找姓"张"的人SELECT * FROM products WHERE name LIKE '%手机%'; -- 查找名称中包含"手机"的商品
二、词源拆解
| 单词 | 词源 | 含义演变 |
|---|---|---|
| LIKE | 古英语 gelīc(相似的、相同的) | 相似、像、如同 |
词源演变图
text
古英语 gelīc(相似的、相同的) ↓ 中古英语 like(相似的) ↓ 现代英语 like(像、如同、喜欢) ↓ 计算机科学 LIKE(模式匹配、相似匹配)
核心含义:"像...一样"、"与...相似"
三、gelīc 的词源拆解
古英语 gelīc 由两部分组成:
| 部分 | 含义 |
|---|---|
| ge- | 前缀,表示"一起、共同" |
| -līc | 身体、形状(同源词:lich) |
字面意思:"形状相同"、"具有相同的外形"
同源词
| 单词 | 演变 | 含义 |
|---|---|---|
| lich | 古英语 līc | 身体、尸体(如 lichgate 教堂门廊) |
| like | ge-līc | 像、相似 |
| alike | a + like | 相同的、相似的 |
| likely | like + ly | 很可能的(像真的会发生) |
| likeness | like + ness | 相似、相像 |
四、LIKE 的语义演变
| 阶段 | 含义 | 示例 |
|---|---|---|
| 古英语 | 具有相同形状 | "两片叶子形状 gelīc" |
| 中古英语 | 相似的 | "他们容貌 like" |
| 现代英语 | 像、如同 | "她像她母亲" |
| 日常用语 | 喜欢 | "我喜欢苹果"(语义进一步泛化) |
| SQL 语境 | 模式匹配 | "WHERE name LIKE '张%'" |
五、LIKE 在 SQL 中的直观理解
text
条件:name LIKE '张%' ↑ ↑ │ └── 模式(pattern) └────────── 像、匹配 含义:查找 name"像"这个模式的记录
通配符
| 通配符 | 含义 | 示例 |
|---|---|---|
% | 任意多个字符(包括0个) | '张%' = 以"张"开头的任意字符串 |
_ | 单个字符 | '张_' = "张"后面恰好跟一个字符 |
六、与其他语言中的"相似"表达对比
| 语言/工具 | 语法 | 含义 |
|---|---|---|
| SQL | WHERE name LIKE '张%' | 名字"像"张开头 |
| Python | if name.startswith('张') | 如果以"张"开头 |
| JavaScript | /^张/.test(name) | 正则匹配 |
| 英语 | name like 'Zhang*' | 像"Zhang*"这个模式 |
| 中文 | 名字像"张%"这样 | 相似匹配 |
七、实际应用示例
1、前缀匹配
sql
-- 查找所有姓"王"的用户SELECT * FROM users WHERE name LIKE '王%';
2、后缀匹配
sql
-- 查找所有以".jpg"结尾的图片SELECT * FROM images WHERE filename LIKE '%.jpg';
3、包含匹配
sql
-- 查找标题中包含"手机"的文章SELECT * FROM articles WHERE title LIKE '%手机%';
4、单字符匹配
sql
-- 查找"张"后面跟一个字的姓名(如"张三"、"张四")SELECT * FROM users WHERE name LIKE '张_';
5、组合匹配
sql
-- 查找第二个字是"小"的三个字姓名(如"张小三"、"王小五")SELECT * FROM users WHERE name LIKE '_小%';
八、LIKE 与 = 的区别
运算符 | 含义 | 匹配方式 | 示例 |
= | 等于 | 精确匹配 | name = '张三'(必须完全相等) |
LIKE | 像、相似 | 模式匹配 | name LIKE '张%'(以张开头即可) |
sql
-- 精确匹配 vs 模式匹配SELECT '张三' = '张三'; -- 真(精确相等)SELECT '张三' LIKE '张%'; -- 真(模式匹配)SELECT '张三' = '张三丰'; -- 假(不完全相等)SELECT '张三' LIKE '张%'; -- 真(模式匹配)
九、总结
| 问题 | 答案 |
|---|---|
LIKE 是什么? | SQL 中的模式匹配运算符 |
| 词源 | 古英语 gelīc(相似的、形状相同) |
| 字面含义 | 像、如同、相似 |
| 在 SQL 中的含义 | 查找与指定模式相似的字符串 |
与 = 的区别 | = 是精确匹配,LIKE 是模糊匹配 |
| 核心比喻 | 就像说"这个字符串像这个模式" |
一句话总结:LIKE 的词源来自古英语 gelīc(形状相同、相似),在 SQL 中表示"像...一样"——不是要求字符串完全相等,而是要求它"像"某个模式(如以某字开头、包含某词等),就像我们说"他的长相像他父亲"一样,是相似匹配而非精确相等