sql 條件判斷 if / case when then / ifnull

1 if 和 ifnull

  • if 類似三元運算符,if(?=?,a,b) 爲true等於a,false等於b,類似三元表達式

  • ifnull函數用於在MySQL中將NULL值替換爲另外一個值

2 case 流程控制

簡單case函數

枚舉某個字段 或者 某個字段函數的所有值
如:

CASE country
	WHEN '中國' THEN
		'亞洲'
	WHEN '美國' THEN
		'北美洲'
	WHEN '日本' THEN
		'亞洲'
	ELSE
		'其他'
END

case搜索函數

類似if,case搜索函數可以寫判斷,找到第一個符合條件的case即結束

CASE
WHEN population > 80 THEN
	'大'
ELSE
	'小'
END
  • 配合count(), sum()實現分段統計

3 not in 和 not exists

  • null值代表未知的數據,比較運算符,比如=、< 或 <>,無法用來測試null值,必須使用 IS NULL 和 IS NOT NULL 操作符
  • not in 子查詢在有null的情況下,則均返回null

in 和 exist

  • in 將內表和外表作hash連接。hash連接:一個表作爲hash表,去掃描另一個表的每行數據,用得出來的行數據建立新的hash表,hash表存放在內存
  • exist 對外表作loop循環,分爲內外表,每掃描外表的一行數據都要在內表中查找與之相匹配的行,沒有索引的複雜度是O(N*M)
  • 效率對比:兩個表中一個較小一個較大,則子查詢表大的用exists,子查詢表小的用in;

not in 和 not exist

  • not in,對內外表都進行全表掃描,沒有用到索引
  • not exists的子查詢依然能用到表上的索引

4 or 運算並集

  • 複雜的查詢【包含運算等】將使or、in放棄索引而全表掃描
  • 可使用union, union all代替
  • union得到兩個查詢結果的並集,自動去重
  • union all 與union相同,但不去重
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章