2006年11月7日

Outer join & Case

在做資料庫設計的時候,都一定會大幅使用關聯表格的設計方式,例如學生資料學生成績兩個表,學生資料表裡面就只單純放學生的個人基本資料,而學生成績中則放一些學生考試的成績資料,這兩個表之間再設計一個鍵值使其有關聯,如下面說明
學生資料 學生成績
ID 姓名
1 大呆
2 二呆
3 三呆
學生ID 科目 分數
1 國語 88
2 國語 75
3 國語 82
1 數學 95
3 數學 86
像這樣子關聯式設計的優點我就不用多說了,主要的問題就是如果一位學生缺考了,資料表裡也因此少了一筆資料,若老師要把每個學生的成績抓出來的時候,可能只是少了資料,假設我們吹毛求疵一點,希望看到的每位學生的成績資料筆數都一樣,那麼我們就會使用 outer join 的方式做資料撈取的動作。
select student.姓名,scroe.科目,score.成績 from 學生資料 as student left outer join 學生成績 as score on student.ID=score.學生ID
不過因為 outer join 沒對上的資料,系統會自動給於 NULL 值,這又可能不是我們想要的,我們需要的是 當沒有對上的成績欄位希望能主動給他一個 0 的值,這時候 CASE 就派上用場啦,
select student.姓名,scroe.科目,CASE WHEN score.成績 is NULL THEN 0 ELSE score.成績 END  from 學生資料 as student left outer join 學生成績 as score on student.ID=score.學生ID
這樣原本會跑出NULL的欄位就會變成0囉

沒有留言: