資料庫設計常遵循 3NF (第三正規化),消除傳遞相賴,但查詢時需跨表組合資料。JOIN 即是關聯多張邏輯相依表的核心工具。
學生資料表 S1(SNO, SNAME, DNO, DNAME, LOCATION) 存在傳遞相賴:SNO → DNO → DNAME/LOCATION。拆分為 S(SNO, SNAME, DNO) + D(DNO, DNAME, LOCATION),透過外鍵 DNO 關聯。
-- FROM 子句標準寫法
SELECT A.SYMBOL, A.SNAME, B.TDATE, B.CLOSE
FROM SECURITYCODE A
JOIN DAYQUOTE B ON A.SYMBOL = B.SYMBOL
WHERE B.TDATE >= A.LISTDATE
AND A.SYMBOL LIKE '600%'
ORDER BY A.SYMBOL, B.TDATE;
| 類型 | 關鍵字 | 結果集特徵 | 典型用途 |
|---|---|---|---|
| 內聯接 | [INNER] JOIN | 僅返回雙方符合條件的列 | 主流業務查詢 |
| 左外聯接 | LEFT [OUTER] JOIN | 左表所有列 + 右表匹配列 (無匹配則 NULL) | 主表帶明細、可選關聯 |
| 右外聯接 | RIGHT [OUTER] JOIN | 右表所有列 + 左表匹配列 | 較少用,可改 LEFT 交換順序 |
| 完整外聯接 | FULL [OUTER] JOIN | 雙表所有列,無匹配處填 NULL | 雙向全量對比、差異分析 |
| 交叉聯接 | CROSS JOIN | 笛卡兒積:左表每列 × 右表每列 | 生成測試資料、排列組合 |
LEFT/RIGHT 只看保留哪側;FULL = LEFT ∪ RIGHT (去重)OUTER 關鍵字可省略無 WHERE 時:結果列數 = 左表列數 × 右表列數。例:3 列 × 6 列 = 18 列。