Ana içeriğe geç
Kesit SQL
Orta · Tabloları Birleştirme

Eşit olmayan JOIN ve aralık eşleştirme

BETWEEN ve karşılaştırmalarla birleştirmek: fiyat bantları, kampanya dönemleri.

Uygulamada aç, 6 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

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.

Alıştırmalara geç (6)