連接資料表與查詢

連接資料表與查詢

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

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

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

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

本文內容

概觀

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

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

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

交叉連接

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

刪除連接

概觀

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

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

連接的行為類似於查詢準則,它們都會建立規則,使資料必須符合這些規則才能包含在查詢作業中。不同於準則的是,連接還會指定每對滿足連接條件的資料列,都要在資料錄集內結合成單一資料列。

連接共有四種基本類型:內部連接、外部連接、交叉連接及不相等連接。本文將探討您可以使用的各種連接類型,每個連接類型的使用原因以及建立連接的方法。

頁面頂端

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

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

內部連接是最常見的連接類型。它們會根據連接欄位中的資料,告訴查詢作業其中一個結合資料表的資料列是對應至另一個結合資料表的資料列。當執行具有內部連接的查詢時,只有在所連接的兩個資料表中都有共通值的資料列才要包含在查詢作業內。

我該如何使用內部連接?

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

如果在查詢中新增兩個資料表,而資料表中各有一個欄位是完全相同或彼此相容的資料類型,而且其中一個連接欄位是主索引鍵,則即使尚未建立關聯,Access 仍然會自動建立內部連接。在此情況下,不會顯示「一」與「多」符號,因為未強制執行參考完整性。

如果在查詢中新增查詢,而且又未建立這些查詢之間的關聯,則 Access 不會自動建立查詢之間或查詢與資料表之間的內部連接。通常,您必須自行加以建立。藉由將某個資料來源的欄位拖曳至另一個資料來源的欄位,就可以建立內部連接。Access 會在這兩個欄位間顯示一條線,表示已經建立連接。

內部聯結的 SQL 語法

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

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

INNER JOIN 運算包含下列部分:

子句各部分

描述

table1table2

要合併其中記錄的資料表名稱

field1field2

聯結的欄位名稱。如果欄位內容不是數值,則欄位的資料類型必須相同,且包含相同類型的資料,但是欄位名稱不必相同。

比較

任一關聯比較運算子:"="、"<"、">"、"<="、">=" 或 "<>"

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

頁面頂端

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

外部連接會告訴查詢作業,雖然連接兩端的某些資料列能夠完全對應,但查詢應該包含一個資料表的所有資料列,以及另一個資料表在連接兩端都有共通值的資料列。

外部聯結可以是左外部聯結或右外部聯結。在左外部聯結中,查詢會包括 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 運算由下列參數組成:

子句各部分

描述

table1table2

要合併其中記錄的資料表名稱

field1field2

聯結的欄位名稱。這些欄位的資料類型必須相同,且包含同類型的資料,但是名稱不必相同

比較

任一關聯比較運算子:"="、"<"、">"、"<="、">=" 或 "<>"

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

頁面頂端

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

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

為什麼要使用交叉連接?

如果想檢視兩個資料表或查詢之間所有可能的資料列組合,就可以使用交叉連接。例如,假設您今年的業務表現亮眼,因此正在考慮提供折扣給客戶。此時可以建立查詢來加總各客戶的採購量,再建立一個小型資料表列出一些可能的折扣百分比,然後在另一個執行交叉連接的查詢中將兩者結合。最後便產生會顯示各客戶所適用之假設性折扣的查詢。

我該如何使用交叉連接?

每當您在查詢中加入資料表或查詢,卻沒有替每個資料表或查詢建立至少一個明確連接時,就會產生交叉連接。Access 會結合來自每個資料表或查詢的每個資料列 (尚未明確連接至任何其他資料表或查詢) 以及結果中每個其他的資料列。試考慮上一段所述的折扣案例。假設您有 91 個客戶,而且想查看五種可能的折扣百分比,您的交叉連接會產生 455 個資料列 (91 與 5 的乘積)。

就如同您所想像的,無意的交叉連接可能會在查詢結果中產生大量的資料列。而且,這些結果多半是無意義的,因為如果您不是真的要結合兩張資料表中的每個資料列,那麼大部分出現在結果中的結合資料列將沒有意義。最後,如果查詢是使用無意的交叉連接,那麼在執行時會花費許多時間。

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

1. 圈起來的欄位應該彼此連接。

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

1. 注意大量的記錄筆數。

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

1. 注意記錄筆數遠少於之前的筆數。

頁面頂端

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

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

如果想根據不相等的欄位值來結合兩個資料來源的資料列,就可以使用不相等連接。不相等連接通常會以大於 (>)、小於 (<)、大於或等於 (>=) 或小於或等於 (<=) 比較運算子為依據。以不等於 (<>) 運算子為基礎的不相等連接,會傳回幾乎與交叉連接同樣多的資料列,而且結果不容易解讀。

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

[設計檢視] 不支援不相等連接。如果想要使用,則必須透過 SQL 檢視。不過,您可以先在 [設計檢視] 中建立一個連接,然後切換至 SQL 檢視,尋找等於 (=) 比較運算子,再將其變更為想要使用的運算子。完成後,如果您又在 SQL 檢視中將比較運算子變更回等於 (=),就又只能在 [設計檢視] 中開啟該查詢。

刪除連接

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

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

  2. DELETE

- 或 -

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

頁面頂端

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

請參閱

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

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

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

建立、 編輯或刪除關聯

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

這項資訊有幫助嗎?

感謝您的意見反應!

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

×