連接資料表與查詢

連接資料表與查詢

重要:  本文係由機器翻譯而成,請參閱免責聲明。本文的英文版本請見這裡,以供參考。

當您在 Access 查詢中包含多個資料來源時,您會使用聯結,來限制您想要的記錄,請根據彼此相關的資料來源的方式。您也使用聯結結合兩個資料來源的記錄,讓記錄來源中的各個成對變成查詢結果中的一筆記錄。

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

附註: 您可以在相同的方式來加入表格,也可以加入同時加入查詢。

本文內容

概觀

聯結的類型

顯示資料列中連接的資料表中的相同值存在

顯示所有資料列從一個資料表,以及乙資料表資料列

顯示兩個表格中的所有資料列,並加入相同值存在

交叉連接

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

刪除連接

概觀

資料庫是獨自承擔,此邏輯之間的關係的資料的資料表集合。您可以使用 [資料庫關聯圖連線資料表都有的欄位。表格組件的任何數字的關聯,但每個關聯性具有完全兩個資料表。在查詢中,關聯會以聯結。

當您新增至查詢的資料表時, Access就會建立根據已定義資料表之間的關聯性的連結。即使他們不代表已定義的關聯性,可以手動在查詢中,建立連接。如果您使用其他查詢 (而不是或除了資料表) 做為資料來源的查詢,您可以建立之間來源查詢,以及這些查詢與任何您作為資料來源的資料表之間的連接。

聯結的運作方式同樣的查詢準則,因為他們建立的資料必須符合的查詢作業中所包含的規則。與不同的準則,連接也會指定符合聯結條件的資料列的每一對,會合併成單一列集。

有四種基本類型的聯結: 內部聯結與外部聯結、 交叉聯結,不相等連接。本文探討的加入,您可以使用,每一種,您使用每個類型,以及如何建立聯結的原因。

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

[連接屬性] 對話方塊。

資料表之間的線條代表連接。連按兩下連接即可開啟 [連接屬性] 對話方塊 (如圖所示) 並檢閱或變更連接。

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

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

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

頁面頂端

連接種類

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

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

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

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

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

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

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

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

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

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

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

顯示資料列中連接的資料表中的相同值存在

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

內部連接是連接的最常見類型。查詢會告訴連接其中一項該資料列資料表會對應到另一個資料表中,根據聯結的欄位中的資料中的資料列。內部聯結的查詢執行時,只在中連接的資料表中的相同值存在的列會包含在查詢作業。

我該如何使用內部連接?

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

即使您沒有建立關聯性,Access 會自動會建立內部連接如果您新增至查詢的兩個資料表,資料表中每個有相同的欄位或相容的資料類型與其中一個連接欄位是主索引鍵。因為不是強迫參考完整性,不會在此情況下,顯示的 「 一 」 和 「 多 」 的符號。

如果您新增至您的查詢的查詢,並沒有建立這些查詢之間的關聯性,Access 並不會自動建立這些查詢或查詢與資料表之間的內部連接。一般而言,您應該建立您自己。您可以將欄位拖曳一個資料來源的欄位在另一個資料來源,以建立內部聯結。Access 會顯示兩個欄位,以顯示已建立聯結之間。

內部聯結的 SQL 語法

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

table1內部聯結table2table1上。「 欄位 1 」 比較 2field2

INNER JOIN 運算包含下列部分:

部分

描述

table1, table2

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

field1, field2

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

比較

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

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

頁面頂端

顯示所有資料列從一個資料表,以及乙資料表資料列

外部聯結告訴查詢,雖然聯結兩端的資料列的一些完全對應,查詢應該包含所有資料列的資料表,以及共用常見的值,在這兩個連接的資料表資料列。

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

附註: 您可以輕鬆地告訴按兩下加入],然後在 [連接屬性] 對話方塊中尋找該資料表是左的資料表或指定聯結右側資料表的動作。您可以也切換至 [SQL 檢視,然後檢查 [FROM 子句。

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

我該如何使用外部連接?

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

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

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

    [連接屬性] 對話方塊即會出現。

  2. 在 [連接屬性] 對話方塊中,注意選項選項2旁邊所列及選項 [ 3

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

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

不明確的外部連接

如果您建立包含 LEFT JOIN 與內部聯結的查詢時,Access 可能無法判斷哪些加入第一次執行的作業。結果是根據是否執行第一次左的聯結或內部聯結不同,因為 Access 會顯示錯誤訊息:

若要修正此錯誤,您必須修改查詢,使其位於清除哪一個連接應該先執行。

外部聯結的 SQL 語法

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

table1 [向左 |向右] 加入table2
table1.field1 比較 table2.field2

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

部分

描述

table1, table2

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

field1, field2

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

比較

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

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

頁面頂端

顯示兩個表格中的所有資料列,並加入相同值存在

When you want to show all rows from two tables and join them based on common values, you use a full outer join. Access does not explicitly support full outer joins, but you can achieve the same effect by using a union query. The following procedure explains how to do this, but if you want more information about union queries, see the See Also section.

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

  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中不明確表示。在交叉聯結中,從一個資料表的每個資料列結合與結果所謂的交叉乘積或卡兒乘積的另一個資料表中每個資料列。隨時執行查詢的 [不明確聯結,資料表,跨產品是結果。交叉聯結通常無意間產生,但在一些情況下,可能很有幫助。

為什麼要使用交叉連接?

如果您想要檢查的兩個資料表或查詢之間的資料列所有可能的組合,請使用交叉連接。例如,假設您的公司已經有美觀的年份,您考慮 rebates 提供給您的客戶。您可以建立查詢的加總各客戶購買小型表格中有多個可能的優待百分比,並合併,交叉連接的另一個查詢中的兩個。最後的查詢,會顯示每個客戶的一組假設 rebates。

我該如何使用交叉連接?

交叉連接會產生任何包含您在查詢中的資料表或查詢並不建立至少明確聯結的每個資料表或查詢的時間。Access 便會從每一個資料表或查詢不明確加入至資料表或查詢結果中每隔一列的每個資料列。請考慮優待案例從先前的段落。假設您有 91 客戶,而您想要查看五個可能的優待百分比。您交叉連接產生 455 列 (91 和 5 的產品)。

您可以想像,無意間產生的交叉連接可以建立大量資料列中查詢結果。此外,這些結果為一般意義,因為如果您確定不想要合併的每隔一列的每一列,大部分的結果中顯示的合併資料列會意義。最後,用於無意間產生的交叉聯結的查詢花費很長的時間執行。

查詢設計檢視中無意間產生的交叉連接
在查詢 [設計] 檢視中加入無意間產生的交叉。

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

無意間產生的交叉乘積
傳回無意間產生的交叉連接上方所述的交叉乘積。

1.注意很大的數字的記錄。

更正後的查詢結果
建立正確加入後結果。

1.的記錄數目會更小的附註。

頁面頂端

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

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

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

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

在 [設計] 檢視中不支援不相等連接。如果您想要使用,您必須使用 [SQL 檢視來執行此動作。不過,可以在其中建立聯結設計檢視] 中,切換至 [SQL 檢視、 尋找等於 (=) 比較運算子,然後變更您想要使用其運算子。完成之後,您可以只開啟查詢設計] 檢視中一次若您第一次變更的比較運算子返回等於 (=) 在 SQL 檢視中。

刪除連接

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

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

  2. DELETE鍵。

-或-

  • 在查詢設計格線中,以滑鼠右鍵按一下您想要移除的連接,然後按一下刪除

頁面頂端

附註: 機器翻譯免責聲明︰本文係以電腦系統翻譯而成,未經人為介入。Microsoft 提供此等機器翻譯旨在協助非英語系使用者輕鬆閱讀 Microsoft 產品、服務及技術相關內容。基於本文乃由機器翻譯而成,因此文中可能出現詞辭、語法、文法上之錯誤。

請參閱

新增記錄以使用新增查詢的資料表

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

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

建立、 編輯或刪除關聯

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

這項資訊有幫助嗎?

感謝您的意見反應!

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

×