MySQL 通配符:玩出 SQL 的高级花样

84 阅读3分钟

嘿,各位 MySQL 小伙伴们!今天咱要来聊聊 SQL 里那些超有意思的通配符,它们就像是 SQL 世界里的神奇魔法棒,能让你的查询变得超级酷炫!

通配符基础回顾

咱先简单回顾下基础通配符。% 这个家伙,就像个超级大胃王,能匹配任意长度的字符串,不管是零个字符、一个字符,还是一大串字符,它都能轻松拿下。比如说,你想找名字里带 “猫” 的所有宠物,SELECT * FROM pets WHERE name LIKE '%猫%'; 这一条 SQL 语句,就能把 “大花猫”“蓝猫”“猫小咪” 等等全都给你捞出来。

还有 _,它就比较 “小气” 啦,只匹配一个字符。要是你想找名字是三个字,中间那个字是 “小” 的宠物,SELECT * FROM pets WHERE name LIKE ''; 这样就能精准定位,像 “阿小喵”“花小汪” 这种就会被筛选出来。

高阶玩法来咯

复杂模式匹配

有时候,我们的需求可没那么简单。想象一下,你有一个存储产品编号的表,编号格式是 “字母 - 数字 - 字母”,这时候通配符的高阶用法就派上用场啦。比如,SELECT * FROM products WHERE product_code LIKE '[A-Z]-[0-9]-[A-Z]'; 这里的 [A-Z] 表示匹配任意一个大写字母,[0-9] 表示匹配任意一个数字。这条语句就能把像 “A-1-B”“C-5-D” 这样符合格式的产品编号都找出来。

排除特定字符

如果你想查找名字里不包含某些特定字符的记录,也可以用通配符实现哦。比如,你想找名字里没有 “狗” 字的宠物,SELECT * FROM pets WHERE name NOT LIKE '%狗%'; 这就轻松把所有跟 “狗” 无关的宠物名字筛选出来啦。

组合使用通配符

更厉害的是,我们还能把通配符组合起来使用。假设你有一个用户表,里面有用户的昵称,你想找昵称以 “老” 开头,后面跟着两个任意字符,并且第三个字符不是 “王” 的用户,SELECT * FROM users WHERE nickname LIKE '老__' AND nickname NOT LIKE '老_王'; 这样就能精准定位到你想要的用户啦。

SQL 示例大放送

示例一:查找特定格式的邮箱

在用户信息表中查找格式为 “字母 + 数字 +@+ 域名” 的邮箱,比如 “a1@example.com” 这种。

SELECT * FROM user_info WHERE email LIKE '[A-Za-z][0-9]@%.%';

示例二:查找特定文件名

在文件管理表中,查找文件名以 “文档” 开头,并且文件名长度为 5 个字符的文件记录。

SELECT * FROM file_management WHERE file_name LIKE '文档__';

示例三:查找不包含特定关键词的文章

在文章表中,查找标题里不包含 “广告” 和 “促销” 的文章。

SELECT * FROM articles WHERE title NOT LIKE '%广告%' AND title NOT LIKE '%促销%';

总结

MySQL 的通配符真的是超级强大,只要你掌握了这些高阶玩法,在处理数据查询的时候就能轻松应对各种复杂的需求。希望大家都能把这些通配符玩得溜起来,让自己的 SQL 技能更上一层楼!下次遇到复杂的查询需求,可别忘了今天学到的这些通配符技巧哦!