SQL INNER JOIN 內部連接、整合多個資料表
在 SQL 語句中 INNER JOIN 內部連接主要是用於結合兩個或多個資料表的方式,只返回兩個資料表中共有的資料,通常是使用在兩個 Data Sheet 資料表之間的 Column 欄位,通過 INNER JOIN 以便進行匹配。。
SQL JOIN 連接資料表或是 Access 將不同資料表之間欄位的「關連性」來結合多個資料表之檢索。其中結合多個「資料表」而組成一個暫時性資料表以提供資料分析查詢,而在原本各資料表中之記錄不會因此連接查詢而改變。當使用組合來自多個資料表的記錄時,只要指出如何將一個資料表中的記錄與另一個資料表中的記錄進行匹配。
INNER JOIN 內部連接為匹配必需指定的等值的資料格式,例如文字或數值的判斷,而查詢結果只會返回符合連接條件的資料。僅當資料表都符合 ON 子句中指定的條件時,從指定資料表中選擇所有符合資料出現在結果中。
產品資料 PRODUCT_DATA
描述產品的細節一般如產品編號,就是名稱規格及價格、庫存量、等相關記錄。
P_ID | P_NAME | P_PRICE |
---|---|---|
P001 | 深溝滾珠軸承 | 200 |
P002 | 鑄鐵帶座軸承 | 350 |
P003 | 滾珠花鍵 | 2300 |
P004 | 萬向接頭 | 420 |
P005 | 套筒華司 | 100 |
業務員資料 PRODUCT_SALE
業務員編號,描述業務員的基本 Identity 業務員名稱、以及其相關的身份詳細記錄。
S_ID | S_NAME |
---|---|
S001 | 王維奧 |
S002 | 陳世昌 |
S003 | 朱莉亞 |
訂單資料 PRODECT_ORDER
訂單資料由產生日期、訂單編號、記錄產品編號、銷售業務員的編號、數量,多是由編號記載。
訂單關連性以編號記錄,編號對應可節省記錄空間,亦可於維護基本資料時的方便性。
O_DATE | O_PRODUCT | O_QTY | O_SALE |
---|---|---|---|
2018/3/2 | P001 | 50 | S001 |
2018/3/6 | P002 | 20 | S002 |
2018/3/18 | P003 | 10 | S002 |
2018/4/10 | P005 | 20 | S003 |
2018/4/15 | P004 | 15 | S001 |
整合多個資料表
例如於 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_DATE | S_NAME | P_NAME | P_PRICE | O_QTY | P_PRICE * O_QTY |
---|---|---|---|---|---|
2018/3/2 | 王維奧 | 深溝滾珠軸承 | 200 | 50 | 10000 |
2018/3/6 | 陳世昌 | 鑄鐵帶座軸承 | 350 | 20 | 7000 |
2018/3/18 | 陳世昌 | 滾珠花鍵 | 2300 | 10 | 23000 |
2018/4/10 | 朱莉亞 | 套筒華司 | 100 | 20 | 2000 |
2018/4/15 | 王維奧 | 萬向接頭 | 420 | 15 | 6300 |
指定範圍資料表檢索 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_DATE | S_NAME | P_NAME | P_PRICE | O_QTY | P_PRICE * O_QTY |
---|---|---|---|---|---|
2018/4/10 | 朱莉亞 | 套筒華司 | 100 | 20 | 2000 |
2018/4/15 | 王維奧 | 萬向接頭 | 420 | 15 | 6300 |