如果你的查詢不夠努力,加入一些基本的 SQL 陳述句可以幫助你聚焦結果。 讓我們來看看幾種 SQL 語句類型,以及你可能會編輯的條款或部分,以達到你想要的結果。
本文內容
建立一個 Select 語句
SQL select 語句包含兩到三個子句。 SELECT 子句告訴資料庫該在哪裡尋找資料,並要求其回傳特定結果。
注意
SELECT 語句總是以分號結尾, (;) 要麼在最後一個子句的結尾,要麼在 SQL 語句的一行中單獨加起來。
以下的選擇語句要求 Access 從聯絡人表中的電子郵件地址與公司欄位取得資訊,特別是在「城市」欄位中發現「西雅圖」的位置。
上述查詢包含三個子句:SELECT、FROM 和 WHERE。
1. SELECT 子句列出包含你想使用的資料欄位,並有 SELECT) (接兩個識別碼 (電子郵件地址和公司) 。 若識別碼有空格或特殊字元 (如「電子郵件地址」) ,請以方括號包圍。
2. FROM 子句用來識別來源資料表。 在此範例中,運算子為 FROM () ,後接一個識別碼 (Contacts) 。
3. 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] AS [客戶電話] |
自訂 FROM 條款
| 自訂 | 範例 |
|---|---|
| 你可以使用資料表別名,或在 select 語句中指派給資料表的其他名稱。 如果資料表名稱很長,尤其是有多個欄位名稱相同,且來自不同資料表,資料表別名很有用。 | 從兩個名為 ID 的欄位中選取資料,其中一個來自 tblCustomer 表格,另一個來自 tblOrder 表格: 選擇 [tblCustomer]。[ID], [待定順序]。[身分證] 使用 AS 運算子在 FROM 子句中定義表格別名: 摘自[tblCustomer] AS [C], [待下令]AS [O] 接著你可以在 SELECT 子句中使用這些表格別名,如下:SELECT [C]。[ID], [O]。[身分證] |
| 使用連接將兩個資料來源的紀錄對合併成單一結果,或指定是否包含任一資料表的紀錄,若相關資料表中沒有對應紀錄。 將資料表合併,讓查詢將資料表中的項目合併,當另一資料表中沒有對應紀錄時,則排除相關項目 |
FROM 條款可能長什麼樣子:FROM [tblCustomer] 內部連結 [待下順序] 在 [待解決的顧客][CustomerID]=[tblOrder]。[客戶ID] |
關於使用連接
接合有兩種類型,內接合與外接接。 內部連接在查詢中較為常見。 當你執行帶有內部連接的查詢時,結果只會顯示兩個連結資料表中存在共同值的項目。
外部連接則指定是否包含沒有共同值的資料。 外部連接是方向性的,也就是說你可以指定是否包含連接 (中第一個表格中的所有紀錄,稱為左連接) ,或是將第二個表格中的所有記錄納入連接 (稱為右連接) 。 外部連接的 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 語句必須有相同數量的輸出欄位、相同順序,以及相同或相容的資料型態。 在進行聯集查詢時,數字和文字資料類型是相容的。
欲了解更多關於聯合查詢的資訊,請參閱 使用聯合查詢以查看多個查詢的統一結果。