SQL進階知識點總結
阿新 • • 發佈:2019-01-01
一、CASE表示式(類似DECODE,IF)
1、兩種表示式
--簡單case表示式
case sex
when '1' then '男'
when '2'then '女'
else '其它' end
--搜尋case表示式
case
when sex='1'then '男'
when sex='1'then '女'
else '其它' end
注意事項:
- 各分支條件返回的資料型別必須一致;
- 不要忘記寫end;
- 養成寫else子句的習慣;
2、解決場景如下:
- 行列轉化:將group by計算出來的一維表進行行列轉換,變成類似資料透檢視的二維表;
- 已有資料重新更新:用case的時候只執行一次,防止了用兩次update的時候第一次被更新的值用在了第二次的語句中,重複更新發生錯誤;
- 與約束的結合:check是對列值輸入的時候加了限制,在使用check加限制的時候結合case when可以結合其他的列進行限制,更加靈活;
- 表之間的資料匹配:不同的表匹配涉及到(in,exists的用法)
- 針對聚合結果的條件分支:在case中可以使用聚合函式,在聚合函式中也可以使用case表示式
- 特別說明:新手用where、having子句進行分支,高手用select進行分支;
二、自連線
1、用自連線實現可重排列、排列、組合
- 直接取數就是笛卡爾積,就是可重排列;加上where條件<>就是排列,加上where條件>就是組合;
2、查詢區域性不一致的列;
3、排序(不依賴與資料庫特有函式的排序,可拓展);
三、三值邏輯和NULL
- 三值:true false unknown;
- null不是值,對null使用比較謂詞後得到的結果就是unknown,因為比較謂詞只適用於值;
- in 和exists 可以互相替代使用,但是not in和 not exists不能互相替換,如果有null的時候,需要使用not exists;
- 極值函式在統計時會把null的資料排除掉;但是如果資料存在比較物件為空的時候,建議使用all,或者使用coalesce函式將返回的null處理為合適的值;