sql where 1=1和 0=1 的作用
sql where 1=1和 0=1 的作用
摘自: http://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html
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; 创建一个新表,而新表的结构与查询的表的结构是一样的。
sql where 1=1和 0=1 的作用的更多相关文章
- [转]sql where 1=1和 0=1 的作用
sql where 1=1和 0=1 的作用 原文地址:http://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html where 1=1; ...
- sql where 1=1和 0=1 的作用(多条件查询错误的问题)
where 1=1; 这个条件始终为True,在不定数量查询条件情况下.1=1能够非常方便的规范语句. 一.不用where 1=1 在多条件查询中的困扰 举个样例,假设您做查询页面,而且.可查询的 ...
- sql语句中where 1=1和 0=1 的作用
sql where 1=1和 0=1 的作用 where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where 1=1 在多条件查询中的 ...
- 【C#】SQL数据库助手类2.0(自用)
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- SQL防注入程序 v1.0
/// ***************C#版SQL防注入程序 v1.0************ /// *使用方法: /// 一.整站防注入(推荐) /// 在Global.asax.cs中查找App ...
- Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程
原文:Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程 Red Gate系列之四 SQL Data Compare ...
- nest exception is java.sql.SQLException:ORA-01476:除数为0
1.错误描述 nest exception is java.sql.SQLException:ORA-01476:除数为0 2.错误原因 3.解决办法
- Error after SQL Server 2012 installation: Login Failure for "SQL Server Integration Services 11.0" SSIS service
When you install SQL Server 2012 and you try to connect to SSIS services, you cannot due to that the ...
- SQL Server温故系列(0):导航目录
创建本系列博文通用库表及数据的 SQL 语句:下载 SQL Server温故系列(0):导航目录 SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合 SQL Server温故系 ...
随机推荐
- Linux查看端口、进程情况及kill进程
看端口: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是P ...
- Swift:如何判断一个对象是否是某个类(或其子类)的实例
在OC中我们直接可以用如下方法即可 [obj isKindOfClass:[obj class]]; 在Swift中,并没有 .class 属性或者方法, 便可以用如下方法 class Person ...
- Oracle 一次生产分库,升级,迁移
今天完成了一个负载较高的中央数据库的分库操作, 并实现了oracle的滚动升级(10.2.0.1->10.2.0.4), 业务中断仅15分钟. 平台: RHEL AS 4 + Oracle 10 ...
- Android实现自适应正方形GridView(陌陌引导页面效果)
1.http://blog.chengyunfeng.com/?p=465 2.备注,慢慢研究
- 构建基于WinRT的WP8.1 App 02:数据绑定新特性
基于WinRT的Windows Phone 8.1以及Windows 8.1中Xaml数据绑定增加了一些新特性. FallBackValue属性:FallBackValue在绑定的值属性值不存在时,可 ...
- SDL安全人员角色定义
SDL安全人员角色定义 http://www.docin.com/p-819975580.html
- ODAC(V9.5.15) 学习笔记(十九)主键值自动生成
ODAC支持通过Oracle的序列来自动生成表的主键功能.这个过程允许在客户端自动完成,不需要过多代码.这个对一些要求自动增长字段做主键的场合非常有用.其实现步骤为: 1.数据库必须先建立生成主键的序 ...
- Python初学者需要注意的问题
一.注意你的Python版本 Python官方网站为http://www.python.org/,当前最新版本为3.4.0 alpha,稳定版本为3.3.2,在3.0版本时,Python的语法改动较大 ...
- 关于STM8的用户数据空间读写问题
情况是这样的,我的程序里有一个参数,数值不超过1000,我要保存到EEPROM中,那就要分两个字节存放.我用下面的方式保存是正常的: BASE = 0x4000; param = 999; eepro ...
- 删除数据库数据,自增id清理
方法一:Delete Form 表名 方法二:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 D ...