摘 要: 自身連接查詢是數據庫操作中較難理解的一類查詢,也是全國計算機等級考試二級考試大綱以外的內容,文章針對在二級Access上機考試中出現的這類查詢給出了解決思路和辦法。
關鍵詞: 全國計算機等級考試二級 Access 自身連接查詢
一、前言
在校非計算機專業的大學生至少應通過全國計算機等級考試二級,以此來證明自己的計算機能力。對于文史類的學生來說,Access無疑是最簡單、最實用的一門語言了,因此這幾年報考此科目的人數越來越多,而且通過率也位于其它二級語言之首。在二級Access上機考題當中,查詢幾乎是必考試題,但有一道自身連接查詢的考題卻讓幾乎所有的考生望而生畏、無從下手。
這道試題題目如下:
tStud表(如圖1)是學校歷年來招收的學生名單。對于現在正在讀書的“在校學生”,均有家長身份證號,對于已經畢業的學生,家長身份證號為空。
例如,表中學生“張春節”沒有家長身份證號,表示張春節已經從本校畢業,是“校友”。
表中學生“李強”的家長身份證號為“110107196201012370”,表示李強為在校學生。由于在tStud表中身份證號“110107196201012370”對應的學生姓名是“李永飛”,表示李強的家長是李永飛,而李永飛是本校校友。
“張天”的家長身份證號為“110108196510015760”,表示張天是在校學生;由于在tStud表中身份證號“110108196510015760”沒有對應的記錄,表示張天的家長不是本校的校友。
請按要求創建一個查詢,要求按照身份證號碼找出所有學生家長是本校校友的學生記錄。輸出學生身份證號、姓名及家長姓名三列內容,標題顯示為“身份證號”、“姓名”和“家長姓名”,所建查詢命名為“qT2”。
這道試題題目較長、較拗口,只讀完題目不少考生就已滿頭霧水了,更別說如何做題了。
二、分析問題
1.如何判斷“校友”
實際上這個tStud表說明了一個事實情況:一個學生的母校和他家長的母校有可能相同,即學生和他的家長在同一個學校上過學。如果母校相同,則學生和他的家長就是校友,否則不是校友。
是否校友,是通過學生和家長的身份證號來判斷的。如果tStud表中A行第三列的一個家長身份證號在第一列的B行出現過,則說明B行的學生和A行的學生(也就是家長)是校友。比如第二行李強的家長身份證號和第三行的李永飛的身份證號相同。因此,李永飛和他的家長李強就是校友;同樣,王愛愛和她的家長王一是校友,王佳佳和她的家長王教育也是校友;而張天家長的身份證號“110108196510015760”在tStud表中第一列沒出現過,所以張天和他家長就不是校友。
通過以上分析我們發現,要判斷是否為校友,就得用第三列的一個家長身份證號依次和第一列所有的身份證號進行對比,如果有相同的身份證號,則說明這兩個學生是校友。那么題目所要求的“找出所有學生家長是本校校友的學生記錄”問題就可迎刃而解。現在的問題就轉化為在一個表中如何比較一列中某條記錄值和另一列記錄值是否相等。
2.如何比較記錄值是否相等
對兩個表中記錄值的比較我們可以很輕松地通過選擇查詢來完成,而對同一個表中記錄值的這種比較就需用到另一種查詢來完成,這就是自身連接查詢。
所謂自身連接查詢就是使一個表同其自身進行連接所創建的查詢。這樣就如同操作兩個表一樣來創建一個選擇查詢,雖然規范化的數據庫中很少使用自連接,但是想比較一個表中各記錄的值時,就可以使用自身連接減少查詢的次數。這個是全國計算機等級考試二級考試大綱之外的一個知識點。
三、解決辦法
1.創建自身連接
在查詢設計視圖中,將tStud表添加兩次,第二次添加的表Access系統會自動被命名為tStud_1。因為兩個表要通過身份證號建立關系,所以可將tStud表的“家長身份證號”字段拖動到tStud_1表的“身份證號”字段上,這樣兩個表就建立了關系。由于左邊的Stud表是通過學生的家長身份證號和右邊的tStud_1表建立的關系,因此左邊的tStud表可以看作“學生表”,右邊的tStud_1表可以看作“家長表”。
2.添加字段
根據題目要求“輸出學生身份證號、姓名及家長姓名三列內容,標題顯示為‘身份證號’、‘姓名’和‘家長姓名’”。這里的“學生身份證號”顯然就指的是“學生表”——tStud表的“身份證號”字段,“學生姓名”指的就是tStud表的“姓名”字段,而“家長姓名”當然就是“家長表”——tStud_1表的“姓名”字段了,在設計視圖的“字段”行應將tStud_1表的“姓名”更改為“家長姓名:姓名”以顯示“家長姓名”的效果。
將該查詢以“qT2”為名稱保存,最終的設計視圖如圖2所示。
3.檢驗數據
運行qT2查詢,將會看到如圖3所示的結果,與我們前面對圖1的分析結果相同。
四、結語
自身連接查詢因為邏輯結構復雜,語義往往難以理解,但語法結構簡單,所以很容易在設計視圖中完成題目的要求。雖然在目前的全國計算機等級考試二級Access上機題庫中只有這一道試題是考查該知識點,但以后難免還會出現同類試題。希望各位老師和同學能理解它、用好它。
參考文獻:
[1]全國計算機等級考試命題研究組編﹒全國計算機等級考試新版上機考試題庫二級Access[M]﹒成都:電子科技大學出版社,2009﹒
[2]古文瑋﹒SQL自連接詳解[J]﹒考試周刊,2007,(16):85-86.