select 1 form 理解


在論壇看到人家面試的  sql:select 1 from table  ,一下子反應不過來,囧,不廢話,上機實操得永生:

測試場景:
table表是一個數據表,里面有4行數據;如下圖

1,執行查詢:

select 1 from table 

生成沒有列名的臨時,每行的值是就是select后面的數,1其實就是一個產量,如下圖:

2,執行查詢:

select count(1) from table

理解上一句SQL,這句就相對簡單,得出的值是table表的行數

 3, 執行查詢:

select sum(1) from table

計算臨時列的總和。

 

 

PS:如果這里還不是很清楚,可以試試把1換成2,就清晰多了;

學習到這里,突然想起: where 1=1,這里也做下筆記

where 1=1是干什么的,為什么要這么寫??

select * from table where 1=1與select * from table1完全沒有區別,因為where后面的表達式一直為真;

其實之所以這么寫,是因為SQL注入(非攻擊那種,此注入是指嵌入到java/net代碼中,執行數據查詢)的時候需要用到,加入1=1可以方便的規范語句,

例如,我要查詢name,age,height,weight的時候,有時候不需要用到where,有時候卻需要用到where,那該如何處理呢,

為了方便,引用他人代碼:

String sql=select * from table where 1=1 
if(!name.equals("")){   
sql=sql+"TemplateID='"+TemplateID+"'";   
}   
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM