设为首页 收藏本站
查看: 1204|回复: 0

[经验分享] sql 中使用 where 1=1 和 where 1=0的作用

[复制链接]

尚未签到

发表于 2018-10-23 10:57:42 | 显示全部楼层 |阅读模式
  where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句。
  一、不用where  1=1  在多条件查询中的困扰
  举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下:
  string MySqlStr=”select * from table where”;
  if(Age.Text.Lenght>0)
  {
  MySqlStr=MySqlStr+“Age=“+“'Age.Text'“;
  }
  if(Address.Text.Lenght>0)
  {
  MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“;
  }
  ①种假设
  如果上述的两个IF判断语句,均为True,即用户都输入了查询词,那么,最终的MySqlStr动态构造语句变为:
  MySqlStr=”select * from table where Age='18'  and Address='云南省文山州广南县小波吗村'”
  可以看得出来,这是一条完整的正确的SQL查询语句,能够正确的被执行,并根据数据库是否存在记录,返回数据。
  ②种假设
  如果上述的两个IF判断语句不成立,那么,最终的MySqlStr动态构造语句变为:
  MySqlStr=”select * from table where“
  现在,我们来看一下这条语句,由于where关键词后面需要使用条件,但是这条语句根本就不存在条件,所以,该语句就是一条错误的语句,肯定不能被执行,不仅报错,同时还不会查询到任何数据。
  上述的两种假设,代表了现实的应用,说明,语句的构造存在问题,不足以应付灵活多变的查询条件。
  二、使用 where  1=1  的好处
  假如我们将上述的语句改为:
  string MySqlStr=”select * from table where  1=1 ”;
  if(Age.Text.Lenght>0)
  {
  MySqlStr=MySqlStr+“and Age=“+“'Age.Text'“;
  }
  if(Address.Text.Lenght>0)
  {
  MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“;
  }
  现在,也存在两种假设
  ①种假设
  如果两个IF都成立,那么,语句变为:
  MySqlStr=”select * from table where  1=1 and Age='18'  and Address='云南省文山州广南县小波吗村'”,很明显,该语句是一条正确的语句,能够正确执行,如果数据库有记录,肯定会被查询到。
  ②种假设
  如果两个IF都不成立,那么,语句变为:
  MySqlStr=”select * from table where 1=1”,现在,我们来看这条语句,由于where 1=1 是为True的语句,因此,该条语句语法正确,能够被正确执行,它的作用相当于:MySqlStr=”select * from table”,即返回表中所有数据。
  言下之意就是:如果用户在多条件查询页面中,不选择任何字段、不输入任何关键词,那么,必将返回表中所有数据;如果用户在页面中,选择了部分字段并且输入了部分查询关键词,那么,就按用户设置的条件进行查询。
  说到这里,不知道您是否已明白,其实,where 1=1的应用,不是什么高级的应用,也不是所谓的智能化的构造,仅仅只是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态SQL语句的一种方法。
  where 1=0; 这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表
  "SELECT * FROM strName WHERE 1 = 0"; 该select语句主要用于读取表的结构而不考虑表中的数据,这样节省了内存,因为可以不用保存结果集。
  create table newtable as select * from oldtable where 1=0;  创建一个新表,而新表的结构与查询的表的结构是一样的。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625368-1-1.html 上篇帖子: Response.Redirect(),Server.Transfer(),Server.Execute()的区别与网站优化 下篇帖子: SQL Server扩展事件(Extended Events)-- 默认扩展事件会话system_health介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表