Küme işlemleri
JOIN tabloları yan yana birleştirir; küme işlemleri sorgu sonuçlarını alt alta birleştirir.
| İşlem | Sonuç |
|---|---|
UNION | İki sonucun birleşimi, tekrarlar atılır |
UNION ALL | Birleşim, tekrarlar korunur (daha hızlı) |
INTERSECT | Her ikisinde de olanlar |
EXCEPT | Birincide olup ikincide olmayanlar (Oracle'da MINUS) |
Kurallar: Her iki sorgu aynı sayıda sütun döndürmeli ve tipler uyumlu olmalı. Sütun adları ilk sorgudan gelir. ORDER BY en sonda bir kez yazılır.
-- Şirketle ilişkili tüm kişiler: müşteri ve çalışanlar tek listede SELECT first_name, last_name, 'Müşteri' AS tip FROM customers UNION ALL SELECT first_name, last_name, 'Çalışan' FROM employees ORDER BY last_name LIMIT 15;
-- Hem 2023'te hem 2024'te sipariş veren müşteriler SELECT customer_id FROM orders WHERE order_date LIKE '2023%' INTERSECT SELECT customer_id FROM orders WHERE order_date LIKE '2024%';
Derinleş: küme işlemleri mi JOIN mi?
“Ekim'de gelip Kasım'da gelmeyen müşteriler” üç yolla yazılabilir: EXCEPT, NOT EXISTS ve LEFT JOIN ... IS NULL. EXCEPT en kısasıdır ama yalnızca seçtiğin sütunları döndürür ve tekrarları atar. Müşterinin adı gibi ek sütunlar gerekiyorsa NOT EXISTS daha esnektir.
SELECT customer_id FROM lk_orders WHERE placed_at < '2024-11-01' EXCEPT SELECT customer_id FROM lk_orders WHERE placed_at >= '2024-11-01' AND placed_at < '2024-12-01';