本文屬於 Access SQL 相關系列文章。 本文將說明如何撰寫 SELECT 子句,並說明撰寫這類子句時可用的各種技巧。
如需 Access SQL 概觀,請參閱 Access SQL:基本概念、詞彙和語法一文。
本文內容
選取欄位:SELECT 子句
SELECT 陳述式通常是從 SELECT 子句開始。 您可以使用 SELECT 子句,針對您想要在查詢中使用的資料指定欄位名稱。 您也可以只使用運算式,或是與欄位兩者並用。 您甚至可以使用另一個 SELECT 陳述式做為欄位,這稱為子查詢。
假設您想要知道客戶的電話號碼。 假設儲存客戶電話號碼的字段稱為 txtCustPhone,SELECT 子句的顯示方式如下:
SELECT [txtCustomerPhone]
您可以使用方括號括住名稱。 如果名稱不包含任何空格或特殊字元 (例如標點符號),也可以不加方括號。 如果名稱包含空格或特殊字元,就必須使用括號。
提示: 包含空格的名稱會比較容易閱讀,並在您設計表單和報表時為您節省時間,但您撰寫 SQL 陳述式時可能會因此需要輸入更多字元。 當您在 Access 資料庫中命名物件時,請將這點一併考慮進去。
若 SQL 陳述式有兩個或多個欄位擁有相同名稱,您必須將每個欄位的資料來源名稱加入至 SELECT 子句中的欄位名稱。 您使用的資料來源名稱必須與您在 FROM 子句中使用的一致。
選取所有欄位
當您想要包含資料來源的所有欄位時,您可以在 SELECT 子句中個別列出所有欄位,或使用星號萬用字元 (*)。 當您使用星號時,Access 會決定查詢執行的時間、資料來源包含哪些欄位,並在查詢中納入所有這些欄位。 這樣一來,當資料來源新增新欄位時,即可協助確保查詢的資料為最新。
您可以在 SQL 陳述式中的一或多個資料來源使用星號。 若您使用星號,且有多個資料來源,您必須將資料來源名稱與星號放在一起,以便 Access 判斷要包含哪個資料來源的所有欄位。
例如,假設您想要選取 [Order] 資料表的所有欄位,但只想要 [Contacts] 資料表的電子郵件地址。 您的 SELECT 子句可能會像這樣:
SELECT Orders.*, Contacts.[E-mail Address]
附註: 使用星號時請特別留意。 如果資料來源之後加入新的欄位,而您並不打算使用新欄位,您的查詢結果可能會不如預期。
選取不同的值
如果您知道陳述式會選取重複的資料,導致您看到重複的值,您不妨在 SELECT 子句中使用 DISTINCT 關鍵字。 例如,假設您的每個客戶會顯示多個不同的興趣,但其中有部分的電話號碼相同。 若您想要確認每支電話號碼只顯示一次,您的 SELECT 子句看起來如下:
SELECT DISTINCT [txtCustomerPhone]
為欄位或運算式使用替代名稱:AS 關鍵字
您可以使用 AS 關鍵詞和 SELECT 子句中的欄位別名,變更資料工作表檢視中任何字段所顯示的標籤。 欄位別名是您在查詢中指派給欄位的名稱,讓結果更容易閱讀。 例如,如果您想要從名為 txtCustPhone 的欄位中選取資料,且欄位包含客戶電話號碼,您可以在 SELECT 語句中使用字段別名來改善結果的可讀性,如下所示:
SELECT [txtCustPhone] AS [Customer Phone]
附註: 在 SELECT 子句中使用運算式時,您必須使用欄位別名。
使用運算式進行選取
有時候,您會想要根據資料查看計算結果,或只擷取欄位的部分資料。 例如,您想要根據資料庫中的 [BirthDate] 欄位資料傳回客戶的出生年份。 您的 SELECT 子句可能如下:
SELECT DatePart("yyyy",[BirthDate]) AS [Birth Year]
這個運算式由 DatePart 函數及 "yyyy" (常數) 和 [BirthDate] (識別碼) 這兩個引數所組成。
如果提供單一輸入值時,運算式只會輸出單一值,則您可以使用任何驗證運算式當做欄位。