只有在另一個包含一或多個相符資料欄位的 Access 資料表中有對應記錄時,您有時可能才會想要檢閱來自一個 Access 資料表的記錄。 例如,您可能會想要檢閱已處理至少一筆訂單的員工之員工記錄,以決定哪些員工符合獲得獎金的資格。 或者,您可能想要檢閱與員工居住在同一個城市的客戶之連絡資訊,這樣就能比對員工與客戶的資訊以安排面談。
當您想要比較兩個 Access 資料表並尋找相符資料時,您可以採取下列其中一種做法:
- 使用現有關聯或使用您為查詢用途所建立的聯結,從欄位包含對應資訊的各個資料表建立聯結這些欄位的查詢。 此方法提供最佳化的效能 (查詢傳回結果的速度),但您不能聯結具有不同資料類型的欄位。
- 建立一個查詢,用其中一個欄位作為另一個欄位的標準來比較欄位。 使用欄位作為另一欄位的標準通常比使用連接(joins)慢,因為連接會在讀取底層資料表前移除查詢結果中的列,而條件則是在讀取底層資料表後才套用於查詢結果。 不過,你可以用欄位作為欄位準則來比較資料型別不同的欄位,這是用 join 無法做到的。
本文探討如何比較兩個資料表以識別相符資料,並提供您可以搭配範例程序使用的範例資料。
您想要做什麼?
使用聯結比較兩個資料表
若要使用聯結比較兩個資料表,您需建立包含兩個資料表的選取查詢。 如果包含對應資料的欄位之資料表之間還沒有現有關聯,您需在要檢查比對的欄位建立聯結。 您可以視需要建立多個聯結,但每一組聯結欄位必須是相同或相容的資料類型。
假設您是大學的機構研究員,而您想要查看數學系的近期課程變化對學生的成績有何影響。 您對主修數學的學生之成績特別感興趣。 您已有儲存學生主修科目資料的資料表,以及儲存課程註冊資料的資料表。 成績資料儲存在 [課程註冊] 資料表中,而學生主修科目資料則是儲存在 [學生主修科目] 資料表中。 若要查看自近期課程變更以來主修數學者的成績有何變化,您需要檢閱來自註冊資料表的記錄,而此資料表在主修科目資料表中含有對應記錄。
準備範例資料
在此範例中,您建立可判定數學系的近期課程變化對數學課的學生成績有何影響之查詢。 您使用下列兩個範例資料表:[學生主修科目] 與 [課程註冊]。 將 [學生主修科目] 與 [課程註冊] 這兩個範例資料表新增到資料庫中。
Access 提供多種方式將這些樣本資料表加入資料庫。 你可以手動輸入資料,也可以將每張表格複製到試算表程式,再匯入工作表到 Access,或者將資料貼到文字編輯器(如記事本)中,再從產生的文字檔案匯入資料。
本節中的步驟解說如何在空白資料工作表中手動輸入資料,也解說如何將範例資料表複製到 Excel,然後將這些資料表匯入 Access。
學生主修科目
| 學生識別碼 | 年度 | 主修科目 |
|---|---|---|
| 123456789 | 2005 | 數學 |
| 223334444 | 2005 | 英文 |
| 987654321 | 2005 | 數學 |
| 135791357 | 2005 | 歷史 |
| 147025836 | 2005 | 生物 |
| 707070707 | 2005 | 數學 |
| 123456789 | 2006 | 數學 |
| 223334444 | 2006 | 英文 |
| 987654321 | 2006 | 心理學 |
| 135791357 | 2006 | 美術史 |
| 147025836 | 2006 | 生物 |
| 707070707 | 2006 | 數學 |
課程註冊
| 學生識別碼 | 年度 | 學期 | 課程 | 課程編號 | 成績 |
|---|---|---|---|---|---|
| 123456789 | 2005 | 3 | 數學 | 221 | A |
| 123456789 | 2005 | 3 | 英文 | 101 | B |
| 123456789 | 2006 | 1 | 數學 | 242 | C |
| 123456789 | 2006 | 1 | 數學 | 224 | C |
| 223334444 | 2005 | 3 | 英文 | 112 | A |
| 223334444 | 2005 | 3 | 數學 | 120 | C |
| 223334444 | 2006 | 1 | 政治學 | 110 | A |
| 223334444 | 2006 | 1 | 英文 | 201 | B |
| 987654321 | 2005 | 3 | 數學 | 120 | A |
| 987654321 | 2005 | 3 | 心理學 | 101 | A |
| 987654321 | 2006 | 1 | 數學 | 221 | B |
| 987654321 | 2006 | 1 | 數學 | 242 | C |
| 135791357 | 2005 | 3 | 歷史 | 102 | A |
| 135791357 | 2005 | 3 | 美術史 | 112 | A |
| 135791357 | 2006 | 1 | 數學 | 120 | B |
| 135791357 | 2006 | 1 | 數學 | 141 | C |
| 147025836 | 2005 | 3 | 生物 | 113 | B |
| 147025836 | 2005 | 3 | 化學 | 113 | B |
| 147025836 | 2006 | 1 | 數學 | 120 | D |
| 147025836 | 2006 | 1 | 統計學 | 114 | B |
| 707070707 | 2005 | 3 | 數學 | 221 | B |
| 707070707 | 2005 | 3 | 統計學 | 114 | A |
| 707070707 | 2006 | 1 | 數學 | 242 | D |
| 707070707 | 2006 | 1 | 數學 | 224 | C |
如果您要使用試算表程式輸入範例資料,可以跳過下一節。
手動輸入範例資料
開啟新資料庫或現有資料庫。
在 [建立] 索引標籤的 [資料表] 群組中,按一下 [資料表]。
Access 會在您的資料庫中新增新的空白資料表。注意
如果您開啟新的空白資料庫,則無需按照此步驟進行。不過,每當您需要在資料庫中新增資料表時,則要按照此步驟進行。
按兩下標題列中的第一個儲存格,然後在範例資料表中輸入欄位名稱。
根據預設,Access 會使用 [新增欄位] 文字,來代表標題列中的空白欄位,例如:
用方向鍵移動到下一個空白標頭格,然後輸入第二個欄位名稱。 (你也可以雙擊新儲存格。) 對每個欄位名稱重複這個步驟。
在範例資料表中輸入資料。
當您輸入資料時,Access 會推斷每個欄位的資料類型。 每個欄位都有特定的資料類型,例如 [數字]、[文字] 或 [日期/時間]。 設定資料類型可協助確保正確輸入資料,也可協助避免錯誤,例如在計算中使用電話號碼。 讓 Access 推斷這些範例資料表的資料類型,但請務必檢閱 Access 針對每個欄位推斷的資料類型。在完成輸入資料之後,請按一下 [儲存],或按 CTRL+S。
[另存新檔] 對話方塊隨即出現。在 [資料表名稱] 方塊中,輸入範例資料表的名稱,然後按一下 [確定]。
您會使用每個範例資料表的名稱 (例如 [學生主修科目]),因為本文程序各節中的查詢也使用這些名稱。
在完成輸入範例資料之後,就表示您已準備好比較兩個資料表。
除非您想要了解如何建立上一節中的資料表之範例資料為根據的工作表,否則請跳過下一節 (建立範例工作表)。
建立範例工作表
啟動您的試算表程式,然後建立新的空白檔案。 如果您使用 Excel,根據預設在啟動程式時會建立新的空白活頁簿。
複製上一節的第一個範例資料表,然後貼到第一個工作表 (以第一個儲存格做為開始)。 請務必複製標題列,因為標題列含有範例資料表的欄位名稱。
使用您的試算表程式所提供的技術,將工作表命名為與範例資料表相同的名稱。 例如,當您貼上 [課程註冊] 範例資料時,請將工作表命名為 [課程註冊]。
重複步驟 2 和 3,將第二個範例資料表複製到空白工作表,然後重新命名工作表。
注意
您可能需要將工作表新增到您的試算表檔案中。 如需有關將工作表新增到試算表檔案的資訊,請參閱試算表程式的說明。
將活頁簿儲存到您的電腦或網路中方便使用的位置,然後進行下一組步驟。
從工作表建立資料庫資料表
- 在新資料庫或現有資料庫中:
在 [外部資料] 索引標籤的 [匯入] 群組中,按一下 [Excel]。
或者
按一下 [更多],然後從清單中選取試算表程式。
[取得外部資料 - 程式名稱試算表] 對話方塊隨即顯示。 - 按一下 [瀏覽]、找到並開啟您在前述步驟建立的試算表檔案,然後按一下 [確定]。
[匯入試算表精靈] 隨即啟動。
根據預設,此精靈會選取活頁簿中的第一個工作表 (如果您確實按照上一節中的步驟,就是 [主修科目]),而來自該工作表的資料會顯示在精靈頁面的下方區段。 - 按 [下一步]。
- 在精靈的下一頁中,選取 [第 1 列是欄名] 核取方塊,然後按一下 [下一步]。
- 在下一頁中,您可以使用 [欄位選項] 底下的文字方塊和清單,來變更欄位名稱和資料類型,或省略匯入操作的欄位。 針對此範例,您不需要做任何變更。 按一下 [下一步]。
- 在下一頁中,選取 [無主索引鍵] 選項,然後按一下 [下一步]。
- 根據預設,Access 會將工作表名稱套用到您的新資料表。 接受 [匯入至資料表] 方塊中的名稱,然後按一下 [完成]。
- 在 [儲存匯入步驟] 頁面中,按一下 [關閉] 完成精靈。
- 重複步驟 1 到 7,直到您已從試算表檔案中的每個工作表建立資料表為止。
比較範例資料表並使用聯結尋找相符記錄
現在您已準備好比較 [課程註冊] 資料表與 [學生主修科目] 資料表。 因為您尚未定義兩個資料表之間的關聯,您需要在查詢中的適當欄位之間建立聯結。 資料表有多個相同欄位,而您將需為每一組相同欄位建立聯結:[學生識別碼]、[年度] 和 [課程] ([課程註冊] 資料表) 和 [主修科目] ([學生主修科目] 資料表)。 在此範例中,您只對數學主修感到興趣,所以您也將使用欄位準則限制查詢結果。
開啟您儲存範例資料表的資料庫。
在 [建立] 索引標籤上,按一下 [查詢設計]。
雙擊你想顯示的紀錄表——此例為 班級註冊 表,然後雙擊你比較的表——在此例中為 學生主修 表。
將 [課程註冊] 資料表的 [學生識別碼] 欄位拖曳到 [學生主修科目] 資料表的 [學生識別碼] 欄位。 在設計格線中會有一條線顯示於兩個資料表之間,表示您已建立聯結。 在這條線上按兩下,以開啟 [聯結屬性] 對話方塊。
檢閱 [聯結屬性] 對話方塊中的三個選項。 根據預設會選取選項 1。 在某些情況下,您需要調整聯結屬性以包含來自一個資料表的額外資料列。 因為您正嘗試只尋找相符資料,請保持讓聯結設為選項 1。 按一下 [取消],以關閉 [聯結屬性] 對話方塊。
您將需建立另外兩個聯結。 建立這些聯結的做法為:將 [課程註冊] 資料表的 [年度] 欄位拖曳到 [學生主修科目] 資料表的 [年度] 欄位,然後將 [課程註冊] 資料表的 [課程] 欄位拖曳到 [學生主修科目] 資料表上的 [主修科目] 欄位。
在 [課程註冊] 資料表中,按兩下星號 (*),以將資料表的所有欄位新增到查詢設計格線。
注意
當你用星號加入所有欄位時,設計網格中只會出現一欄。 出現的欄位會顯示表格名稱,後面跟著 (.) 點和星號 (*) 。 在此範例中,欄位名為 Class Enrollments.*。
在 [學生主修科目] 資料表中,按兩下 [主修科目] 欄位以將它新增到格線。
在查詢設計格線中,清除 [主修科目] 資料行的 [顯示] 列中的核取方塊。
在 [主修科目] 資料行的 [準則] 列中,輸入 [數學]。
在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。
查詢隨即執行,並只顯示主修數學者的數學成績。
使用欄位做為準則以比較兩個資料表
有時候您可能會想要根據含有相符資料欄位但具有不同資料類型,來比較資料表。 例如,一個資料表中的欄位可能具有 [數字] 資料類型,而您想要將該欄位與另一個資料表中具有 [文字] 資料類型的欄位比較。 當數字儲存成文字時 (無論是因為設計或其他原因,例如從另一個程式匯入資料),可能會造成含有類似資料但具有不同欄位類型的欄位。 因為您不能在具有不同資料類型的欄位之間建立聯結,您將需使用不同的方法來比較欄位。 您可以使用一個欄位做為另一個欄位的準則,來比較具有不同資料類型的兩個欄位。
假設您是大學的機構研究員,而您想要查看數學系的近期課程變化對學生的成績有何影響。 您對主修數學的學生之成績特別感興趣。 您已經有 [學生主修科目] 資料表和 [課程註冊] 資料表。 成績資料儲存在 [課程註冊] 資料表中,而學生主修科目資料則是儲存在 [學生主修科目] 資料表中。 若要查看主修數學者的成績有何變化,您需要查看來自註冊資料表的記錄,而此資料表在主修科目資料表中含有對應記錄。 不過,您想要用來比較資料表的其中一個欄位,具有與它的對應項目不同的資料類型。
若要使用欄位做為準則以比較兩個資料表,您需建立包含兩個資料表的選取查詢。 您會包含要顯示的欄位,而且也會包含與您要用來做為準則的欄位對應的欄位。 然後您會建立準則以比較資料表。 您可以視需要建立多個準則,以按照您所要的比較欄位。
若要圖解說明此方法,您將使用來自上一節的範例資料表,但您將把範例 [學生主修科目] 資料表的 [學生識別碼] 欄位之資料類型由 [數字] 變更為 [文字]。 因為您不能在兩個具有不同資料類型的欄位之間建立聯結,您將需使用一個欄位做為另一個欄位的準則,以比較兩個 [學生識別碼] 欄位。
變更 [學生主修科目] 的 [學生識別碼] 欄位之資料類型
- 開啟您儲存範例資料表的資料庫。
- 在 [瀏覽窗格] 中,以滑鼠右鍵按一下 [學生主修科目] 資料表,然後按一下捷徑功能表上的 [設計檢視]。
[學生主修科目] 資料表隨即在 [設計檢視] 中開啟。 - 在 [資料類型] 資料行中,將 [學生識別碼] 的設定由 [數字] 變更為 [文字]。
- 關閉 [學生主修科目] 資料表。 當系統提示您儲存變更時,請按一下 [是]。
比較範例資料表並使用欄位準則尋找相符記錄
下列程序顯示如何使用 [課程註冊] 的欄位做為 [學生主修科目] 欄位的準則,以比較兩個 [學生識別碼] 欄位。 透過使用 [相似] 關鍵字,即使欄位具有不同的資料類型,您還是可以比較這些欄位。
在 [建立] 索引標籤的 [其他] 群組中,按一下 [查詢設計]。
雙擊「 課程註冊」,然後雙擊「 學生主修」。
將 [課程註冊] 資料表的 [年度] 欄位拖曳到 [學生主修科目] 資料表的 [年度] 欄位,然後將 [課程註冊] 資料表的 [課程] 欄位拖曳到 [學生主修科目] 資料表的 [主修科目] 欄位。 因為這些欄位具有相同的資料類型,您可以使用聯結進行比較。 聯結是比較具有相同資料類型的欄位之慣用方法。
在 [課程註冊] 資料表中,按兩下星號 (*),以將該資料表的所有欄位新增到查詢設計格線。
注意
當你用星號加入所有欄位時,設計網格中只會出現一欄。 出現的欄位會顯示表格名稱,後面跟著 (.) 點和星號 (*) 。 在此範例中,欄位名為 Class Enrollments.*。
在 [學生主修科目] 資料表中,按兩下 [學生識別碼] 欄位以將它新增到格線。
清除設計格線的 [學生識別碼] 資料行之 [顯示] 列中的核取方塊。 在 [學生識別碼] 資料行的 [準則] 列中,輸入相似 [課程註冊].[學生識別碼]。
在 [學生主修科目] 資料表中,按兩下 [主修科目] 欄位以將它新增到格線。
清除設計格線的 [主修科目] 資料行之 [顯示] 列中的核取方塊。 在 [準則] 列中,輸入 [數學]。
在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。
查詢隨即執行,並只顯示主修數學者的數學成績。