在論壇看到人家面試的 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