0Pricing
SQL Interview Prep · Ders

Küme İşlemlerini Birleştirmelerle Taklit Etme

EXCEPT ve INTERSECT ifadelerini desteklemeyen lehçelerde bunları yeniden yazın.

Küme İşlemlerini Birleştirmelerle Taklit Etme, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 4. 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.

Küme İşlemlerini Neden Taklit Etmeli

Her veritabanı INTERSECT ve EXCEPT işlemlerini desteklemez. Örneğin eski MySQL sürümlerinde bu işleçler hiç bulunmuyordu. Mülakatçılar, işleç kullanılamadığında küme mantığını JOIN'ler ve alt sorgularla yeniden oluşturup oluşturamayacağınızı sınar.

Hem küme işlemini hem de JOIN karşılığını bilmek, işlecin gerçekte ne hesapladığını anladığınızı kanıtlar.

INNER JOIN Olarak INTERSECT

INTERSECT her iki kümede ortak olan satırları bulur. JOIN karşılığı, karşılaştırılan tüm sütunlar üzerinde bir INNER JOIN oluşturmak ve tekilleştirme davranışını eşleştirmek için DISTINCT eklemektir.

Karşılaştırmadaki her sütun JOIN koşulunun bir parçası olur.

-- A INTERSECT B emulated:
SELECT DISTINCT a.customer_id
FROM orders_2023 a
JOIN orders_2024 b
  ON a.customer_id = b.customer_id;

INTERSECT İçin DISTINCT Neden Gereklidir

Yalın bir INNER JOIN satırları çoğaltabilir: bir değer taraflardan birinde birden fazla kez görünürse JOIN satırları çoğaltır. Standart INTERSECT her ortak satırı bir kez döndürür; bu nedenle JOIN'in oluşturduğu yinelenenleri ortadan kaldırmak için DISTINCT eklersiniz.

Burada DISTINCT kullanmayı unutmak, mülakatlarda sık yapılan bir hatadır.

-- without DISTINCT, a customer with 3 orders in each year
-- would appear 9 times from the join

EXCEPT, LEFT JOIN / IS NULL olarak

EXCEPT (A olup B olmayan) bir anti-birleştirmedir. Taşınabilir biçimi, A'dan B'ye tüm sütunlar üzerinden yapılan bir LEFT JOIN işleminde B tarafının NULL olduğu (eşleşme bulunmayan) yalnızca satırları tutup ardından DISTINCT uygulamaktır.

Bu LEFT JOIN / IS NULL kalıbı, SQL mülakatlarında en sık yeniden kullanılan tekniklerden biridir.

SELECT DISTINCT a.customer_id
FROM orders_2023 a
LEFT JOIN orders_2024 b
  ON a.customer_id = b.customer_id
WHERE b.customer_id IS NULL;

NOT EXISTS ile EXCEPT

Aynı ölçüde taşınabilir bir EXCEPT, NOT EXISTS kullanır. Şu şekilde okunur: "eşleşen bir B satırının bulunmadığı her A satırını tut" ve NULL değerlerini güvenilir biçimde ele alır.

Birçok mühendis NOT EXISTS kullanmayı tercih eder; çünkü amacı açıkça ifade eder ve NOT IN + NULL tuzağını engeller.

SELECT DISTINCT a.customer_id
FROM orders_2023 a
WHERE NOT EXISTS (
  SELECT 1 FROM orders_2024 b
  WHERE b.customer_id = a.customer_id
);

EXISTS ile INTERSECT

Benzer şekilde, INTERSECT EXISTS ile yazılabilir: eşleşen bir B satırının bulunduğu her farklı A satırı tutulur.

EXISTS ilk eşleşmede kısa devre yapar; bu nedenle verimli olabilir ve birleştirme çoğalmasını önler. Bazen birleştirme tarafında DISTINCT kullanma gereksinimini de ortadan kaldırır.

SELECT DISTINCT a.customer_id
FROM orders_2023 a
WHERE EXISTS (
  SELECT 1 FROM orders_2024 b
  WHERE b.customer_id = a.customer_id
);

NOT IN NULL Tuzağı

Cazip bir EXCEPT öykünmesi NOT IN kullanmaktır, ancak bu tehlikelidir: alt sorgu herhangi bir NULL döndürürse, NOT IN hiç satır döndürmez; çünkü karşılaştırma UNKNOWN olur.

Bu, mülakatlarda çok sık sınanan önemli bir tuzaktır. NULL değerlerine karşı güvenli olan NOT EXISTS veya LEFT JOIN / IS NULL biçimlerini tercih edin.

-- RISKY if orders_2024.customer_id can be NULL:
SELECT DISTINCT customer_id FROM orders_2023
WHERE customer_id NOT IN (
  SELECT customer_id FROM orders_2024
);

Birden Çok Sütunda Eşleştirme

Küme karşılaştırması birkaç sütuna yayıldığında, her sütun koşulda birleştirilir. Bir anti-birleştirme için bu sütunlardaki NULL değerleri olasılığını da ele almalısınız; NOT EXISTS burada öne çıkar.

Her sütunu ON yan tümcesinde açıkça yazın; birini atlamak, "eşit satır" kavramının anlamını fark edilmeden değiştirir.

SELECT DISTINCT a.id, a.city
FROM a
LEFT JOIN b
  ON a.id = b.id AND a.city = b.city
WHERE b.id IS NULL;

İşleç Olmadan UNION Öykünmesi

UNION ALL yalnızca birleştirmedir ve her SQL lehçesi bunu doğrudan destekler. Gerektiğinde farklı UNION işlemini taklit etmek için UNION ALL ile bir alt sorgu içinde birleştirin ve alt sorguyu SELECT DISTINCT ile ya da tüm sütunlara GROUP BY uygulayarak çevreleyin.

Bu, UNION işleminin yalnızca UNION ALL ile yinelenenleri kaldırma adımının birleşiminden ibaret olduğunu gösterir.

SELECT DISTINCT * FROM (
  SELECT city FROM a
  UNION ALL
  SELECT city FROM b
) combined;

Doğru Öykünmeyi Seçme

Karar rehberi:

  • INTERSECT → EXISTS veya INNER JOIN + DISTINCT.
  • EXCEPT → NOT EXISTS veya LEFT JOIN / IS NULL.
  • NULL olasılığı varsa NOT IN kullanmaktan kaçının.
  • UNION → DISTINCT ile çevrelenmiş UNION ALL.

EXISTS / NOT EXISTS en taşınabilir ve NULL değerlerine karşı en güvenli seçeneklerdir; bu da onları mülakatlarda verilecek en güvenli yanıtlar yapar.

Hepsini Birleştirme

Küme işleçlerini birleştirmelere çevirebilmek, bunları yalnızca söz dizimi olarak değil, küme mantığı olarak da anladığınızı gösterir. Anti-birleştirme (LEFT JOIN / IS NULL veya NOT EXISTS) en değerli kalıptır: EXCEPT öykünmesinde, sahipsiz kayıtları bulmada ve eksik kayıt sorularında da karşınıza çıkar.

Doğruluk için önce NOT EXISTS biçimini sunun; ardından performansı tartışırken birleştirme biçiminden söz edin.

Hızlı Kontrol

Veritabanınız EXCEPT desteklemiyor. orders_2023 içindeki customer_ids değerlerine ihtiyacınız var; bunlar orders_2024 içinde bulunmamalı ve sütun NULL değerleri içerebilir.

Özet

Önemli çıkarımlar:

  • INTERSECT → INNER JOIN + DISTINCT veya EXISTS.
  • EXCEPT → LEFT JOIN / IS NULL veya NOT EXISTS (anti-birleştirme).
  • Küme işleçlerinin yinelenenleri kaldırma davranışını eşleştirmek ve birleştirme çoğalmasını kontrol altına almak için DISTINCT ekleyin.
  • NULL ihtimali bulunan durumlarda NOT IN kullanmaktan kaçının; NOT EXISTS kullanmayı tercih edin.
  • UNION = DISTINCT ile çevrelenmiş UNION ALL.

Sıkça Sorulan Sorular

“Küme İşlemlerini Birleştirmelerle Taklit Etme” dersi ücretsiz mi?

Evet — “Küme İşlemlerini Birleştirmelerle Taklit Etme” 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.

“Küme İşlemlerini Birleştirmelerle Taklit Etme” dersinde ne öğreneceğim?

EXCEPT ve INTERSECT ifadelerini desteklemeyen lehçelerde bunları yeniden yazın. 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 4. dersidir.

“Küme İşlemlerini Birleştirmelerle Taklit Etme” 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. UNION ve UNION ALL Karşılaştırması
  2. Sütun Sayısı ve Tür Uyumluluğu
  3. Karşılaştırma için INTERSECT ve EXCEPT
  4. Küme İşlemlerini Birleştirmelerle Taklit Etme
← SQL Interview Prep Sayfasına Dön