如何在SQL中使用LIKE操作符?模糊查询的实现方法

LIKE 运算符...是一个模糊查询...非常常用...% 通配符...匹配任意数量的字符..._通配符...匹配单个字符...例如...'New%'...匹配以 'New' 开头的所有行...例如'New York'... '}%'... 匹配所有以 'B' 结尾的行... 例如'Bob'... '%C%'... 匹配所有包含 'C' 的行... 例如'Lucy'... '_D%'... 匹配第二个字母为“D”的字符串... 例如“Adam”...
2 02 2 年... 我在上海... 编写一个 SQL 查询... 如果你想查找所有城市名称以“New”开头的客户... 只需编写... SELECT FROMcustomers WHERE city LIKE "New%"... 然后执行... 数据库将返回所有城市名称以“New%”开头的客户... 以“New”开头... 这很方便...
但是...喜欢查询...有时性能不是很好...尤其是在模式...前面的%...例如'%an%'...这...数据库很难使用索引...可能导致全表扫描...我后来意识到...在这种情况下...尝试写 'an%' 或 'an'...这样...数据库可以使用索引...
还有...一个区分大小写的问题...例如MySQL...默认情况下是不区分大小写的...但是...如果你想区分大小写...你可以使用 BINARY 关键字...例如 WHERE name LIKE BINARY 'A%'...SQL Server 或 PostgreSQL...你可以使用 COLLATE 子句...例如 name WHERE LIKE 'A%' COLLATE Latin1 _General_CS_AS...当时我很困惑...这么多技巧...
为了优化性能...你还可以使用全文搜索...例如,MySQL 有一个FULLTEXT索引... PostgreSQL有pg_trgm扩展... 对于复杂的模糊查询... 全文搜索的效率比LIKE高很多... 但是... 全文搜索配置有点复杂... 也许我比较极端... 我觉得不值得...
有时... 你需要在模式中搜索%或_... 例如'1 0%' ... 这次... 你需要使用ESCAPE子句... 例如WHERE描述LIKE '1 0!%' ESCAPE '!'...在这里!是转义字符...可以配置...但是...转义字符不能与数据冲突...并且...过于频繁地使用 ESCAPE 子句...可能会影响性能...小心...
总之...LIKE操作符...使用通配符%和_...可以灵活匹配...但是...注意性能优化...避免前导通配符...使用索引...选择合适的策略...ESCAPE子句...处理特殊字符...区分大小写...根据数据库配置进行调整...明智的应用...可以提高查询效率...

SQL中如何使用LIKE_SQL模糊查询LIKE的用法

您好,您问的是 SQL LIKE 运算符。
让我告诉你我上次遇到问题的经历。

上周,一位客户问我为什么他的查询运行得这么慢。
事实证明,所有这些查询都使用 LIKE '%keyword%' 模式。
我告诉你,这东西是性能杀手!
看,当%通配符开头时,数据库根本无法使用索引,只能扫描全表。
我曾经在2 02 3 年处理过一个电商项目,有一个销售报表查询,我用了LIKE'%手机%'。
结果,它在数百万条数据中卡住了近一分钟。
转换后,在末尾加上通配符并LIKE“手机%”,几秒钟后结果就会出现。
这是一个不同的世界!
还有像 %_ 这样的模式匹配。
想一想,数据库怎么知道哪些位置是空闲牌,哪些位置是人物呢?它只能一一猜测,不幸的是效率很低。
当我在上海的一个购物中心测试时,我发现这种模式比LIKE'keyword%'慢了整整1 0倍!
不过话说回来,一旦你掌握了它的窍门,LIKE 就相当不错了。
例如,如果要查看用户名,可以使用 LIKE 'Zhang%' 来查找姓张的人;要查看电子邮件地址,您可以使用 LIKE '%@qq.com%' 来查找 QQ 电子邮件地址。
我曾经帮助一家公司搭建客户服务系统,我经常使用这个功能。

ESCAPE也蛮有趣的。
记得有一次我检查文件名的时候,正好有一个%符号,结果就炸了。
然后,我使用ESCAPE'@'进行转义,问题就解决了。
但是,选择转义字符时需要小心。
上次,有一个项目使用了反斜杠 \,它与正斜杠 / 混淆了。
需要很长时间去调试。

组合查询时,要注意AND和OR的优先级。
我的一个朋友写了一个查询 WHERE names LIKE '%A' OR '%B',结果发现所有的名字都有 B,因为他忘了加括号。
然后将其更改为 name WHERE LIKE '%A' OR name LIKE '%B'。

最后,我想给你一些建议。
全文搜索并不是一个简单的解决方案。
去年我在北京做一个新闻系统,文章内容很长。
起初我用LIKE%news%来询问,但结果很糟糕。
然后,我转向 MySQL 的 MATCH...AGAINST,它会在几秒钟内生成结果。
它还支持加权和同义词匹配,这很有趣。

无论如何,这取决于你。
对于简单的查询使用LIKE是可以的,但不要盲目地在主要报表上使用它。
指标一定要调好,不然会让你分分钟怀疑自己的人生。