SQL 语句中 where 条件后 写上 1=1 是什么意思?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
1=1这个骚操作,其实就是个小技巧,绝对是菜鸟写SQL+时用过的东西,但别小瞧它,高手也爱用。先来个简单点的解释:1=1是个永远为真的条件,你写在 SOL的'WHERE'后面就是为了方便你拼接条件用的。 想象一下你写 SQL,查询条件经常会有很多分支逻辑,搞不好一堆“if else`逻辑等着你。你如果不加点骚操作,后面的 SQL拼接起来有时候会比较麻烦,比如你可能需要判断是否要加`AND` 或者WHERE`,不加吧,SQL跑出个错,烦得要死。 而 1=1 这种操作,能帮你解决这个问题,它的作用其实就是为了让你后面加条件的时候更加丝滑怎么加都不会错。就像给你铺了个“万用的路基”,让你写 SQL 条件的时候不用担心什么`AND或者`OR`拼得乱七八糟。比如说你要查用户表里的数据: SELECT * FROM users WHERE 1=1 AND age >18 AND gender = M'; 看到了吧,1=1`这个条件一直为真,所以可以无脑加各种后续条件,不用考虑 SQL 语句的拼接逻辑多复杂。如果没有`1=1,你可能得写一堆复杂的判断,去确定你什么时候该加`AND`,什么时候该加`OR`。而有了、1=1~,你只管加条件,语句不会出问题。 再从底层源码上分析下,数据库引擎+看到`1=1`这种逻辑后,会自动优化掉它,根本不会执行这个无效的条件。可以说是写代码的人的“善意谎言”--写的时候为了方便,但数据库会很聪明地帮你优化掉,不影响性能。 举个实际案例吧,假如你在做一个动态查询系统+,用户可以选多个过滤条件,但是用户不选条件的情况你也得考虑,不然整个查询逻辑会乱成一团。你可以这么写: SELECT * FROM products WHERE 1=1 这个`1=1`就是你SQL的起手式,后面再根据用户选择的条件拼接。用户选了价格范围,你就拼接: AND price BETWEEN 100 AND 200 选了类别,你再来个: AND category='Electronics 这样你根本不用管到底有没有条件,“1=1`已经帮你打好基础,后面的条件怎么加都不会影响SQL的正确性。 另外,数据库执行计划+生成的时候,像“1=1`这种恒等式它不会去当回事的,优化器直接无视掉,保证查询性能不受影响。所以担心影响效率的朋友可以洗洗睡了,根本没这回事。 总结一下,1=1 看着是个简单粗暴的东西,实质是个懒人救星,帮你拼 SQL 时省下无数条件判断的代码,写起来爽爽的,还不用担心出错。实用第一,优雅其次,这就是很多老手爱用它的原因,所以别嫌弃,赶紧学着点,下次你写动态 SQL 的时候就明白这骚操作的爽了! 该文章在 2025/8/28 10:10:21 编辑过 |
关键字查询
相关文章
正在查询... |