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

MySQL 多表連接查詢實戰:從子查詢到別名表優化

     編輯:MySQL 綜合教學

業務場景

足球比賽數據:result 表記錄比賽結果(主隊 ID、客隊 ID),teams 表存儲隊名。需輸出:比賽 ID、主隊名、客隊名、比分、時間。

方案演進

階段 1:子查詢混合連接(繁瑣)

-- 步驟 1:關聯主隊
SELECT r.id, t.t_name AS h_name, r.match_time, r.result
FROM result r JOIN teams t ON r.h_id = t.t_id;

-- 步驟 2:關聯客隊
SELECT r.id, t.t_name AS g_name
FROM result r JOIN teams t ON r.g_id = t.t_id;

-- 步驟 3:外層再次 JOIN 合併
SELECT t1.id, t1.h_name, t2.g_name, t1.result, t1.match_time
FROM (步驟1) t1 JOIN (步驟2) t2 ON t1.id = t2.id;

階段 2:雙別名單次連接(推薦)

SELECT r.id,
       t1.t_name AS h_name,
       t2.t_name AS g_name,
       r.result,
       r.match_time
FROM result r
JOIN teams t1 ON r.h_id = t1.t_id   -- 主隊別名
JOIN teams t2 ON r.g_id = t2.t_id;  -- 客隊別名

核心要點:同一張表多次參與 JOIN 必須使用不同別名,否則列引用歧義。

擴展:自關聯查詢

員工-主管關係表 subject (id, name, pid):

SELECT t1.name AS p_name, t2.name AS son_name
FROM subject t1
JOIN subject t2 ON t1.id = t2.pid;

練習數據準備

文末提供建表與測試數據 SQL,建議在本地導入實操體會連接類型(INNER/LEFT/RIGHT)對結果集的影響。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved