0Pricing
SQL Interview Prep · Ders

Birleştirmelerde ON ve WHERE

Bir koşulun ON'a mı yoksa WHERE'e mi ait olduğunu ve bunun sonuçlar için neden önemli olduğunu öğrenin.

Birleştirmelerde ON ve WHERE, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 2. 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.

Bir Koşul İki Yerde Bulunabilir

Bir INNER JOIN yazabildiğinizde, sıradaki mülakat sorusu daha incelikli olur: bu koşul ON içinde mi, WHERE içinde mi yer almalı?

INNER JOIN için yanıt çoğu zaman “sonuç açısından fark etmez” olur. Ancak dış birleşime geçtiğiniz anda seçim, yanıtı tamamen değiştirir. Mülakat yapanlar bunu özellikle sorar; çünkü yeni başlayanlar alışkanlıkla her şeyi WHERE içine koyar.

Bu ders kuralı netleştirir.

ON Ne Yapar

ON yan tümcesi satırların nasıl eşleştirileceğini tanımlar. Birleştirme oluşturulurken çalışır ve sol tablodaki hangi satırın sağ tablodaki hangi satırla eşleşeceğine karar verir.

ON'u şu soruya yanıt veriyormuş gibi düşününüz: “Bu iki satır birlikte mi olmalı?”

SELECT c.name, o.amount
FROM customers c
JOIN orders o
  ON o.customer_id = c.id;   -- pairing rule

WHERE Ne Yapar

WHERE yan tümcesi, birleştirme birleşik satırlarını ürettikten sonra çalışır. Bu sonuç kümesini süzer ve sınamayı geçemeyen satırları atar.

WHERE'yi şu soruya yanıt veriyormuş gibi düşününüz: “Satırları birleştirdiğime göre hangilerini tutmak istiyorum?”

SELECT c.name, o.amount
FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE o.amount > 30;   -- filter after pairing

INNER JOIN'de Genellikle Aynı Sonucu Verirler

INNER JOIN için ek bir filtreyi ON içine veya WHERE içine koymanız genellikle aynı sonucu verir. Aşağıdaki iki sorgu da yalnızca Ada'nın 50 dolarlık siparişini ve Bob'un 99 dolarlık siparişini döndürür.

Eşleşmemiş satırlar zaten iç birleşim tarafından atıldığı için koşulun yerini değiştirmek, kalan satırları değiştirmez.

-- predicate in ON
SELECT c.name, o.amount FROM customers c
JOIN orders o
  ON o.customer_id = c.id AND o.amount > 30;

-- predicate in WHERE -- same result here
SELECT c.name, o.amount FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE o.amount > 30;

Birleştirme Anahtarlarında Stil Yine de ON Kullanımını Tercih Eder

Sonuçlar aynı olsa bile gelenek şunu söyler: birleştirme ilişkisi koşullarını ON içine, iş filtrelerini WHERE içine koyunuz.

  • ON: o.customer_id = c.id (tabloların nasıl ilişkili olduğu)
  • WHERE: o.amount > 30 (hangi sonuçları istediğiniz)

Bu ayrım, amacınızı hem sonraki okuyucuya hem de stilinizi değerlendiren mülakat yapan kişiye açıkça gösterir.

Asıl Önem Taşıdığı Yer: Dış Birleşimler

Fark, eşleşen sağ satır olmasa bile sol taraftaki her satırı tutan bir LEFT JOIN ile belirleyici hâle gelir. Müşterileri ve siparişleri kullanarak, Cleo'nun hiç siparişi olmadığı hızlı bir ön izleme yapalım.

Bir LEFT JOIN, sipariş sütunları NULL olsa bile Cleo'yu tutar. Şimdi ON ile WHERE'nin onu nasıl etkilediğine bakalım.

SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
-- keeps Ada, Bob, AND Cleo (NULL amount)

ON İçinde Filtre: Satırlar Korunur

amount > 30 koşulunu bir LEFT JOIN'in ON bölümüne koyarsanız bu koşul yalnızca hangi sağ satırların bağlanacağını etkiler. Eşleşmemiş sol satırlar NULL değerleriyle birlikte yine tutulur.

Cleo sonuçta kalır. Sınamayı geçemeyen siparişler bağlanmaz ve geride NULL bırakır.

SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
  ON o.customer_id = c.id AND o.amount > 30;
-- Ada 50, Bob 99, Cleo NULL  (3 rows, Cleo kept)

WHERE İçinde Filtre: Dış Birleşme Çöker

Aynı koşulu WHERE içine taşıdığınızda birleştirilmiş sonucu süzersiniz. Cleo'nun satırında amount = NULL vardır ve NULL > 30 doğru olmadığı için Cleo kaldırılır.

LEFT JOIN sessizce INNER JOIN gibi davranmaya başlar. Bu, mülakatlarda karşılaşılan en ünlü birleştirme tuzağıdır.

SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.amount > 30;
-- Ada 50, Bob 99  (Cleo GONE -> back to inner-join behavior)

Ezberlenecek Kural

Bunu bir mülakatta açıkça ifade ediniz:

  • ON içindeki koşul, sağ satırın bağlanıp bağlanmayacağına karar verir; sol satırlar korunur.
  • WHERE içindeki koşul son satırları süzer ve olası NULL içeren bir sütuna dokunduğunda korunmuş sol satırları kaldırabilir.

Bu nedenle dış birleşimlerde, eşleşmemiş satırları özellikle kaldırmak istemediğiniz sürece isteğe bağlı tablodaki koşulları ON içine koyunuz.

WHERE İçinde NULL Kullanmanın Geçerli Olduğu Durum

Dış birleşimle eklenen bir sütunu WHERE içinde süzmenin tam olarak doğru olduğu bir durum vardır: karşıt birleştirme. IS NULL sınaması, eşleşmesi olmayan sol satırları bulur.

Burada WHERE, yalnızca eşleşmemiş satırları bilinçli olarak tutar ve hiç siparişi olmayan müşterileri döndürür. Mekanizma aynı, amaç ise terstir.

SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL;   -- customers with no orders -> Cleo

Hızlı Zihinsel Sınama

Teste başlamadan önce birleştirme koşulu gördüğünüzde şu kontrol listesini uygulayınız:

  • Tabloları ilişkilendiren bir birleştirme anahtarı mı? -> ON.
  • Zorunlu tablo üzerinde bir filtre mi? -> WHERE veya ON, ikisi de uygundur.
  • İsteğe bağlı (dış) tablo üzerinde bir filtre mi ve eşleşmemiş satırların tutulmasını mı istiyorsunuz? -> ON.
  • Eşleşmeyenleri bulmak mı istiyorsunuz? -> WHERE ... IS NULL.

Hızlı Kontrol

ON ve WHERE kuralını bir dış birleşime uygulayınız.

Özet: ON ve WHERE

Mülakata taşınacak temel noktalar:

  • ON, eşleştirmeyi ve dış birleşimlerde isteğe bağlı satırın bağlanıp bağlanmayacağını kontrol ederken korunan tarafı tutar.
  • WHERE, zaten birleştirilmiş sonucu süzer ve korunmuş satırları kaldırabilir.
  • INNER JOIN üzerinde ikisi çoğu zaman birbirinin yerine kullanılabilir; dış birleşimlerde ise kullanılamaz.
  • Dış tablodaki filtreler, IS NULL ile WHERE içinde bir karşıt birleştirme amaçlamadığınız sürece ON içine aittir.

Sıkça Sorulan Sorular

“Birleştirmelerde ON ve WHERE” dersi ücretsiz mi?

Evet — “Birleştirmelerde ON ve WHERE” 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.

“Birleştirmelerde ON ve WHERE” dersinde ne öğreneceğim?

Bir koşulun ON'a mı yoksa WHERE'e mi ait olduğunu ve bunun sonuçlar için neden önemli olduğunu öğ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 2. dersidir.

“Birleştirmelerde ON ve WHERE” 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. INNER JOIN Satırları Nasıl Eşleştirir?
  2. Birleştirmelerde ON ve WHERE
  3. Birleştirme Yayılması ve Satır Çoğalması
  4. Üç veya Daha Fazla Tabloyu Birleştirme
← SQL Interview Prep Sayfasına Dön