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

          主站蜘蛛池模板: 宽城| 贺兰县| 喀喇沁旗| 隆德县| 奉新县| 宝鸡市| 湘潭市| 射阳县| 开远市| 白山市| 秭归县| 沾益县| 章丘市| 南召县| 绥阳县| 饶平县| 定西市| 正蓝旗| 鸡西市| 中卫市| 金塔县| 沾化县| 桂阳县| 和龙市| 于田县| 孟津县| 邵武市| 易门县| 中阳县| 华坪县| 广宗县| 南雄市| 红桥区| 抚州市| 全州县| 阳春市| 永昌县| 朝阳区| 克拉玛依市| 渝北区| 营山县|