在做資料庫設計的時候,都一定會大幅使用關聯表格的設計方式,例如
學生資料跟
學生成績兩個表,學生資料表裡面就只單純放學生的個人基本資料,而學生成績中則放一些學生考試的成績資料,這兩個表之間再設計一個鍵值使其有關聯,如下面說明
學生資料 |
學生成績 |
|
學生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囉
沒有留言:
張貼留言