JOIN koşulu eşitlik olmak zorunda değil
ON içinde her türlü koşul yazılabilir. En yaygın kullanım, bir değeri bir aralık tablosuyla eşleştirmektir: fiyat bantları, vergi dilimleri, kampanya dönemleri.
WITH bantlar AS ( SELECT 0 AS alt, 500 AS ust, 'Ekonomik' AS bant UNION ALL SELECT 500, 2000, 'Orta' UNION ALL SELECT 2000, 100000, 'Premium' ) SELECT b.bant, COUNT(*) AS urun_sayisi, MIN(p.price) AS en_dusuk, MAX(p.price) AS en_yuksek FROM products p JOIN bantlar b ON p.price >= b.alt AND p.price < b.ust GROUP BY b.bant ORDER BY en_dusuk;
Tarih aralığına göre eşleştirme
WITH kampanyalar AS ( SELECT 'Yaz İndirimi' AS kampanya, '2024-06-15' AS bas, '2024-07-15' AS bit UNION ALL SELECT 'Efsane Kasım', '2024-11-01', '2024-11-30' ) SELECT k.kampanya, COUNT(o.order_id) AS siparis FROM kampanyalar k LEFT JOIN orders o ON o.order_date BETWEEN k.bas AND k.bit GROUP BY k.kampanya;
Aralıklar çakışmasınBir değer iki banda birden düşerse satır iki kez sayılır. Alt sınırı dahil, üst sınırı hariç (
>= alt AND < ust) yazmak bu hatayı önler.Derinleş: aralık tablosuyla çalışmak
Bantları sorgunun içinde bir alt sorguyla tanımlayabilir ya da gerçek bir tabloda tutabilirsin. Tablo yaklaşımı, iş birimi bantları değiştirdiğinde sorguyu değiştirmeden güncellemeni sağlar. Kural: alt sınır dahil, üst sınır hariç; böylece bir değer iki banda birden düşmez ve hiçbir değer arada kalmaz.