首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SQL 內連接 vs 左連接:兩條查詢語句區別深度解析

     編輯:程式設計疑難解答

語句對比

-- 1. 隱式內連接(舊語法)
SELECT A.YWSJMS1, A.YWSJ1, A.cjsj, B.DDLB
FROM GY_XT_CZJL A, SW_DD_JL B
WHERE A.SCBJ=0 AND B.SCBJ=0 AND A.YWSN=B.SN;

-- 2. 顯式左連接
SELECT A.YWSJMS1, A.YWSJ1, A.cjsj, B.DDLB
FROM GY_XT_CZJL A
LEFT JOIN SW_DD_JL B ON A.YWSN=B.SN AND A.SCBJ=0 AND B.SCBJ=0;

核心區別

維度內連接左連接
結果集基準兩表匹配行的交集左表所有行 + 右表匹配行
無匹配時該行被過濾掉保留左表行,右表列為 NULL
適用場景必須雙方存在關聯(如訂單-用戶)主表全量,從表可選(如用戶-訂單,查無訂單用戶)
性能通常較快(結果集小)可能較慢(保留所有左表行)

關鍵細節:ON 條件 vs WHERE 條件

左連接中:

  • ON A.YWSN=B.SN AND A.SCBJ=0 AND B.SCBJ=0:關聯條件。右表不滿足 SCBJ=0 的行不參與關聯,但左表行仍保留,右表列置 NULL。
  • 若寫成 LEFT JOIN ... ON A.YWSN=B.SN WHERE B.SCBJ=0:WHERE 過濾在關聯後,會將右表為 NULL 的行過濾掉,退化為內連接。

最佳實踐

  • 優先使用 顯式 JOIN 語法(INNER JOIN、LEFT JOIN),可讀性強、語義清晰。
  • 左連接的右表過濾條件放在 ON 子句,而非 WHERE。
  • 使用表別名簡化列引用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved