深入理解where 1=1的用处

where 1=1有什么用?在SQL语言中,写这么一句话就跟没写一样。

select * from table1 where 1=1与select * from table1完全没有区别,甚至还有其他许多写法,1<>2,'a'='a','a'<>'b',其目的就只有一个,where 的条件为永真,得到的结果就是未加约束条件的。

在SQL注入时会用到这个,例如select * from table1 where name='lala'给强行加上select * from table1 where name='lala' or 1=1这就又变成了无约束的查询了。

最近发现的妙用在于,在不定数量查询条件情况下,1=1可以很方便的规范语句。例如一个查询可能有name,age,height,weight约束,也可能没有,那该如何处理呢?

String sql=select * from table1 where 1=1

为什么要写多余的1=1?马上就知道了。


代码如下:

if(!name.equals("")){
sql=sql+"name='"+name+"'";
}
if(!age.equals("")){
sql=sql+"age'"+age+"'";
}
if(!height.equals("")){
sql=sql+"height='"+height+"'";
}
if(!weight.equals("")){
sql=sql+"weight='"+weight+"'";
}

如果不写1=1呢,那么在每一个不为空的查询条件面前,都必须判断有没有where字句,否则要在第一个出现的地方加where

where 1=1的写法是为了检化程序中对条件的检测
打个比方有三个参数a, b, c
@sql=select * from tb'
这三个参数都可能为空
这时你要构造语句的话,一个个检测再写语句就麻烦
比如
if @a is not null
@sql=@sql + " where a=' + @a
if @b is not null
这里你怎么写?要不要加where 或直接用 and ?,你这里还要对@a是否为空进行检测

用上 where 1=1 之后,就不存在这样的问题, 条件是 and 就直接and ,是or就直接接 or

拷贝表
create   table_name   as   select   *   from   Source_table   where   1=1;

复制表结构
create   table_name   as   select   *   from   Source_table   where   1 <> 1;

(0)

相关推荐

  • 深入理解where 1=1的用处

    where 1=1有什么用?在SQL语言中,写这么一句话就跟没写一样. select * from table1 where 1=1与select * from table1完全没有区别,甚至还有其他许多写法,1<>2,'a'='a','a'<>'b',其目的就只有一个,where 的条件为永真,得到的结果就是未加约束条件的. 在SQL注入时会用到这个,例如select * from table1 where name='lala'给强行加上select * from table1

  • C#多种操作excel的方法比较

    我们在做excel资料的时候,通常有以下方法. 一.导入导出excel常用方法: 1.用查询表的方式查询并show在数据集控件上. public static string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =C:\\08.xls;Extended Properties=Excel 8.0"; public static DataSet ds; protected void Page_Load(obj

  • React 模式之纯组件使用示例详解

    目录 什么是纯组件 纯组件解决了什么问题 怎么使用纯组件 CC: shouldComponentUpdate() 和 React.PureComponent FC: React.memo() 你可能并不需要纯组件 什么是纯组件 纯组件(Pure Component)这概念衍生自纯函数.纯函数指的是返回结果只依赖于传入的参数,且对函数作用域外没有副作用的函数.这种函数在相同参数下,返回结果是不变的.纯函数的返回值能被安全地缓存起来,在下次调用时,跳过函数执行,直接读取缓存.因为函数没有外部副作用,

  • javascript深入理解js闭包

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数

  • 对于Python中RawString的理解介绍

    总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2.r 代表的意思是: raw 3.r 只对其内的反斜杠起作用(注意单个 \ 的问题) raw string 有什么用处呢? raw string 就是会自动将反斜杠转义. >>> print('\n') >>> print(r'\n') \n >>> (注:出现了两个空行是因为 print() 会自

  • 简单理解Python中基于生成器的状态机

    简单生成器有许多优点.生成器除了能够用更自然的方法表达一类问题的流程之外,还极大地改善了许多效率不足之处.在 Python 中,函数调用代价不菲:除其它因素外,还要花一段时间解决函数参数列表(除了其它的事情外,还要分析位置参数和缺省参数).初始化框架对象还要采取一些建立步骤(据 Tim Peters 在 comp.lang.python 上所说,有 100 多行 C 语言程序:我自己还没检查 Python 源代码呢).与此相反,恢复一个生成器就相当省力:参数已经解析完了,而且框架对象正"无所事事

  • 理解PHP中的Session及对Session有效期的控制

    0.什么是session?        Session的中文译名叫做"会话",其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.目前社会上对session的理解非常混乱:有时候我们可以看到这样的话"在一个浏览器会话期间,...",这里的会话是指从一个浏览器窗口打开到关闭这个期间:也可以看到"用户(客户端)在一次会话期间"这样一句话,它可能指用户的一系列动作(一般情况下

  • 深入理解PHP内核(一)

    PHP作为一门简单而强大的语言,能够提供很多Web适用的语言特性.从实践出发,继弱类型变量原理探究后,本文继续带领大家深入理解php内核. 最近,和一个网友交流的时候,给我提了一个非常奇怪的问题.那就是,在一个运算中,加了一个引用之后,发现性能慢了一万倍.在我的脑海里面,引用是一个非常容易出错的问题,特别是PHP里面的引用,有非常多的陷阱.因为,以前专门研究过这一块PHP的源代码,所以,我可以比较清晰的解析引用到底是怎么一回事,希望,读了我这篇文章,能彻底理解这个问题.如果,有任何疑问,或者有一

  • freemarker 数字格式化深入理解

    一.使用内建函数c 特点: 不管其表现形式是怎样的(例如"123,456.123,456"."123456.123456"."000123456.123456000"."123,456.123456"."1,2345,6.123456"),只要小数分割符是'.'它就能转化成计算机能够识别的字符串形式,而且都是123456.123456,计算机处理的时候是没有那些所谓的千位分隔符的(空格或逗号),而且计算机支

  • 深入理解C# 装箱和拆箱(整理篇)

    装箱(boxing)和拆箱(unboxing)是C#类型系统的核心概念.是不同于C与C++的新概念!,通过装箱和拆箱操作,能够在值类型和引用类型中架起一做桥梁.换言之,可以轻松的实现值类型与引用类型的互相转换,装箱和拆箱能够统一考察系统,任何类型的值最终都可以按照对象进行处理. 装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作. 1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用类型向值类型转换时发生 //1. // 装箱和拆箱是一个抽象的概念 //2. // 装箱是将值类型转换为引

随机推荐