|
在論壇看到人家面試的 sql:select 1 from table ,一下子反應(yīng)不過來,囧,不廢話,上機實操得永生: 測試場景: 1,執(zhí)行查詢: select 1 from table 生成沒有列名的臨時,每行的值是就是select后面的數(shù),1其實就是一個產(chǎn)量,如下圖:
2,執(zhí)行查詢: select count(1) from table 理解上一句SQL,這句就相對簡單,得出的值是table表的行數(shù)
3, 執(zhí)行查詢: select sum(1) from table ; 計算臨時列的總和。
PS:如果這里還不是很清楚,可以試試把1換成2,就清晰多了; 學習到這里,突然想起: where 1=1,這里也做下筆記 where 1=1是干什么的,為什么要這么寫?? select * from table where 1=1與select * from table1完全沒有區(qū)別,因為where后面的表達式一直為真; 其實之所以這么寫,是因為SQL注入(非攻擊那種,此注入是指嵌入到j(luò)ava/net代碼中,執(zhí)行數(shù)據(jù)查詢)的時候需要用到,加入1=1可以方便的規(guī)范語句, 例如,我要查詢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字句,否則要在第一個出現(xiàn)的地方加where
|
|
|