資料庫系統概論:第 七章 混合查詢操作 下一頁 |
第七章 混合查詢操作
7-1 子查詢與合併混合查詢
7-1-1 簡介 說實在的,由單一表格上查詢資料的機會並不多,原因是我們建立資料庫時,須考慮他的效益,大多會將一個表格分解成多個表格,再將表格之間建立關聯,才可節省記憶體空間,也能滿足真實環境的變遷。因此,每一個訊息的查詢大多會牽動到 2 個以上表格。到目前為止,對多表格的查詢我們介紹了多重子查詢(第四章),以及表格合併查詢(第五章),多重子查詢常常無法得到滿足的答案,除非訊息之間以串聯方式連接,用合併查詢最容易得到答案,但它所佔用的記憶體空間太大,對於資料量較大的資料庫系統根本無法可行。 兩查詢技巧都有它的優缺點,我們就擷取雙方的優點,思考一種混合式查詢技巧,也就是結合子查詢與合併查詢之功能。還未介紹之前,溫習一下重要的觀念,不管何種查詢技巧,所得到的結果都是一個『動態資料表』。我們的方法就是利用子查詢產生一個較小的『動態資料表』,再來與原資料表合併。或者,資料表合併之前,都先經過子查詢過濾掉一些無關的訊息,產生較精簡的資料表之後再來合併,如此就可以減少許多記憶體空間,執行效率也比較高。 我們再來回顧 SQL Select 查詢語句,如圖 7-1 所示。在select 命令行內(如 (1)),表示要擷取那些欄位,也可以利用某一子查詢命令將結果填寫於此。又在 From 命令行中(如 (2)),表示合併那些資料表,但也可以由某一子查詢得到動態資料表來取代。在 Where 命令行中,某一欄位內容如符合某一數值則篩選條件成立,但此數值也可以由某一子查詢得到(如 (3))。如果我們善加利用此特性,即可達到混合查詢的功能。
圖 7-1 SQL Select 命令的特性 甚至我們可以建立暫存資料表,並將某些查詢後的結果存放於該表,再利用它與其它表格做合併處理,使用完後再將這些暫存表格刪除,如此不但可以提高執行速度,在編寫查詢程式時,也比較不會遇到困難,這方面我們將在下一章介紹。 7-1-2 範例研討:查詢系別課程設計 (A)程式功能:Ex7_1 請查詢『資訊管理系』全學年的課程,請依照課程代碼、課程名稱、必選修、學分數支順序印出。 (B)系統分析: 在我們用合併查詢當然可以得到答案,但必須合併 department 與 all_course 兩資料表,如此可能造成系統負荷,如下圖所示。
吾人可先由 department 表中查詢出『資訊管理系』的系別編碼 (dep_ID),它只有一筆資料的表格,再與 all_course 表格合併,不但可以找到結果,也不會造成系統負擔。 (C)程式範例:
7-1-3 自我挑戰:查詢班級名冊 (A) 程式功能:PM7_1 請查詢『進四資管二丙』班級學生名冊,請依照學號、姓名、性別、電話、郵件信箱之順序印出。 (B) 系統分析:
7-1-4 自我挑戰:查詢系所教師名冊 (A) 程式功能:PM7_2 請查詢『資訊管理系』教師名冊,請依照、姓名、性別、職務、電話、郵件信箱之順序印出。 (B) 系統分析:
|
翻轉工作室:粘添壽
資料庫系統概論(含邏輯設計)
翻轉電子書系列:
|