SQL中where 1=1語(yǔ)句的作用
where 1=1有什么用?在SQL語(yǔ)言中,寫(xiě)這么一句話(huà)就跟沒(méi)寫(xiě)一樣。但是這看似多余的一條語(yǔ)句,卻有其獨(dú)特的用處。
select * from table1 where 1=1與select * from table1完全沒(méi)有區(qū)別,甚至還有其他許多寫(xiě)法,1<>2,'a'='a','a'<>'b',其目的就只有一個(gè),where的條件為永真,得到的結(jié)果就是未加約束條件的。
在SQL注入時(shí)會(huì)用到這個(gè),例如select * from table1 where name='lala'給強(qiáng)行加上select * from table1 where name='lala' or 1=1這就又變成了無(wú)約束的查詢(xún)了。
最近發(fā)現(xiàn)的妙用在于,在不定數(shù)量查詢(xún)條件情況下,1=1可以很方便的規(guī)范語(yǔ)句。例如一個(gè)查詢(xún)可能有name,age,height,weight約束,也可能沒(méi)有,那該如何處理呢?
String sql=select * from table1 where 1=1
為什么要寫(xiě)多余的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+"'";
}
如果不寫(xiě)1=1呢,那么在每一個(gè)不為空的查詢(xún)條件面前,都必須判斷有沒(méi)有where字句,否則要在第一個(gè)出現(xiàn)的地方加where
今天看到:"SELECT * FROM strName WHERE 1 = 0";
不理解為什么有1=0?
查詢(xún)得出答案:
該select語(yǔ)句主要用于讀取表的結(jié)構(gòu)而不考慮表中的數(shù)據(jù),這樣節(jié)省了內(nèi)存,因?yàn)榭梢圆挥帽4娼Y(jié)果集。
另外,這個(gè)用在什么地方呢?主要用于創(chuàng)建一個(gè)新表,而新表的結(jié)構(gòu)與查詢(xún)的表的結(jié)構(gòu)是一樣的。如下SQL語(yǔ)句:
create table newtable as select * from oldtable where 1=0;
【編輯推薦】
SQL中UNION指令的用法
遠(yuǎn)程連接sql server服務(wù)器的方法
測(cè)試SQL語(yǔ)句執(zhí)行時(shí)間的方法