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

SQL 集合操作完整指南:UNION、INTERSECT、EXCEPT 及 MySQL 替代寫法

     編輯:MySQL 綜合教學

標準 SQL 三大集合運算

運算關鍵字數學意義MySQL 支援
並集UNIONA ∪ B✅ 完整支援
交集INTERSECTA ∩ B❌ 不支援
差集EXCEPT (MINUS)A - B❌ 不支援

前置條件

  • 參與查詢的欄位數相同
  • 對應位置資料型別相容
  • ORDER BY 只能放在最後,以數字指定欄位位置

UNION 範例(MySQL 原生)

-- 標準 SQL(MySQL 不支援)
SELECT * FROM student WHERE sdept = 'CS'
INTERSECT
SELECT * FROM student WHERE sage <= 19;

-- 替代 1:WHERE AND(最簡單)
SELECT * FROM student WHERE sdept = 'CS' AND sage <= 19;

-- 替代 2:IN 子查詢
SELECT * FROM student WHERE sdept = 'CS'
  AND sno IN (SELECT sno FROM student WHERE sage <= 19);

-- 替代 3:EXISTS 相關子查詢
SELECT * FROM student sx
WHERE sx.sdept = 'CS'
  AND EXISTS (SELECT 1 FROM student sy WHERE sy.sage <= 19 AND sy.sno = sx.sno);

-- 替代 4:JOIN
SELECT sx.* FROM student sx
JOIN student sy ON sx.sno = sy.sno
WHERE sx.sdept = 'CS' AND sy.sage <= 19;

EXCEPT 替代寫法(MySQL)

場景:查詢 CS 系但年齡>19 的學生(CS 系 - 年齡≤19)

-- IN
SELECT sno FROM sc WHERE cno = '1'
  AND sno IN (SELECT sno FROM sc WHERE cno = '2');

-- EXISTS
SELECT sno FROM sc sx
WHERE cno = '1'
  AND EXISTS (SELECT 1 FROM sc sy WHERE sy.cno = '2' AND sy.sno = sx.sno);

-- JOIN
SELECT sx.sno FROM sc sx
JOIN sc sy ON sx.sno = sy.sno
WHERE sx.cno = '1' AND sy.cno = '2';

集合操作結果排序規則

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