資料庫系統概論:第 五章 多重子查詢操作 下一頁 |
第五章 多重子查詢操作 5-1 多重子查詢簡介
5-1-1 多表格的迷失 也許您會發問為何需要那麼多表格,為何不要一個表格就好?沒錯許多情況下一個表格就可以達成,但往往會造成資料不一致性的問題,以 students 學生資料為例,如果如圖 5-1(a) 設計,將學生的資料詳細填入一個表格內(students),雖然可以容易攫取資料,但容易產生不一致性的問題。譬如班級名稱每年都要變更,今年『四資二甲』,明年就須變更為『四資三甲』,則每年都需對每一位學生資料變更,萬一有位學生變更錯誤,就會產生不一致的問題。如果我們將學生的班級名稱,以代碼 (class_ID) 取代,再另外產生 classes 班級資料表,如圖 5-1(b) 所示,就可以解決此問題(當然還有其它原因,我們在第九章說明)。但當我們謹對 students 資料表擷取資料時,僅能顯示班級代碼,並無法顯示班級名稱。因此,需要再由 classes 表內再查詢出班級名稱。由此可見,須查詢兩個資料表才可以得到正確的訊息,如此則需要兩個查詢,需要子查詢來串接。
圖 5-1 表格之間關聯 當然,還有其他查詢技巧可以解決此問題,譬如合併查詢、、等等。但本章先介紹多重子查詢的技巧如何。 5-1-2 多重子查詢運作 許多情況,一個查詢子句並沒有給我們一個完整的答案,也需要連結多個子句才能達成,這就是多重子句的查詢,其架構如下圖所示。
圖 5-2 多重子查詢的運作程序 最上層子查詢是我們想得到結果,但它的過濾條件可能需要另一個子查詢來得到。由此可見,查詢動作是由下往上遞傳,子查詢(三)得到的結果,經過子查詢(二)的連結過濾,得到的結果,再經由子查詢(一)得到最後的結果。子查詢之間連結判斷可區分三大類: (1) 單一判斷(=、>、!=、<):下層子查詢僅輸出一個結果(select 敘述),比較判斷是否符合條件。 (2) 多重輸出(In、No In、Exit、No Exit):下層子查詢的結果超過一個輸出時,則:
多重查詢的基本格式如下:
其中『比較運算子』可以是:
|
翻轉工作室:粘添壽
資料庫系統概論(含邏輯設計)
翻轉電子書系列:
|