資料庫系統概論第 五章 多重子查詢操作      下一頁

第五章 多重子查詢操作

5-1 多重子查詢簡介

內容:

  • 5-1-1 多表格的迷失

  • 5-1-2 多重子查詢運作

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) 多重輸出(InNo InExitNo Exit)下層子查詢的結果超過一個輸出時,則:

    • In 表下層輸出元素,每個都執行一次。

    • No In下層子查詢沒有輸出,則執行一次。

    • Exit下層子查詢有任何相符輸出,則執行一次。

    • No Exit下層子查詢沒有相符輸出,則執行一次。

多重查詢的基本格式如下:

Select 欄位_1, 欄位_2, ..

From 表格

Where 欄位名稱 比較運算子 (Select 欄位

                                           From 表格

                                           Where 條件判斷);

其中『比較運算子』可以是:

    • 一般比較運算:=><..

    • 模糊比較InNot InCaseExistsNot Exists

翻轉工作室:粘添壽

 

資料庫系統概論(含邏輯設計)

 

 

翻轉電子書系列: