如果您的查詢不夠努力,新增一些基本 SQL 陳述式可協助聚焦於結果。 讓我們看看幾種類型的 SQL 陳述式,以及您可以編輯以獲得所需結果的子句或部分。
本文內容
建立 Select 陳述式
一個 SQL select 陳述式有兩到三個子句。 SELECT 子句會告訴資料庫要在哪裡尋找資料,並要求它傳回特定結果。
注意
SELECT 陳述式結尾一律以分號 (;) 結尾不是在最後一個子句結尾,就是在 SQL 陳述式結尾的一行中。
下列 select 陳述式會要求 Access 從 [電子郵件地址] 和 [公司] 欄及 [連絡人] 資料表取得資訊,特別是 [城市] 欄中找到 “西雅圖” 的位置。
上述查詢有三個子句:SELECT、FROM 和 WHERE。
1. SELECT 子句會列出包含您想要使用之資料的欄,並具有運算子 (SELECT) 後面接著兩個識別碼 (電子郵件地址和公司) 。 如果識別碼有空格或特殊字 (元,例如「電子郵件地址」) 請以方括弧括住識別碼。
2. FROM 子句會識別來源資料表。 在此範例中,運算子 (FROM) ,後面接著 Contacts) (識別碼。
3. WHERE 子句是選擇性子句。 此範例的運算子 (WHERE) 後面接著運算式 (City=“Seattle”) 。
如需選取查詢的詳細資訊,請參閱建立 簡單的選取查詢。
以下是常見的 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] |
| 變更識別碼在 [資料工作表檢視] 中的顯示方式,以改善可讀性。 使用 AS 運算子 (代表動作或修改動作的關鍵字,) 在 SELECT 子句中使用欄位別名。 欄位別名是您指派給欄位的名稱,以讓結果更容易閱讀。 |
選取 [txtCustPhone] 做為 [客戶電話] |
自訂 FROM 子句
| 自訂 | 範例 |
|---|---|
| 您可以使用資料表別名,或是在 select 陳述式中指派給資料表的不同名稱。 如果資料表名稱名稱很長,資料表別名就非常有用,特別是當您有多個來自不同資料表且具有相同名稱的欄位時。 | 若要從兩個欄位選取資料,這兩個欄位都名為 ID,其中一個欄位來自資料表 tblCustomer,另一個來自資料表 tblOrder: 選取 [tblCustomer]。[識別碼], [tblOrder]。[識別碼] 使用 AS 運算子在 FROM 子句中定義資料表別名: 自 [tblCustomer] AS [C], [tbl訂單]AS [O] 然後,您可以在 SELECT 子句中使用這些資料表別名,如下所示:SELECT [C]。[識別碼], [O]。[識別碼] |
| 使用聯結將兩個資料來源的記錄配對合併為單一結果,或者指定如果相關資料表中沒有對應記錄,是否要包含任一資料表中的記錄。 聯結資料表,讓查詢合併資料表中的項目,並在其他資料表中沒有對應記錄時排除項目 |
以下是 FROM 子句的外觀:FROM [tblCustomer] 內部聯結 [tblOrder] 開啟 [tblCustomer]。[CustomerID]=[tblOrder]。[客戶識別碼] |
關於使用聯結
聯結有兩種類型:內部聯結和外部聯結。 內部聯結在查詢中較為常見。 當您使用內部聯結執行查詢時,結果只會顯示兩個聯結資料表中存在共同值的項目。
外部聯結可指定是否要包含沒有共同值的資料。 外部聯結為定向,表示您可以指定是否要包括聯結 (中指定的第一個資料表中的所有記錄 稱為左聯結) ,或將第二個資料表的所有記錄併入聯結 (稱為右聯結) 。 外部聯結具有下列 SQL 語法:
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 = table2.field2
如需在查詢中使用聯結的詳細資訊,請參閱 [聯結資料表和查詢]。
自訂 WHERE 子句
WHERE 子句包含可協助限制查詢中傳回項目數的準則。 查看 查詢準則的範例 及其運作方式。
如何自訂基本 WHERE 子句的範例是限制查詢結果;假設您要尋找客戶的電話號碼,並且只能記住他的姓氏為貝果。 在此範例中,姓氏儲存在 LastName 欄位中,因此 SQL 語法為:
WHERE [LastName]='Bagel'
也使用 WHERE 子句來合併具有相符資料但不同資料類型的欄的資料來源。 這非常實用,因為您無法在具有不同資料類型的欄位之間建立聯結。 使用一個欄位做為另一個欄位的準則,並加上 LIKE 關鍵字。 例如,如果您想要使用 [資產] 資料表和 [員工] 資料表中的資料,只有在 [資產] 資料表 [資產類型] 欄位中的資產類型在 [員工] 資料表的 [數量] 欄位中具有數字 3 時,您的 WHERE 子句才會如下所示:
WHERE field1 LIKE field2
重要
您無法為與 WHERE 子句中的彙總函數搭配使用的欄位指定準則。 您可改用 HAVING 子句來為彙總欄位指定準則。
使用 UNION 運算子自訂
當您想要查看數個類似選取查詢結果的合併檢視時,請使用 UNION 運算子。 例如,如果您的資料庫有 [產品] 資料表和 [服務] 資料表,而且它們都有三個欄位:獨家優惠或產品或服務、價格、保固或保證。 雖然 [產品] 資料表會儲存瑕疵擔保資訊,而 [服務] 資料表會儲存瑕疵擔保資訊,但基本資訊是相同的。 您可以使用聯集查詢來合併兩個資料表中的三個欄位,如下所示:
SELECT name, price, warranty, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee, exclusive_offer
FROM Services;
當您執行查詢時,每組對應欄位的資料會結合成一個輸出欄位。 若要在結果中包含任何重複的資料列,請使用 ALL 運算子。
注意
Select 陳述式必須具有相同數量的輸出欄位、順序相同,並具有相同或相容的資料類型。 在進行聯集查詢時,數字和文字資料類型是相容的。
如需聯集查詢的詳細資訊,請參閱使用 聯集查詢來檢視來自多個查詢的統一結果。