sql 條件判斷 if / case when then / ifnull
阿新 • • 發佈:2020-02-03
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的子查詢依然能用到表上的索引