SQL where 1=1 和0=1 的作用(转载自:https://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html)
2018-01-09 19:00
260 查看
sql
where 1=1和 0=1 的作用
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;
创建一个新表,而新表的结构与查询的表的结构是一样的。
相关文章推荐
- ubuntu远程桌面(转载来源http://www.cnblogs.com/xdzone/archive/2011/03/10/1979644.html)
- 存储过程使用事物的几种方式 转载自--http://www.cnblogs.com/chengxiaoming/archive/2010/06/11/1756163.html
- 转载:小白鼠与毒药 http://www.cnblogs.com/pangxiaodong/archive/2011/10/23/2221690.html
- PowerDesigner教程系列(三)概念数据模型 转载(http://www.cnblogs.com/yxonline/archive/2007/04/09/705479.html)
- Qt实现自定义按钮的三态效果(转载自http://www.cnblogs.com/emouse/archive/2013/07/14/3189319.html)
- z-index总结【转载http://www.cnblogs.com/mind/archive/2012/04/01/2198995.html】
- WPF企业内训全程实录(下) 转载 http://www.cnblogs.com/KnightsWarrior/archive/2010/12/09/1900832.html
- 破解EXCEL2007的密码转载 www.cnblogs.com/micccn/archive/2008/09/26/1299453.html
- PowerDesigner教程系列(五)概念数据模型 转载(http://www.cnblogs.com/yxonline/archive/2007/04/09/705479.html)
- jquery easyui 弹出消息框 (转载) jQuery EasyUI API 中文文档 - 消息框(Messager) http://www.cnblogs.com/hantianwei/archive/2012/03/19/2407113.html
- 使用反射和特性构造自己的ORM框架 转载自:http://www.cnblogs.com/xdesigner/archive/2008/06/24/1228702.html
- C#中Dictionary的用法及用途 原文转载自:http://www.cnblogs.com/linzheng/archive/2010/12/13/1904709.html
- PHP中spl_autoload_register函数的用法 ---转载自http://www.cnblogs.com/myluke/archive/2011/06/25/2090119.html
- 正则表达式备忘-----------转载自http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html
- 实战 SQL Server 2008 数据库误删除数据的恢复 (转载至dudu http://www.cnblogs.com/dudu/archive/2011/10/15/sql_server_recover_deleted_records.html)
- HTTP请求和响应格式(好文,转载http://www.cnblogs.com/yaozhongxiao/archive/2013/03/02/2940252.html)
- Linux C语言错误处理(转载)http://www.cnblogs.com/nliao/archive/2010/09/09/1822647.html
- https://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html
- 为什么要慎用触发器(转载http://www.cnblogs.com/tom-fu/archive/2008/06/25/1229314.html)
- JavaScript逻辑操作符 转载自博客园 http://www.cnblogs.com/pigtail/archive/2012/03/09/2387486.html