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

MySQL 多表連接查詢詳解:內連接、左/右外連接與優化技巧

     編輯:MySQL 綜合教學

MySQL 多表連接查詢詳解:內連接、左/右外連接與優化技巧

測試數據

表 A

IDName
1Tim
2Jimmy
3John
4Tom

表 B

IDHobby
1Football
2Basketball
2Tennis
4Soccer

1. 內連接

-- 隱式語法
SELECT A.Name, B.Hobby FROM A, B WHERE A.id = B.id;
-- 顯式語法(推薦)
SELECT A.Name, B.Hobby FROM A INNER JOIN B ON A.id = B.id;

結果:Tim/Football、Jimmy/Basketball、Jimmy/Tennis、Tom/Soccer(John 無匹配被過濾)。

2. 左外連接

SELECT A.Name, B.Hobby FROM A LEFT JOIN B ON A.id = B.id;

保留 A 所有行,無匹配處為 NULL:John 對應 Hobby 為 NULL。

3. 右外連接

SELECT A.Name, B.Hobby FROM A RIGHT JOIN B ON A.id = B.id;

保留 B 所有行,A 無匹配處為 NULL。

4. 進階語法與優化參數

  • USING (c1,c2,c3):簡化 ON a.c1=b.c1 AND a.c2=b.c2 ...
  • NATURAL JOIN:自動匹配同名列,等價於包含所有同名列的 USING。
  • STRAIGHT_JOIN:強制先讀右表,適用於右表數據量極小的優化場景。

5. 多表連接括號陷阱(MySQL 5.0+)

-- 錯誤寫法:MySQL 會解析為 t1,(t2 LEFT JOIN t3 ...)
SELECT t1.id,t2.id,t3.id FROM t1,t2 LEFT JOIN t3 ON t3.id=t1.id WHERE t1.id=t2.id;

-- 正確寫法:用括號明確優先級
SELECT t1.id,t2.id,t3.id FROM (t1,t2) LEFT JOIN t3 ON t3.id=t1.id WHERE t1.id=t2.id;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved