Skip to main content

SQL 語法

INNER JOIN

INNER JOIN (內部連接) 為等值連接,必需指定等值連接的條件,而查詢結果只會返回符合連接條件的資料。

INNER JOIN 語法

SELECT table_column1, table_column2...
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name;

或這樣寫:

SELECT table_column1, table_column2...
FROM table_name1
INNER JOIN table_name2
USING (column_name);

INNER JOIN 查詢範例

這是客戶資料表 customers

C_IdNameCityAddressPhone
1張一台北市XX 路 100 號02-12345678
2王二新竹縣YY 路 200 號03-12345678
3李三高雄縣ZZ 路 300 號07-12345678

這是產品訂單資料表 orders

O_IdOrder_NoC_Id
125723
273753
375201
410541
512575

現在我們想列出所有客戶的訂單編號資料,可以使用 INNER JOIN 查詢:

SELECT customers.Name, orders.Order_No
FROM customers
INNER JOIN orders
ON customers.C_Id=orders.C_Id;

其中用點號連接之 XXX.YYY 表示 XXX 資料表中的 YYY 欄位。

查詢結果如下:

NameOrder_No
李三2572
李三7375
張一7520
張一1054

查詢結果只會返回符合連接條件的資料。

GROUP BY

GROUP BY 子句用於將查詢結果按照一個或多個欄位進行分組,通常與聚合函數(如 COUNT, SUM, AVG, MAX, MIN)一起使用。

GROUP BY 語法

SELECT column_name1, aggregate_function(column_name2)
FROM table_name
WHERE condition
GROUP BY column_name1;

GROUP BY 查詢範例

範例 1:計算每個客戶的訂單數量

使用前面的 customersorders 資料表,計算每個客戶有多少筆訂單:

SELECT customers.Name, COUNT(orders.Order_No) AS Order_Count
FROM customers
INNER JOIN orders
ON customers.C_Id = orders.C_Id
GROUP BY customers.Name;

查詢結果如下:

NameOrder_Count
李三2
張一2

範例 2:使用多個欄位分組

按照客戶和城市分組統計:

SELECT customers.City, customers.Name, COUNT(orders.Order_No) AS Order_Count
FROM customers
INNER JOIN orders
ON customers.C_Id = orders.C_Id
GROUP BY customers.City, customers.Name;

範例 3:搭配 HAVING 子句過濾分組結果

HAVING 子句用於對分組後的結果進行過濾,類似於 WHERE,但 WHERE 是在分組前過濾,HAVING 是在分組後過濾:

SELECT customers.Name, COUNT(orders.Order_No) AS Order_Count
FROM customers
INNER JOIN orders
ON customers.C_Id = orders.C_Id
GROUP BY customers.Name
HAVING COUNT(orders.Order_No) > 1;

這個查詢只會返回訂單數量大於 1 的客戶。

常見的聚合函數

  • COUNT(): 計算記錄數量
  • SUM(): 計算數值總和
  • AVG(): 計算平均值
  • MAX(): 取得最大值
  • MIN(): 取得最小值

注意事項

  1. SELECT 子句中的非聚合欄位必須出現在 GROUP BY 子句中
  2. WHERE 子句在 GROUP BY 之前執行,用於過濾原始資料
  3. HAVING 子句在 GROUP BY 之後執行,用於過濾分組後的結果
  4. ORDER BY 可以放在 GROUP BY 之後,用於排序結果

參考資料