yxhxj2006

          常用鏈接

          統計

          最新評論

          深入理解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; 

          posted on 2014-05-18 01:04 奮斗成就男人 閱讀(286) 評論(0)  編輯  收藏 所屬分類: SQL

          主站蜘蛛池模板: 宁晋县| 高州市| 西峡县| 曲阳县| 黔西县| 资兴市| 田东县| 桂阳县| 新晃| 呼伦贝尔市| 东平县| 白银市| 九寨沟县| 神池县| 抚松县| 思南县| 淳化县| 文化| 靖安县| 仁化县| 宣汉县| 游戏| 台山市| 彭泽县| 岑溪市| 贵港市| 涿州市| 蓝山县| 张家口市| 清涧县| 探索| 应用必备| 张家界市| 龙口市| 屏东市| 远安县| 沾益县| 崇礼县| 揭西县| 庆元县| 望谟县|