0Pricing
SQL Interview Prep · Ders

CROSS JOIN ve Kartezyen Çarpımlar

Kasıtlı CROSS JOIN kullanarak bileşimler oluşturmayı ve satır sayılarını patlatan kazara birleştirmeleri öğrenin.

CROSS JOIN ve Kartezyen Çarpımlar, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

Sizi Tuzağa Düşürmek İçin Kullanılan JOIN

Bir CROSS JOIN, sol tablonun her satırını sağ tablonun her satırıyla eşleştirir. ON koşulu yoktur. A tablosunda 4 ve B tablosunda 3 satır varsa sonuçta 4 x 3 = 12 satır bulunur.

Buna Kartezyen çarpım denir. Görüşmeciler bunu iki nedenle sorar: bilerek birleşimler oluşturup oluşturamadığınızı sınamak ve sonuç kümesini aşırı büyüten yanlışlıkla oluşmuş bir CROSS JOIN'i fark edip edemediğinizi görmek.

Açık CROSS JOIN Sözdizimi

Kartezyen çarpımı yazmanın modern ve okunabilir yolu, açıkça kullanılan CROSS JOIN anahtar sözcüğüdür. ON yan tümcesinin bulunmadığına dikkat ediniz; bu, amacı inceleyen kişiye açıkça gösterir.

Burada eksiksiz bir ürün matrisi oluşturmak için her bedeni her renkle eşleştiriyoruz.

SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;

Eski Virgül Sözdizimi

Kartezyen çarpımların FROM yan tümcesinde virgül ve birleştirme koşulu olmadan yazıldığını hâlâ görebilirsiniz. Bu, eski ANSI sözdizimidir.

CROSS JOIN ile tam olarak aynı sonucu üretir; ancak tehlikelidir: birleştirme koşulu eklemeyi amaçladıysanız ve unuttuysanız, veritabanı hata vermek yerine sessizce çapraz birleştirme yapar. Açıkça CROSS JOIN kullanmayı tercih ediniz.

-- Same result as CROSS JOIN, but easy to write by accident
SELECT s.size, c.color
FROM sizes s, colors c;

Uygulamalı Örnek: Beden Tablosu Oluşturma

Bir mağazanın 3 bedende ve 4 renkte tişört sattığını ve henüz stokta olmayanlar da dâhil olmak üzere olası her varyant için bir satır istediğini varsayınız. Bir çapraz birleştirme, 12 kombinasyonun tümünü tek adımda üretir.

Bu, en yaygın bilinçli kullanımdır: seçeneklerden oluşan eksiksiz bir ızgara üretmek.

SELECT s.size, c.color, 0 AS stock_qty
FROM sizes s
CROSS JOIN colors c
ORDER BY s.size, c.color;

Takvim Izgarası Oluşturma

CROSS JOIN işleminin mülakatlarda karşılaşılan bir başka klasik kullanımı, veri eksik olsa bile her kombinasyonun bulunacağı yoğun bir ızgara oluşturmaktır.

Burada, satışlara yapılacak sonraki LEFT JOIN işleminin her mağaza ve her gün için bir satır döndürmesi ve eksikleri sıfırlarla doldurması için her mağazayı her tarihle çaprazlıyoruz. Çapraz birleştirme, hiçbir mağaza-gününün atlanmamasını garanti eder.

SELECT st.store_id, d.day
FROM stores st
CROSS JOIN calendar d
WHERE d.day BETWEEN DATE '2024-01-01' AND DATE '2024-01-31';

Yanlışlıkla Oluşan Kartezyen Patlama

Mülakat yapanların sınadığı tehlike şudur: iki tabloyu birleştirir, ancak birleştirme koşulunu unutursunuz. Hata yerine veritabanı her kombinasyonu memnuniyetle döndürür.

orders tablosunda 100.000 satır ve customers tablosunda 50.000 satır varsa sonuç 5 milyar satır olur. Sorgular takılır, bellek tükenir ve sayılar büyük ölçüde şişmiş görünür. Kod incelemesinde bu örüntüyü fark etmek olumlu bir işarettir.

-- BUG: no join condition between the two tables
SELECT o.order_id, c.name
FROM orders o, customers c;
-- returns COUNT(orders) * COUNT(customers) rows

Yanlışlıkla Oluşan Çapraz Birleştirme Nasıl Fark Edilir

Mülakat yapanların adlandırmanızı beklediği belirtiler:

  • Satır sayısı iki tablo boyutunun toplamına değil, yaklaşık çarpımına eşittir.
  • SUM gibi toplama sonuçları sabit bir katsayıyla şişer.
  • Sorgu planında birleştirme filtresi olmayan bir İç İçe Döngü görünür.

Çözüm, neredeyse her zaman tablolar arasındaki eksik bir ON veya WHERE eşitlik koşulunu eklemektir.

CROSS JOIN ile Her Zaman Doğru ON Koşullu INNER JOIN Karşılaştırması

CROSS JOIN, mantıksal olarak INNER JOIN ... ON 1=1 ile özdeştir. Her ikisi de eksiksiz Kartezyen çarpımı üretir.

Aslında bir iç birleştirme, birleştirmeyi ON koşuluna göre filtreleyen bir çapraz birleştirmeden ibarettir. Bu zihinsel model, eksik bir koşulun iç birleştirmeyi neden çökertip çapraz birleştirmeye dönüştürdüğünü açıklar.

-- These two queries return identical results
SELECT * FROM a CROSS JOIN b;
SELECT * FROM a INNER JOIN b ON 1 = 1;

Sayılar Tablosuyla Çapraz Birleştirme

Güçlü bir yöntem: satırları bilerek çoğaltmak için küçük bir numbers veya generate_series tablosuyla çapraz birleştirme yapınız. Bu yöntem, tek bir satırı birçok satıra genişletmek için kullanılır; örneğin bir miktarı ayrı birim satırlarına dönüştürebilirsiniz.

Burada her ürün satırı, bir seriye birleştirilip miktara kadar olan sayılar korunarak qty kez tekrarlanır.

SELECT p.product_id, n.n AS unit_number
FROM products p
CROSS JOIN generate_series(1, 100) AS n(n)
WHERE n.n <= p.qty;

Performans ve Güvenli Kullanım

Çıktı çarpımsal olarak büyüdüğü için iki büyük tabloyu asla çapraz birleştirmeyiniz. Taraflardan en az birini küçük tutunuz: beden listesi, küçük bir takvim veya sayılar tablosu gibi.

Mülakatlarda bunu açıkça belirtiniz: 'CROSS JOIN yalnızca bir taraf küçük ve sınırlandırılmış olduğunda güvenlidir; aksi hâlde sonuç yönetilemez.' Bu cümle yalnızca sözdizimi bilginizi değil, muhakeme gücünüzü de gösterir.

CROSS JOIN Ne Zaman Kullanılmalı

İki kümenin her kombinasyonuna ihtiyaç duyduğunuzda bilinçli bir CROSS JOIN kullanınız:

  • Seçenek matrisleri oluşturma (beden x renk).
  • Bir LEFT JOIN öncesinde zaman serilerini yoğunlaştırma (mağaza x gün).
  • Bir sayılar tablosu aracılığıyla satırları genişletme.

Her kombinasyonu istemiyorsanız, bunun yerine neredeyse kesinlikle ON koşulu olan bir birleştirme istiyorsunuz.

Hızlı Kontrol

Kartezyen çarpımları anlayışınızı sınayınız.

Özet: CROSS JOIN

Önemli çıkarımlar:

  • Bir CROSS JOIN, her sol satırı her sağ satırla eşleştirir; çıktı boyutu girdilerin çarpımıdır.
  • Koşul içermeyen virgül sözdizimi aynı Kartezyen çarpımı üretir ve çoğu zaman yanlışlıkla kullanılır.
  • Bunu kombinasyon ızgaraları, zaman serisi yoğunlaştırma ve bir sayılar tablosu aracılığıyla satır genişletme için bilinçli olarak kullanınız.
  • Birleştirme koşulu eksik olan bir iç birleştirme, fark ettirmeden çapraz birleştirmeye dönüşür; bu, mülakat yapanların görmeyi sevdiği patlama hatasıdır.

Sıkça Sorulan Sorular

“CROSS JOIN ve Kartezyen Çarpımlar” dersi ücretsiz mi?

Evet — “CROSS JOIN ve Kartezyen Çarpımlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“CROSS JOIN ve Kartezyen Çarpımlar” dersinde ne öğreneceğim?

Kasıtlı CROSS JOIN kullanarak bileşimler oluşturmayı ve satır sayılarını patlatan kazara birleştirmeleri öğrenin. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“CROSS JOIN ve Kartezyen Çarpımlar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. CROSS JOIN ve Kartezyen Çarpımlar
  2. Hiyerarşiler için SELF JOIN
  3. Tek Bir Tablo İçindeki Satırları Karşılaştırma
  4. Doğru Birleştirme Türünü Seçme
← SQL Interview Prep Sayfasına Dön