0Pricing
Coding Interview Prep · Ders

IN, ANY ve ALL Alt Sorguları

Küme üyeliği alt sorgularını ve NULL değer içeren meşhur NOT IN tuzağını öğrenin.

IN, ANY ve ALL Alt Sorguları, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 3. 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, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

Küme Üyeliği Alt Sorguları

Bir alt sorgu bir değer listesi döndürdüğünde, bu listeye göre üyeliği IN, ANY veya ALL ile sınarsınız. SQL, bu değer o kümede mi? ya da bu değer o kümedeki her / herhangi bir öğeyi geçiyor mu? sorularını bunlarla sorar.

  • IN — listedeki herhangi bir değerle eşleşir.
  • ANY/SOME — karşılaştırma en az bir öğe için geçerliyse doğrudur.
  • ALL — yalnızca karşılaştırma her öğe için geçerliyse doğrudur.

Alt Sorguyla IN

Günlük hayattaki örnek şudur: 'NYC' konumunda bulunan herhangi bir departmanda çalışanları bulmak. Alt sorgu bir departman kimlikleri kümesi döndürür ve IN bunlardan herhangi biriyle eşleşen satırları tutar.

Bu ifade doğal okunur ve mülakatçıların öncelikle beklediği biçimdir.

SELECT name
FROM employees
WHERE dept_id IN (
  SELECT id FROM departments WHERE city = 'NYC'
);

= ANY, IN ile Aynı Anlama Gelir

Mülakatçıların sevdiği güzel bir eşdeğerlik şudur: = ANY (subquery), tam olarak IN (subquery) ile aynı anlama gelir. Her ikisi de değer kümedeki en az bir öğeye eşit olduğunda doğrudur.

Aşağıdaki sorgu, bir öncekiyle aynı sonucu döndürür. ANY ve eş anlamlısı SOME, bu yaklaşımı > ve < gibi diğer işleçlere geneller.

SELECT name
FROM employees
WHERE dept_id = ANY (
  SELECT id FROM departments WHERE city = 'NYC'
);

Karşılaştırma İşleciyle ANY

ANY, > veya < ile birlikte güçlü hale gelir. salary > ANY (set), maaş en az en küçük öğeden büyükse doğrudur — yani minimumdan büyük olmalıdır.

Bu, departman 5'teki en az bir kişiden daha fazla kazanan çalışanları bulur.

SELECT name, salary
FROM employees
WHERE salary > ANY (
  SELECT salary FROM employees WHERE dept_id = 5
);

Karşılaştırma İşleciyle ALL

salary > ALL (set), maaş her öğeden büyükse doğrudur — yani maksimumdan büyük olmalıdır. Bu, departman 5'teki herkesten daha fazla kazanan çalışanları bulur.

Şu kısa yolu ezberleyiniz: > ALL = MAX değerinden büyük, > ANY = MIN değerinden büyük. Mülakatçılar bunu sürekli sınar.

SELECT name, salary
FROM employees
WHERE salary > ALL (
  SELECT salary FROM employees WHERE dept_id = 5
);

NOT IN: Ünlü NULL Tuzakları

İşte alt sorgu mülakatlarında en sık sorulan incelik. NOT IN içindeki alt sorgu tek bir NULL bile döndürürse, bütün NOT IN ifadesi beklediğiniz sahipsiz kayıtlar yerine hiç satır döndürmeyebilir.

Neden mi? x NOT IN (1, 2, NULL) ifadesi x <> 1 AND x <> 2 AND x <> NULL biçimine açılır. Son karşılaştırmanın sonucu UNKNOWN olduğundan AND ifadesi hiçbir zaman doğru olamaz.

SELECT name
FROM customers
WHERE id NOT IN (
  SELECT customer_id FROM orders
);

Bu Sorgu Neden Sessizce Bozulur

orders.customer_id NULL kabul edebiliyorsa ve herhangi bir satırda bu sütun NULL ise, müşterisi olmayan siparişler açıkça mevcut olsa bile önceki sorgu sıfır satır döndürür.

  • NULL değerinin bulunması mantıksal sonucu UNKNOWN yapar.
  • Bir hata oluşmaz — yalnızca yanlış, yani boş, sonuçlar döner.

Bir mülakat sırasında bu tehlikeyi açıkça belirtmek güçlü bir izlenim bırakır.

NULL İçeren NOT IN'i Düzeltme

Mülakatçıların kabul ettiği üç güvenli düzeltme vardır:

  • Alt sorgudaki NULL değerlerini dışlayınız: WHERE customer_id IS NOT NULL ekleyiniz.
  • NOT EXISTS kullanarak yeniden yazınız; bu ifade NULL değerlerini doğru şekilde ele alır.
  • LEFT JOIN ... IS NULL karşı birleştirmesini kullanınız.

Aşağıdaki korumalı sürüm, siparişi olmayan müşterilerin gerçek listesini döndürür.

SELECT name
FROM customers
WHERE id NOT IN (
  SELECT customer_id FROM orders
  WHERE customer_id IS NOT NULL
);

IN, NULL Değerleriyle Sorunsuz Çalışır

İç rahatlatan karşı örnek: düz bir IN ifadesi, yani olumsuzlanmamış IN, listedeki NULL değerleri yüzünden bozulmaz. x IN (1, 2, NULL), x 1'e veya 2'ye eşitse doğrudur; NULL ise hiçbir zaman eşleşmez.

NULL tehlikesi yalnızca NOT IN için geçerlidir. Bu iki durum arasındaki farkı bilmek, kendinden emin bir yanıtı tahminden ayıran şeydir.

Çok Sütunlu IN

Bazı lehçeler (Postgres, MySQL), çiftleri aynı anda eşleştirecek şekilde bir sütun demeti üzerinde IN kullanımına izin verir. Bu, (ürün, bölge) bileşimi bir promosyonlar tablosunda bulunan sipariş satırlarını bulur.

SQL Server, satır değeri IN kullanımını desteklemez; orada bunu EXISTS ile yeniden yazmanız gerekir. Bu taşınabilirlik eksikliğinden söz etmek mülakatçıları etkiler.

SELECT *
FROM order_lines
WHERE (product_id, region) IN (
  SELECT product_id, region FROM promotions
);

Mülakat İçin Kısa Yanıt

Şunu söyleyiniz: "IN küme üyeliğini sınar ve = ANY ile aynıdır. Karşılaştırma işleçleriyle > ANY minimumdan büyük, > ALL ise maksimumdan büyük anlamına gelir. En büyük tuzak, NULL döndürebilen bir alt sorguyla kullanılan NOT IN'dir — sessizce hiç satır döndürür; bu nedenle IS NOT NULL ile koruma ekler veya NOT EXISTS kullanırım."

Bu yanıt, üyeliği, ANY/ALL anlamlarını ve NULL tuzağını tek seferde kapsar.

Hızlı Kontrol

Mülakatçıların en sevdiği alt sorgu tuzağı.

Özet

Küme üyeliği alt sorguları artık ustalaştığınız bir konu:

  • IN = = ANY: kümedeki herhangi bir öğeyle eşleşir.
  • > ANY minimumdan büyük, > ALL ise maksimumdan büyük anlamına gelir.
  • Alt sorguda NULL varsa NOT IN sessizce hiç satır döndürmez — IS NOT NULL ile koruma ekleyiniz veya NOT EXISTS kullanınız.
  • Düz IN NULL değerlerini tolere eder; çok sütunlu IN bazı lehçelerde çalışır.

Sırada: EXISTS ile IN karşılaştırması ve kıdemli mülakatlarda çok sevilen performans sorusu.

Sıkça Sorulan Sorular

“IN, ANY ve ALL Alt Sorguları” dersi ücretsiz mi?

Evet — “IN, ANY ve ALL Alt Sorguları” 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 Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“IN, ANY ve ALL Alt Sorguları” dersinde ne öğreneceğim?

Küme üyeliği alt sorgularını ve NULL değer içeren meşhur NOT IN tuzağını öğrenin. Coding 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.

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

Önceden deneyim gerekmez. CoddyKit'te Coding 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 3. dersidir.

“IN, ANY ve ALL Alt Sorguları” 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 Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding 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. SELECT ve WHERE İçinde Skaler Alt Sorgular
  2. FROM Yan Tümcesinde Alt Sorgular (Türetilmiş Tablolar)
  3. IN, ANY ve ALL Alt Sorguları
  4. EXISTS ve IN Performans Karşılaştırması
← Coding Interview Prep Sayfasına Dön