点击蓝色字关注“SQL数据库运维”,回复“SQL”获取2TB学习资源!
前几天在逛知乎时,偶然看到了这么一个问题,个人觉得是一个非常好的问题,回答者也很多,大家是各抒己见,贴出部分回答给大家看看:
估计很多刚接触SQL的小伙伴们也会有同样的疑问吧,精选几个比较好的回答,分享小伙伴们品读下:
真香:好看,且好用,特别香!
作者:刘有劲 一、好看下面2个SQL,可以对比下:
二、好用1、SQL拼接更方便 程序的查询界面,都是通过用户选择的不同查询条件,拼接不同的SQL,呈现结果,如果用户不选择任何查询条件,则显示所有。 在基础SQL增加上where 1 = 1,后面不论用户选择了几个查询条件,只需要一直and下去就行了,而不用判断“有条件”还是“没条件”。 2、查询调试更方便 很多时候,我们写好SQL后,需要变换不同的查询条件进行数据查询,例如有多个and的情况下: —— 如果要把后面几个and失效,只需要在and前增加注释符号即可; —— 但如果要把where后紧接着的条件失效,只增加注释是不行的,还需要把紧挨着的and删掉。 这样的操作过于繁琐,不如where后面先1 = 1,再后面的条件就可以随便注释了。 |
作者:十年外包 1=1是恒等于的意思:开发人员使用习惯问题。 1=2是恒不等于的意思:一般用于语法测试等。 写了1=1,后面条件就都是一样的格式了,排查问题直接注释掉条件就好了;如果没加,排查问题,where后面条件就要屡次加删and了。平时觉得没啥,但问题复杂度一上来,一根稻草就能压死一只骆驼!!! |
作者:KonwBot 在 SQL 语句中,如果在 WHERE 条件后面写上 1=1 意味着该语句将返回整张表中的所有记录。这是因为 1=1 是一个始终为真的条件,所以不论其他条件是什么,都会返回整张表。这种做法常常用在动态查询中,当用户并不需要输入查询条件时,可以通过这种方式返回整张表的所有数据。 如果应用程序在构建 SQL 查询时使用了 1=1 的条件,那么攻击者可能会利用这个条件来插入非法的 SQL 代码。 例如,假设应用程序使用了如下的 SQL 查询来检索用户名和密码:
攻击者可能会尝试将其用户名输入为:
这样就会变成:
这样就会把所有的用户都查询出来,可能会导致敏感信息泄露。 所以应该避免在程序中使用1=1条件,而应该使用参数化查询或预处理语句来防止 SQL 注入攻击。 |
| 作者:哪吒学Java 链接:https://www.zhihu.com/question/569862891/answer/2860914766 来源:知乎 1、统一代码风格; 2、防止在mybatis动态拼接where条件时,没有任何条件时去掉and,提高容错率,确保sql不会报错; 3、5.6版本之后,where 1 = 1 不会有任何性能问题,查询分析器会直接将其优化掉; 4、再说其他用处?装逼用的?新手看到了这个,哇哦,sql还可以这样写,此中定有玄机; |
参考资料:https://www.zhihu.com/question/569862891
此文章仅列举部分精选内容,还有很多观点,感兴趣的可以通过以上链接进行学习,也可通过以下方式,欢迎进群探讨☟☟☟

点击关注“SQL数据库运维”,后台或浏览至公众号文章底部点击“发消息”回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料。
动动小手点击加关注呦☟☟☟




