← Kursa Dön
📄 Text · 25 min

INTERSECT ve EXCEPT

Giriş — Küme İşlemleri

UNION birleşim (union) yapıyordu. INTERSECT kesişim, EXCEPT fark işlemi yapar. MySQL 8.0.31+ sürümlerinde desteklenir, eski sürümlerde alternatif yöntemler kullanılır.


INTERSECT — Kesişim

Her iki sorguda da bulunan satırlar:

-- MySQL 8.0.31+
SELECT customer_id FROM orders WHERE status = 'delivered'
INTERSECT
SELECT customer_id FROM orders WHERE total_amount > 10000;
-- Hem teslim edilmiş HEM de 10000+ TL olan siparişlerin müşterileri

-- Eski MySQL alternatifi: INNER JOIN veya IN
SELECT DISTINCT o1.customer_id 
FROM orders o1
WHERE o1.status = 'delivered' 
  AND o1.customer_id IN (
    SELECT customer_id FROM orders WHERE total_amount > 10000
  );

EXCEPT — Fark

İlk sorguda olup ikincisinde olmayan satırlar:

-- MySQL 8.0.31+
SELECT customer_id FROM customers
EXCEPT
SELECT customer_id FROM orders;
-- Sipariş vermemiş müşteriler

-- Eski MySQL alternatifi: LEFT JOIN + IS NULL veya NOT EXISTS
SELECT c.customer_id FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
WHERE o.customer_id IS NULL;

Pratik Kullanım

-- İstanbul'da ama Ankara'da olmayan ürünleri satan satıcılar (kavramsal)
SELECT product_id FROM istanbul_warehouse
EXCEPT
SELECT product_id FROM ankara_warehouse;

-- Her iki depoda da bulunan ürünler
SELECT product_id FROM istanbul_warehouse
INTERSECT
SELECT product_id FROM ankara_warehouse;

Özet

  • INTERSECT: her iki sorguda da olan satırlar (kesişim)

  • EXCEPT: ilk sorguda olup ikincisinde olmayan satırlar (fark)

  • MySQL 8.0.31+ destekler, eski sürümlerde IN/NOT IN veya JOIN ile emüle et

  • Alternatifler: INNER JOIN (INTERSECT), LEFT JOIN + IS NULL (EXCEPT), NOT EXISTS (EXCEPT)