SQL INNER JOIN 內部連接、整合多個資料表

在 SQL 語句中 INNER JOIN 內部連接主要是用於結合兩個或多個資料表的方式,只返回兩個資料表中共有的資料,通常是使用在兩個 Data Sheet 資料表之間的 Column 欄位,通過 INNER JOIN 以便進行匹配。。

SQL JOIN 連接資料表或是 Access 將不同資料表之間欄位的「關連性」來結合多個資料表之檢索。其中結合多個「資料表」而組成一個暫時性資料表以提供資料分析查詢,而在原本各資料表中之記錄不會因此連接查詢而改變。當使用組合來自多個資料表的記錄時,只要指出如何將一個資料表中的記錄與另一個資料表中的記錄進行匹配。

INNER JOIN 內部連接為匹配必需指定的等值的資料格式,例如文字或數值的判斷,而查詢結果只會返回符合連接條件的資料。僅當資料表都符合 ON 子句中指定的條件時,從指定資料表中選擇所有符合資料出現在結果中。


產品資料 PRODUCT_DATA

描述產品的細節一般如產品編號,就是名稱規格及價格、庫存量、等相關記錄。

P_IDP_NAMEP_PRICE
P001深溝滾珠軸承200
P002鑄鐵帶座軸承350
P003滾珠花鍵2300
P004萬向接頭420
P005套筒華司100

業務員資料 PRODUCT_SALE

業務員編號,描述業務員的基本 Identity 業務員名稱、以及其相關的身份詳細記錄。

S_IDS_NAME
S001王維奧
S002陳世昌
S003朱莉亞

訂單資料 PRODECT_ORDER

訂單資料由產生日期、訂單編號、記錄產品編號、銷售業務員的編號、數量,多是由編號記載。
訂單關連性以編號記錄,編號對應可節省記錄空間,亦可於維護基本資料時的方便性。

O_DATEO_PRODUCTO_QTYO_SALE
2018/3/2P00150S001
2018/3/6P00220S002
2018/3/18P00310S002
2018/4/10P00520S003
2018/4/15P00415S001


整合多個資料表

例如於 Microsoft Access 基本資料表建立,產品資料、業務員資料、訂單資料。由於三個資料表組成,分別儲存基本資料及累積的訂單資料是以代號記錄。然後可以使用 INNER JOIN 進行匹配出「產品名稱」及「業務員名稱」。

ON 子句用於根據 O_PRODUCT 的值匹配產品名稱中的記錄 O_SALE 匹配業務員名稱。INNER JOIN 結合訂單資料表 PRODECT_ORDER 中完整的描述。

strSql = "SELECT a.O_DATE, a.O_QTY, a.O_PRODUCT, b.P_NAME, b.P_PRICE, c.S_NAME "
strSql = strSql & "FROM ((PRODECT_ORDER a "
strSql = strSql & "INNER JOIN PRODUCT_DATA b ON a.O_PRODUCT = b.P_ID) "
strSql = strSql & "INNER JOIN PRODUCT_SALE c ON a.O_SALE = c.S_ID) "
strSql = strSql & "ORDER BY O_DATE"

SQL Alias 欄位別名、用於給表格指定一個臨時簡易名稱,欄位別名目的是為了讓 SQL 語句更易讀。
例如三個表格使用 a, b, c 來簡化。


INNER JOIN 組成提供資料分析查詢

Access 資料庫物件的關係、建立資料表的關聯 Access 資料庫、INNER JOIN 資料表共通的欄位及整合查詢。

O_DATES_NAMEP_NAMEP_PRICEO_QTYP_PRICE * O_QTY
2018/3/2王維奧深溝滾珠軸承2005010000
2018/3/6陳世昌鑄鐵帶座軸承350207000
2018/3/18陳世昌滾珠花鍵23001023000
2018/4/10朱莉亞套筒華司100202000
2018/4/15王維奧萬向接頭420156300


指定範圍資料表檢索 Specified Range

從資料表中檢索指定範圍的資料,可以通過 WHERE 子句來指定搜尋條件,以過濾出符合條件的資料記錄之間的所有資料列。

strSql = "SELECT a.O_DATE, a.O_QTY, a.O_PRODUCT, b.P_NAME, b.P_PRICE, c.S_NAME "
strSql = strSql & "FROM ((PRODECT_ORDER a "
strSql = strSql & "INNER JOIN PRODUCT_DATA b ON a.O_PRODUCT = b.P_ID) "
strSql = strSql & "INNER JOIN PRODUCT_SALE c ON a.O_SALE = c.S_ID) "
strSql = strSql & "WHERE O_DATE > #2018/04/01# ORDER BY O_DATE"

Access 日期查詢條件使用 # 否則出現資料類型不符合其他資料庫依據各別的規範。

O_DATES_NAMEP_NAMEP_PRICEO_QTYP_PRICE * O_QTY
2018/4/10朱莉亞套筒華司100202000
2018/4/15王維奧萬向接頭420156300