編輯 SQL 陳述式以讓查詢結果更精準

編輯 SQL 陳述式以讓查詢結果更精準

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

如果您的查詢功能不太理想,新增某些基本 SQL 陳述式可幫助讓結果更精準。現在來看一下您可能會編輯以取得想要結果的一些 SQL 陳述式和子句或部分。

附註: 本文內容不適用於 Access Web App - 此為使用 Access 設計及線上發佈的資料庫類型。如需詳細資訊,請參閱建立 Access 應用程式

本文內容

建立 Select 陳述式

自訂 SELECT 子句

自訂 FROM 子句

自訂 WHERE 子句

使用 UNION 運算子進行自訂

建立 Select 陳述式

一個 SQL Select 陳述式有兩個或三個子句。SELECT 子句告訴資料庫在哪裡尋找資料,並要求資料庫傳回特定結果。

附註: SELECT 陳述式的結尾一律是分號 (;),可能是放在最後一個子句的結尾,或是在 SQL 陳述式結尾獨自放在一行。

下列 Select 陳述式要求 Access 從 [連絡人] 資料表 (特別是在 City 欄為「石牌鄉」者) 中取得 [電子郵件地址] 和 [公司] 欄資訊。

顯示 SELECT 陳述式的 SQL 物件索引標籤

上述查詢中有三個子句 - SELECT、FROM 和 WHERE。

1. SELECT 子句會列出那些您要使用之資料的所在欄,並有一個運算子 (SELECT),後面加上兩個識別項 ([電子郵件地址] 和 [公司])。如果識別項中有空格或特殊字元 (如 "E-mail Adreess"),請將識別項以方括弧括起來。

2. FROM 子句會識別來源資料表。在此範例中,此子句有運算子 (FROM),後面加上一個識別項 (連絡人)。

3. WHERE 子句為選用子句。範例中有一個運算子 (WHERE),後面加上運算式 (City="石牌鄉")。

如需有關選取查詢,請參閱建立簡單的選取查詢。

以下為常用的 SQL 子句清單:

SQL 子句

功能

所需 ?

SELECT

列出含有需要資料的欄位。

FROM

列出含有 SELECT 子句所列之欄位的資料表。

WHERE

指定結果中所包含的每一筆記錄必須符合的欄位準則。

ORDER BY

指定如何排序結果。

GROUP BY

在含有總合函數的 SQL 陳述式中,列出 SELECT 子句中未彙總的欄位。

只在當有這樣的欄位時

HAVING

在含有總合函數的 SQL 陳述式中,指定套用至 SELECT 陳述式中所彙總之欄位的條件。

每一個 SQL 子句都是由詞彙所組成。以下為部分常用的 SQL 詞彙。

SQL 詞彙

定義

範例

識別項

用來識別資料庫物件的名稱,如欄名稱。

[電子郵件地址] 和 [公司]

運算子

代表某個動作或修飾某個動作的關鍵字。

AS

常數

一個不會變更的值,例如數字或 NULL。

42

運算式

識別項、運算子、常數和函數的組合,會求出單一值。

>= 產品.[單價]

頁面頂端

自訂 SELECT 子句

自訂

範例

只想查看一筆重複資料。

請在 SELECT 子句中使用 DISTINCT 關鍵字。

例如,如果您的客戶來自數個不同的分公司,部分有相同的電話號碼,而您希望電話號碼只列出一個,則 SELECT 子句如下:

SELECT DISTINCT [txtCustomerPhone] 

變更識別項在 [資料工作表檢視] 中顯示的方式,以改善可讀性。

請在 SELECT 子句中使用含欄位別名的 AS 運算子 (代表動作或修改動作的關鍵字)。欄位別名是您指定給欄位的名稱,好讓結果更容易閱讀。

SELECT [txtCustPhone] AS [Customer Phone]

自訂 FROM 子句

自訂

範例

您可使用資料表別名,或指派給 Select 陳述式中之資料表的不同別名。如果資料表名稱的名稱很長,資料表別名特別有用,尤其是當有多個來自不同資料表但有相同名稱的欄位時。

若要從 2 個名稱皆為 ID,一個來自資料表 tblCustomer 而另一個來自資料表 tblOrder 的欄位選取資料,則:

SELECT [tblCustomer].[ID], 
[tblOrder].[ID]

使用 AS 運算子在 FROM 子句中定資料表別名:

FROM [tblCustomer] AS [C], 
[tblOrder] AS [O]

然後,您還可以在 SELECT 子句中使用這些資料表別名,如下所示:

SELECT [C].[ID], 
[O].[ID]

使用聯結將來自兩個資料來源的一對記錄合併成單一筆結果,或者指定如果在關聯資料表中沒有相對應的記錄時,是否應包含兩個資料表的記錄。

聯結資料表,讓查詢合併來自資料表的項目,並在其他資料表中沒有相對應的記錄時排除項目

FROM 子句可能如下所示:

FROM [tblCustomer] 
INNER JOIN [tblOrder]
ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID]

關於使用聯結

共有兩種聯結類型 - 內部和外部聯結。內部聯結在查詢中較為常見。 在執行含有內部聯結的查詢時,結果只會顯示已聯結資料表中皆存在共通值的那些項目。

外部聯結則指定是否包括沒有共通值存在的資料。外部聯結是有方向性的,意即您可以指定是要包含聯結中所指定的第一個資料表的所有記錄 (稱為左端聯結),或者要包含聯結中所指定的第二個資料表的所有記錄 (稱為右端聯結)。外部聯結的 SQL 語法如下:

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

詳細資訊請參閱查詢中使用聯結。

頁面頂端

自訂 WHERE 子句

WHERE 子句包含可協助限制的查詢傳回的項目數的準則。請參閱查詢準則的範例,以及如何運作。

可以自訂基本 WHERE 子句之方式的範例之一,為限制查詢結果;假設您要尋找客戶的電話,但只記得他的姓氏為 Bagel。在此範例中,姓氏儲存在 LastName 欄位,因此 SQL 語法為:

WHERE [LastName]='Bagel'

使用 WHERE 子句也可以將具有相符的資料,但不同資料類型的資料行的資料來源。此很實用因為您不能建立具有不同資料類型的欄位之間的聯結。使用一個欄位做為條件,將其他欄位,例如關鍵字。例如,如果您想要使用的資產資料表和 [員工] 資料表中的資料,類型資產資產中輸入時,才資產] 資料表的欄位有數字 3 [數量] 欄位中的 [員工] 資料表,以下 WHERE 子句,看起來的樣子:

WHERE field1 LIKE field2

重要:  您不能為在 WHERE 子句中配合總合函數使用的欄位指定準則。但是,您可使用 HAVING 子句為已彙總的欄位指定準則。

頁面頂端

使用 UNION 運算子進行自訂

UNION 運算子在您查看來自數個類似 Select 查詢之結果的組合檢視時使用。例如,如果資料庫中有 [產品] 資料表和 [服務] 資料表,且兩者皆有三個欄位:特別優惠或產品或服務、價格、保固或保證。雖然 [產品] 資料表儲存的是保固資訊,而 [服務] 資料表儲存的是保證資訊,其基本資訊皆相同。您可使用聯集查詢合併來自兩個資料表的三個欄位,如下所示:

SELECT name, price, warranty, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee, exclusive_offer
FROM Services;

當您執行查詢時,來自每組對應欄位的資料都會合併為一個輸出欄位。若要在結果中包括任何重複的列,請使用 ALL 運算子。

附註:  Select 陳述式必須有相同的輸出欄位數、以相同順序排列並有相同或相容的資料類型。在進行聯集查詢時,數字和文字資料型別是相容的。

如需關於聯集查詢的詳細資訊,請參閱使用聯集查詢檢視多個查詢的彙整的結果

頁面頂端

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

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

這項資訊有幫助嗎?

感謝您的意見反應!

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

×