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

Oracle 兩表交集查詢:INTERSECT 與 IN 子句效能對比

     編輯:Oracle 資料庫基礎

場景

表 A(學號 code、姓名 name),表 B(學號 student_code、姓名 student_name、分數 score)。需查詢兩表學號、姓名同時匹配的記錄。

方法一:INTERSECT 集合運算

SELECT code, name FROM A
INTERSECT
SELECT student_code, student_name FROM B;
  • 要求兩查詢**列數、數據類型完全一致**。
  • 自動去重,返回交集結果集。
  • 執行計劃通常較優,適合多列對比。

方法二:多重 IN 子句

SELECT code, name FROM A
WHERE A.code IN (SELECT student_code FROM B)
  AND A.name IN (SELECT student_name FROM B)
ORDER BY A.code;
  • 每列需單獨寫一個 IN 子句,列多時 SQL 冗長。
  • 若 B 表數據量大,子查詢可能重複執行,效率較低。
  • 可配合 EXISTS 改寫提升性能。

實測結果對比

兩種寫法在示例數據下結果一致(學號 1101/1102、姓名 韓甲/丁乙)。生產環境建議:

  1. 優先使用 INTERSECT 簡潔高效。
  2. 若需保留 A 表其他列或進行複雜過濾,改用 EXISTS 關聯子查詢。
  3. 確保被查詢列上有索引。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved