where 1=1有什么用?

为什么要在sql语句后边加上where 1=1 ,对于初次见到的童鞋确实很纳闷。

觉得select * from table1 where 1=1 与 select * from table1完全没有区别。

其实这种想法是错的。记住本落格尔的名言【存在则合理】~~~

不管sql语句中 where 1=1还是1<>2,'a'='a','a'<>'b',其目的就只有一个,where 的条件为永真,得到的结果就是未加约束条件的。

在SQL注入时会用到这个,

例如 :  DELETE FROMtable_a WHERE a= '落尘曦' 

给强行加上 DELETE FROM table_a WHERE a= '落尘曦' or 1=1

本来是删除a值为落尘曦的这一条数据,这就又变成了无约束的删除了。

1=1 永真, 1<>1 永假。

例如一个模糊查询可能有a, b, c, d 约束,也可能没有,那该如何处理呢?

String sql  =  select * from table1 where 1=1  ;
if(!a.equals("")){
sql=sql+"a='"+a+"'";
}
if(!b.equals("")){
sql=sql+"b'"+b+"'";
}
if(!c.equals("")){
sql=sql+"c='"+c+"'";
}
if(!d.equals("")){
sql=sql+"d='"+d+"'";
}

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

where 1=1的写法是为了检化程序中对条件的检测

上述例子的四个参数都可能为空, 这时你要构造语句的话,一个个检测再写语句就麻烦

这里你怎么写?要不要加where 或直接用 and ?,你这里还要对参数是否为空进行检测

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

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


还不理解?

1=1的用处   主要用来构件动态SQL 

String sql  =  "select a,b from table_a  where 1=1 "; 
if(!b.equals(""))
      sql += "and  b='"+b+"'";
当用户选择了b (  假如b值为qwe 

结果就是:String sql  =  ''select a,b from table_a  where 1=1 and  b= 'qwe'; 

但是当用户没有选择b  那b就是一个空值 

结果就是:String sql  =''select a,b from table_a  where 1=1''; ,运行也不会出错,相当于没有限制b这个条件。

但是如果没有1=1的条件,则l String sql  =''select a,b from table_a  where'' ; 这样就会报错。 


1<>1 的用处: 用于只取结构不取数据的场合 
例如: 
create table table_temp tablespace  tbs_temp  as  select * from table_ori  where 1<>1 
建成一个与table_ori 结构相同的表table_temp,但是不要table_ori 里的数据。(除了表结构,其它结构也同理) 

除了1=1 或1<>1之外的其它永真永假的条件同理。

拷贝表 

create   table_name   as   select   *   from   Source_table   where   1=1;

复制表结构 

create   table_name   as   select   *   from   Source_table   where   1 <> 1; 



  • 82
    点赞
  • 247
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心歌技术

打赏不能超过你的早餐钱!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值