連接資料表與查詢

連接資料表與查詢

當您在同一個 Access 查詢中併入多個資料來源時,可以根據各個資料來源之間的相互關係,來利用聯結來減少最終看到的記錄數量。 連接也可以用來結合兩個資料來源的記錄,讓多個來源的每一組記錄都成為查詢結果中的單一筆記錄。

本文討論各種連接類型,並示範如何在查詢中使用連接。 根據預設,如果您在查詢中使用的兩個資料來源之間已經有關聯,則會自動建立聯結。 如果有明確互相對應的欄位,也會建立聯結。 您可以刪除自動建立的聯結。 本文提供有關資料表關聯的基本資訊,包括如何建立資料表關聯。

附註: 您可以以聯結資料表的相同方式聯結查詢,也可以將兩者聯結。

本文內容

概觀

聯結的類型

聯結的資料表中若有共通值存在,則會顯示資料列

顯示某個資料表的所有資料列,以及另一個資料表的對應資料列

顯示來自這兩個資料表的所有資料列,並在有共通值存在時加以聯結

交叉聯結

根據不相等的欄位值聯結資料表

刪除聯結

概觀

資料庫是承載了資料表彼此邏輯關聯之資料的資料表集合。 您可以使用關聯來依資料表擁有的共通欄位連接資料表。 資料表可以包含任何數量的關聯,但每個關聯一律有確切兩個資料表。 在查詢中,關聯會以聯結表示。

當您新增資料表至查詢,Access 會根據資料表之間已定義的關聯來建立聯結。 您可以在查詢中手動建立聯結,即使它們之間未呈現已定義的關聯亦然。 如果您使用其他查詢 (而非資料表或除了資料表) 做為查詢的資料來源,您可以在來源查詢之間,以及這些查詢與用來做為資料來源的任何資料表之間建立聯結。

聯結的運作方式與查詢準則類似,在於會建立資料必須符合才能併入查詢作業中的規則。 與準則不同之處在於,聯結也會指定將符合聯結條件的每對資料列結合,以形成單一資料列。

聯結基本上共有四個類型:內部聯結、外部聯結、交叉聯結以及不相等聯結。 本文探索您可以使用的每個聯結類型,為何使用各個類型,以及如何建立聯結。

連接之於查詢,就像關聯性之於資料表:連接表示兩個來源的資料如何根據共通的資料值來做結合。 這裡有一張圖,顯示查詢 [設計檢視] 中的連接,以及在對話方塊中開啟的連接屬性:

[連接屬性] 方塊。

資料表之間的線代表聯結。 按兩下聯結來開啟 [聯結屬性] 對話方塊 (如圖所述),並檢閱或變更聯結。

連接有時具有方向性。 對話方塊的此區域顯示連接中哪些資料表代表甚麼,以及哪些欄位會用於連接資料表。

此區域指定連接類型:選項 1 是內部連接,選項 2 是左外部連接,選項 3 是右外部連接。

兩個資料表的欄位均可使用,並會顯示各資料表中與特定工作相關的資料。 內部連接中不會加入其他資料。 在外部連接中,查詢結果會包含其中一個表格裡不相關的資料。

頁面頂端

連接種類

連接基本上共有四種:內部連接、外部連接、交叉連接以及不相等連接。 交叉連接及不相等連接是進階的連接類型,極少使用;但是為了完全理解連接的運作方式,您還是應該要知道這兩種類型。

內部連接:僅結合兩邊資料表的相關資料

內部連結即是 Access 僅會在相關資料表中含有對應資料時,才加入該資料表的資料,反之亦然。 多數時候您都會使用內部連接。 當您建立連接而不指定其類型時,Access 即假定您要建立內部連接。 內部連接之所以有用,是因為您可以根據共通的值來結合兩個資料來源的資料:您只會在有完整資料時才會看到資料。

外部連接:所有關聯資料均正確結合,加上其中一個表格的其他所有記錄

外部連接跟內部連接一樣,只是加入了其中一個資料表剩餘的所有資料列。 外部連接具有方向性:左外部連接會加入左資料表 (即連接中的第一個資料表) 的所有記錄,而右外部連接會加入右資料表 (即連接中的第二個資料表) 的所有記錄。

完整外部連接:所有資料,只要可行就會結合

有些系統的外部連接會包含兩個資料表中的所有資料列,並將相符的資料列結合。 這就稱為完整外部連接,Access 並不直接支援此功能。 不過,您可以利用交叉連接和準則來獲得相同效果。

交叉連接:所有資料,以所有可能的方式結合

大多數時候,交叉連接只是將兩個資料表加入查詢後,卻忘記連接資料表所造成的副作用。 Access 將此舉視為是您要將資料表的每一筆記錄,與另一個資料表的每一筆記錄相結合,亦即所有可能的組合。 因為不會結合資料,所以這種連接極少產生有用的結果。 但還是有幾種您會需要用到交叉連接的狀況。

不相等連接:與一般的連接相同,只是使用不同的比較方式來結合資料列。

不相等連接是使用等號 (=) 以外的運算子來比較資料值,決定是否結合資料及其結合方式。 Access 並未直接支援不相等連接,不過您可以利用交叉連接及準則方式來獲得相同效果。

聯結的資料表中若有共通值存在,則會顯示資料列

若僅要顯示連接欄位中具有相符值的資料列,則應使用內部連接。 Access 會自動建立內部連接。

內部連接是最常見的連接類型。 它們可告訴查詢,來自其中一個聯結資料表中的資料列,與另一個資料表中的資料列對應 (基於聯結欄位中的資料)。 執行一個含有內部連接的查詢時,只有在連接的兩個資料表中皆具有相同值的資料列會被加入查詢運算。

我該如何使用內部連接?

大多數情況下,您不必做任何動作就可以使用內部連接。 若您加入查詢的資料表已含有關聯關係,則在您加入資料表時,Access 會自動在每一組關聯資料表之間建立內部連接。 若您強制執行參考完整性,則 Access 會在連接線上顯示 "1",標記哪一個資料表是處於一對多關聯性的「一」方,並在「多」方顯示無限符號 ()。

即使您尚未建立關聯,若您將兩個資料表新增至查詢,而這兩個資料表各有一個欄位具有相同或相容的資料類型,且其中一個聯結欄位為 主索引鍵,Access 就會自動建立內部聯結。 此情況下不會顯示「一」與「多」符號,因為參考完整性並未強制執行。

若您在查詢中新增查詢,且未在這些查詢間建立關聯性,則 Access 不會自動建立這些查詢之間,或是查詢與資料表之間的內部連接。 一般而言,您應該自行建立。 您會透過將欄位從其中一個資料來源拖放至另一個資料來源的欄位,藉此建立內部聯結。 Access 在兩個欄位之間顯示一條線,表示已建立聯結。

內部聯結的 SQL 語法

內部連接是以 SQL 的 FROM 子句指定,如下所示:

FROM table1 INNER JOIN table2 ON table1.field1 compare table2.field2

INNER JOIN 運算包含下列部分:

部分

描述

table1, table2

結合記錄的來源資料表名稱。

field1, field2

連接欄位的名稱。 若非數值,則欄位必須是相同的資料類型,且儲存相同類型的資料,但名稱不必相同。

compare

任何關聯性比較運算子:"="、"<"、">"、"<="、">=" 或 "<>"。

如需內部聯結語法的詳細資訊,請參閱內部聯結運算主題。

頁面頂端

顯示某個資料表的所有資料列,以及另一個資料表的對應資料列

外部聯結會告訴查詢,雖然聯結兩端的部分資料列能夠完全對應,但查詢應該包含其中一個資料表的所有資料列,以及另一個資料表中在聯結兩端有共通值的那些資料列。

外部連接又可分為左外部連接與右外部連接。 在左外部連接,查詢會加入 SQL 敘述的 FROM 子句中所列的第一個資料表所有資料列,然後僅將另一個資料列中,連接欄位在雙方資料表均有相同值的資料列加入結果。 在右外部連接,查詢會加入 SQL 敘述的 FROM 子句中所列的第二個資料表所有資料列,然後僅將另一個資料列中,連接欄位在雙方資料表均有相同值的資料列加入結果。

附註: 按兩下聯結,然後查看 [聯結屬性] 對話方塊,即可輕鬆地區分指定聯結中的哪個是左方資料表或右方資料表。 您可以也切換至 SQL 檢視,然後檢查 FROM 子句。

由於外部連接其中一端的部分資料列在另一個資料表中沒有對應的資料列,所以當資料列無法對應時,從另一個資料表傳回的查詢結果中會有一些空的欄位。

我該如何使用外部連接?

要建立外部連接時,請修改現有的內部連接。 若沒有內部連接存在,請建立一個,然後再將其變更為外部連接。

將內部連接變更為外部連接

  1. 在查詢 [設計檢視] 中,按兩下要變更的連接。

    [聯結屬性] 對話方塊即會出現。

  2. 在 [聯結屬性] 對話方塊中,注意選項 2 及選項 3 旁邊所列的選擇。

  3. 按一下您要使用的選項,然後按一下 [確定]。

  4. Access 會顯示連接並且顯示一個箭頭,從要包含其所有資料列的資料來源指向只有包含滿足連接條件之資料列的資料來源。

不明確的外部連接

若您建立的查詢含有一個 LEFT JOIN (左連接) 以及一個 INNER JOIN (內部連接),則 Access 可能無法判斷應該先執行哪一個運算。 因為先執行左方聯結或先執行內部聯結所得到的結果不同,Access 會顯示錯誤訊息:

若要修正此錯誤,您必須修改查詢,明確指示應該先執行的聯結。

外部聯結的 SQL 語法

外部連接是以 SQL 的 FROM 子句指定,如下所示:

FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 compare table2.field2

LEFT JOIN 和 RIGHT JOIN 運算由下列各部分組成:

部分

描述

table1, table2

結合記錄的來源資料表名稱。

field1, field2

連接欄位的名稱。 欄位必須有相同資料類型且含有相同種類的資料,但是不必有相同名稱。

compare

任何關聯性比較運算子:"="、"<"、">"、"<="、">=" 或 "<>"。

如需外部聯結語法的詳細資訊,請參閱左方聯結與右方聯結運算主題。

頁面頂端

顯示來自這兩個資料表的所有資料列,並在有共通值存在時加以聯結

當您想要顯示兩個資料表的所有資料列,並依共通值將其結合時,請使用完整外部聯結。 Access 並不直接支援完整外部聯結,但您可以利用聯集查詢達成相同效果。 以下程序說明如何執行此動作,但如果您需要聯集查詢的詳細資訊,請參閱請參閱小節。

若要使用聯集查詢執行完整外部聯結:

  1. 建立一個查詢,其中您想要用來進行完整外部聯結的欄位擁有左方外部聯結。

  2. 在 [常用] 索引標籤的 [檢視] 群組中,按一下 [檢視],再按一下 [SQL 檢視]。

  3. 按下 CTRL+C 以複製 SQL 程式碼。

  4. 刪除 FROM 子句結尾的分號,然後按下 ENTER。

  5. 輸入 UNION,然後按下 ENTER。

    附註: 當您使用聯集查詢來執行完整外部聯結時,請勿使用 ALL 關鍵字。

  6. 按下 CTRL+V,貼上您在步驟 3 複製的 SQL 程式碼。

  7. 在您貼上的程式碼中,將 LEFT JOIN 變更為 RIGHT JOIN

  8. 刪除第二個 FROM 子句結尾的分號,然後按下 ENTER。

  9. 新增 WHERE 子句,指定在 FROM 子句中所列的第一個資料表 (左方資料表) 中,聯結欄位的值為 NULL。

    例如,如果 FROM 子句為:

    FROM Products RIGHT JOIN [Order Details] 
    ON Products.ID = [Order Details].[Product ID]

    您會新增以下這個 WHERE 子句:

    WHERE Products.ID IS NULL

  10. 在 WHERE 子句的結尾輸入一個分號 (;),做為聯集查詢的結尾。

  11. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

交叉聯結

交互聯結與內部和外部聯結不同處在於,它們不會明確呈現在 Access 中。 在交叉連接中,來自一個資料表的每一個資料列,會與來自另一個資料表的每一個資料列結合,產生所謂的交叉乘積,或稱「笛卡兒乘積」。 每當您執行的查詢中有未明確聯結的資料表,結果會是交叉乘積。 交互聯結通常並非特意,但在一些情況下也很有用。

為什麼要使用交叉連接?

若您要查看兩個資料表或查詢之間所有可能的資料列組合,請使用交叉查詢。 例如,假設公司今年的銷售成績非常亮眼,您考慮要提供回饋給客戶。 您可以建置一個查詢,加總每一位客戶的購買額,再建立一個小資料表設定數種可能的回饋百分比,再於另一個查詢中結合兩個資料表,執行交叉查詢。 您最後會有一個查詢,顯示每位客戶的一組回饋假設。

我該如何使用交叉聯結?

當您在查詢中包含資料表或查詢,並且未為每個資料表或查詢建立至少一個明確聯結時,隨時會產生交叉聯結。 Access 會將來自每個資料表或查詢,未與任何其他資料表或查詢明確聯結的每一列結合到結果中的每個其他資料列。 考慮前一個段落中的回饋範例。 假設您有 91 位客戶,考慮採用的回饋比有五種。 您的交叉乘積會產生 455 個資料列 (91 乘以 5)。

如您所見,非刻意執行的交叉聯結可能會在查詢結果中產生大量的資料列。 此外,這些結果通常沒有意義,因為如果您實際上不想將每一個資料列與每個其他資料列合併,結果中顯示的多數合併的資料列將沒有意義。 最後,使用非刻意交互聯結的查詢可能需要很長的時間執行。

查詢設計檢視中無意間產生的交叉連接

1.圈選的欄位應該彼此聯結。

無意間產生的交叉連接

1.注意,記錄數量非常大。

更正後的查詢結果

1.注意,現在的記錄數量變得小得多。

頁面頂端

根據不相等的欄位值聯結資料表

連接並不一定要根據連接欄位的相等性。 連接可以是根據任何比較運算子進行,例如大於 (>)、小於 (<) 或不等於 (<>)。 不是根據相等性的連接,稱為不相等連接。

若您要根據不相等的欄位值來結合兩個資料來源的資料列,請使用不相等連接。 通常來說,不相等連接是依據大於 (>)、小於 (<)、大於等於 (>=) 或是小於等於 (<=) 比較運算子來進行。 而根據不等於 (<>) 運算子所執行的不相等連接,傳回的資料列數量可能與交叉連接同樣大量,有時難以解讀其結果。

我該如何使用不相等連接?

在 [設計] 檢視中不支援不相等聯結。 如果想要使用它們,您必須使用 SQL 檢視。 不過,您可以在 [設計] 檢視中建立聯結,切換至 SQL 檢視,找到等號 (=) 比較運算子,並變更您想要使用的運算子。 這麼做之後,如果您一開始是在 SQL 檢視中將比較運算子變更為等號 (=),您只能再次於 [設計] 檢視中開啟查詢。

刪除連接

若 Access 自動建立您不想使用的連接,或是您建立了錯誤的連接 (例如連接兩個具有類似資料類型的欄位時),您可以直接刪除連接。

  1. 在查詢設計格線中,按一下要移除的連接。

  2. 按下 DELETE

-或-

  • 在查詢設計格線中,以滑鼠右鍵按一下要移除的聯結,然後按一下 [刪除]。

頁面頂端

請參閱

使用新增查詢將記錄新增至資料表

使用聯集查詢合併多個選取查詢的結果

建立以多個資料表為基礎的查詢

建立、編輯或刪除關聯

增進您的 Office 技巧
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×