小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

select 1 form 理解

 昵稱9283147 2016-05-05

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

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

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 
復(fù)制代碼
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+"'";   
}   
復(fù)制代碼

 

如果不寫1=1呢,那么在每一個不為空的查詢條件面前,都必須判斷有沒有where字句,否則要在第一個出現(xiàn)的地方加where

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多