1. 程式人生 > >SQL進階知識點總結

SQL進階知識點總結

一、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

注意事項:

  1. 各分支條件返回的資料型別必須一致;
  2. 不要忘記寫end;
  3. 養成寫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處理為合適的值;