中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

where 1=1

發布時間:2020-08-10 19:02:59 來源:ITPUB博客 閱讀:172 作者:zhuguoli200851 欄目:數據庫


文章轉載自「開發者圓桌」一個關于開發者入門、進階、踩坑的微信公眾號
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='test'給強行加上select * from table1 where name='test' or 1=1這就又變成了無約束的查詢了。


然而where 1=1的妙處不僅如此,這些使用方法在書本中可能看不到,它們多數來自實際項目。


多條件查詢


在不定數量查詢條件情況下,where 1=1可以很方便的規范語句。例如一個查詢可能有name,age,phone查詢條件,也可能沒有,那該如何處理呢?


注意,這里寫了一個多余的where 1=1。

String sql="select * from table1 where 1=1";

StringBuffer buffer = new StringBuffer();

buffer.append(sql);

if (null != name && !"".equals(name)) {

 buffer.append(" and name = " + name);

}

if (null != age && !"".equals(age)) {

 buffer.append(" and age = " + age);

}

if (null != phone && !"".equals(phone)) {

 buffer.append(" and phone like '%" + phone + "%'");

}

如果不寫1=1呢,那么在每一個不為空的查詢條件面前,都必須判斷有沒有where子句,然后在第一個出現的地方加上where。


當然,一般情況下是多表關聯查詢,如果SQL中已經出現過where子句,那么就沒必要添加where 1=1了,例如:String sql=select * from table1,table2 where table1.id=table2.id


如果你正在使用Hibernate、Mybatis等ORM框架的話,這樣的問題不需要擔心,這些ORM框架都進行了良好的處理。下面是Mybatis的一個配置樣例:

<select id="findContact" parameterType="Map" resultMap="ContactResult">

select * from table1

<where>

<if test="cusId!=null and cusId!=' ' ">

and cusId = #{cusId}

</if>

</where>

</select>


表拷貝


所謂表的拷貝就是以一個表為源表,拷貝出一個數據和結構都一樣的表,以Oracle為例,其他數據庫語法自行參考,基本上大同小異。


拷貝表(where 1=1永為true,拷貝表結構和數據)

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


復制表結構(where 1<>1永為false,不拷貝數據,僅復制表結構)

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


有很多技術書籍,并沒有使用where 1=1而是采用比較復雜的判斷邏輯,從這一點也可以看出書本知識與實踐的不同,在實踐中,開發者會不斷使用省事省力的方法,而不是拘泥于書本。


where 1=1可能還有其他方面的應用案例,大家不妨留言告知,精選出來,讓更多人學會使用1=1這個小的技巧。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

志丹县| 河南省| 乌兰县| 武胜县| 临洮县| 莱州市| 息烽县| 商城县| 介休市| 南涧| 商都县| 策勒县| 新邵县| 雷波县| 凤阳县| 禄丰县| 泾源县| 崇文区| 肥西县| 益阳市| 贵州省| 江达县| 永仁县| 石渠县| 中方县| 汤阴县| 济南市| 安庆市| 浦东新区| 淮南市| 镇赉县| 望江县| 连山| 茌平县| 镇原县| 夏津县| 玉门市| 兴化市| 县级市| 莲花县| 琼结县|