這是有關 Access SQL 一系列文章的其中一篇。 本文將說明如何撰寫 FROM 子句,並透過範例說明可在 FROM 子句中使用的各種技巧。
在 SELECT 陳述式中,您可在 FROM 子句中指定資料來源。 FROM 子句可能也會包含 JOIN 運算。 您可使用 JOIN 運算來比對及合併來自兩個資料來源的資料,例如兩個資料表,或是一個資料表和一個查詢。
如需 Access SQL 概觀,請參閱 Access SQL:基本概念、詞彙和語法一文。
本文內容
指定資料來源
在 SELECT 陳述式中,FROM 子句會指定包含 SELECT 子句將使用之資料的資料表或查詢。
假設您想要知道特定客戶的電話號碼。 假設包含儲存此數據之字段的數據表稱為 tblCustomer,FROM 子句看起來會像這樣:
FROM tblCustomer
您可以使用方括號括住名稱。 如果名稱不包含任何空格或特殊字元 (例如標點符號),也可以不加方括號。 如果名稱包含空格或特殊字元,就必須使用括號。
提示: 包含空格的名稱會比較容易閱讀,並在您設計表單和報表時為您節省時間,但您撰寫 SQL 陳述式時可能會因此需要輸入更多字元。 當您在 Access 資料庫中命名物件時,請將這點一併考慮進去。
使用資料來源的替代名稱
您可以在 FROM 子句中使用資料表別名,以在 SELECT 陳述式中使用不同的名稱來參照資料表。 資料表別名是當您使用運算式做為資料來源時,您在查詢中指派給資料來源的名稱,或是讓 SQL 陳述式更容易輸入及閱讀。 如果資料來源的名稱很長或難以輸入,尤其是有多個欄位具有來自不同資料表的相同名稱時,這會格外實用。
例如,若要從兩個名稱皆為識別碼的欄位 (其中一個來自 tblCustomer 資料表,另一個來自 tblOrder 資料表) 選取資料,SELECT 子句看起來可能像這樣:
SELECT [tblCustomer].[ID], [tblOrder].[ID]
您可以在 FROM 子句中使用資料表別名,讓查詢變得比較容易輸入。 具有資料表別名的 FROM 子句看起來可能像這樣:
FROM [tblCustomer] AS [C], [tblOrder] AS [O]
然後,您還可以在 SELECT 子句中使用這些資料表別名,如下所示:
SELECT [C].[ID], [O].[ID]
附註: 當您使用資料表別名時,您可以使用別名或使用完整資料表名稱,以在 SQL 陳述式中參照資料表。
聯結相關資料
當您需要在查詢結果中將來自兩個資料來源的成對記錄合併為單一記錄時,聯結是您可以執行的方法。 聯結是一種 SQL 運算,可指定兩個資料來源如何關聯,以及是否應包含來自其中一個來源的資料 (如果另一個來源沒有對應資料的話)。
若要合併來自兩個資料來源的資訊,請在它們共同的欄位上執行聯結運算。 當儲存在此欄位中的值相符時,來自記錄的資料則會合併在結果中。
除了合併資料,您也可以使用聯結指定是否要包含來自其中任一資料表的記錄 (如果相關資料表中沒有對應記錄的話)。
例如,假設您要在查詢中使用來自兩個資料表的資料:tblCustomer 和 tblOrder。 兩個資料表都有可識別客戶的 [訂單識別碼] 欄位。 tblCustomer 資料表中的每筆記錄可能會在 tblOrder 資料表中有一或多筆對應記錄,而對應值可藉由 [客戶識別碼] 欄位中的值判斷。
如果要聯結資料表,讓查詢合併來自資料表的記錄 (如果在另一個資料表中沒有對應記錄的話,則排除來自其中任一資料表的記錄),FROM 子句看起來可能會像這樣 (為方便閱讀,此處加入了分行符號):
FROM [tblCustomer] INNER JOIN [tblOrder]
ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID]
在 Access 中,聯結會在 SELECT 陳述式的 FROM 子句中產生。 聯結共有兩種類型:內部聯結和外部聯結。 下列各節將說明這兩種聯結類型。
內部聯結
內部聯結是最常見的聯結類型。 執行具有內部聯結的查詢時,查詢結果中唯一會包含的記錄是同時存在於兩個聯結資料表中之共同值的那些記錄。
內部聯結具有下列語法 (為方便閱讀,此處加入了分行符號):
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field2
下表說明 INNER JOIN 運算的各個部分。
部分 |
描述 |
table1, table2 |
結合記錄的來源資料表名稱。 |
field1, field2 |
連接欄位的名稱。 若非數值,則欄位必須是相同的資料類型,且儲存相同類型的資料,但名稱不必相同。 |
compopr |
任何關聯性比較運算子:"="、"<"、">"、"<="、">=" 或 "<>"。 |
外部聯結
外部聯結與內部聯結類似,因為它們都告訴查詢如何合併來自兩個來源的資訊。 它們有所不同,因為在沒有共同值存在之處,它們也會指定是否要包含資料。 外部聯結具有方向性:您可以指定要包含來自聯結中指定之第一個資料來源的所有記錄 (稱為左方聯結),還是要包含來自聯結中第二個資料來源的所有記錄 (稱為右方聯結)。
外部聯結具有下列語法:
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1compopr table2.field2下表說明 LEFT JOIN 和 RIGHT JOIN 運算的各個部分。
部分 |
描述 |
table1, table2 |
結合記錄的來源資料表名稱。 |
field1, field2 |
聯結之欄位的名稱。 欄位必須有相同資料類型且含有相同種類的資料,但是不必有相同名稱。 |
compopr |
任何關聯性比較運算子:"="、"<"、">"、"<="、">=" 或 "<>"。 |
如需聯結的詳細資訊,請參閱聯結資料表和查詢一文。