首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

資料表關聯查詢實戰:從基本 JOIN 到多表關聯設計

     編輯:DB2 教學

基本表關聯查詢範例

資料庫操作常需跨表查詢,表間通常透過主鍵與外鍵關聯。以下範例示範如何查詢「某老師管理的學生姓名」。

範例資料結構

表一:tb1 (學生表)說明
studentID (PK)主鍵
studentName學生姓名
studentGender性別
studentAge年齡

資料樣本:

3102079014 | 劉永相 | 男 | 25
3102079015 | 趙某某 | 男 | 23
表二:tb2 (老師表)說明
teacherID (PK)主鍵
teacherName老師姓名
teacherManageStudent (FK)管理的學生 ID
teacherMemo備註

資料樣本:

3645221 | 劉剛 | 3102079014 | 備註無
3645222 | 成昆 | 3102079015 | 備註無

查詢語句與結果

使用內聯結(INNER JOIN)關聯兩表:

SELECT tb2.teacherName, tb1.studentName
FROM tb2, tb1
WHERE tb2.teacherManageStudent = tb1.studentID;

結果:

teacherName | studentName
劉剛        | 劉永相

一對多關聯的進階設計

上述設計中,teacherManageStudent 僅能儲存單一學生 ID,無法支援一位老師管理多位學生。兩種解決方案:

方案一:分隔符號儲存多值(不推薦)

在 teacherManageStudent 欄位以特殊符號(如 !)分隔多個學生 ID,應用層拆解後動態產生 SQL。缺點:違反第一正規化、查詢效能差、難以維護資料完整性。

方案二:建立中介關聯表(推薦)

將「老師-學生」關聯獨立為新表 tb3,實現一對多關係:

表三:tb3 (老師學生關聯表)
teacherID (FK)
teacherManageStudent (FK)

資料樣本:

3645221 | 3102079014
3645221 | 3102079015  -- 同一老師可管理多位學生

原 tb2 移除 teacherManageStudent 欄位,僅保留老師基本資訊。查詢時三表聯結:

SELECT t2.teacherName, t1.studentName
FROM tb1 t1
JOIN tb3 t3 ON t1.studentID = t3.teacherManageStudent
JOIN tb2 t2 ON t3.teacherID = t2.teacherID;

最佳實踐總結

  • 遵循正規化原則,將多值屬性拆分為獨立關聯表。
  • 使用明確的 JOIN 語法替代舊式逗號聯結,提升可讀性與維護性。
  • 為外鍵欄位建立索引,優化聯結效能。
  • 設計階段即規劃一對多、多對多關聯,避免事後重構成本高昂。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved