1. 程式人生 > 資料庫 >sql 條件判斷 if / case when then / ifnull

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的子查詢依然能用到表上的索引