0Pricing
SQL Academy · Ders

IN, ANY ve ALL Karşılaştırması

Değer kümeleriyle karşılaştırma yapın.

IN, ANY ve ALL Karşılaştırması, CoddyKit'te ücretsiz bir SQL Academy 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, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.

IN, ANY ve ALL Nedir?

SQL sorguları yazarken çoğu zaman bir değeri değerler kümesiyle karşılaştırmanız gerekir. SQL bunun için size üç güçlü işleç sunar: IN, ANY ve ALL.

Bu üç işleç de değer listesi döndüren alt sorgularla çalışabilir. Benzer görünseler de farklı davranırlar — doğru olanı seçmek sorgunuzu daha ifade gücü yüksek ve verimli hâle getirebilir.

IN İşleci

IN işleci, bir değerin bir listedeki veya alt sorgu sonucundaki herhangi bir değerle eşleşip eşleşmediğini kontrol eder. Bu üç işlecin en basitidir.

Aşağıdaki örnek, Satış, HR veya Mühendislik departmanlarında çalışan personeli getirir.

SELECT name, department
FROM employees
WHERE department IN ('Sales', 'HR', 'Engineering');

Alt Sorguyla IN

IN, bir alt sorguyla birlikte kullanıldığında özellikle güçlüdür. Sabit kodlanmış bir liste kullanmak yerine karşılaştırma değerlerini doğrudan başka bir tablodan alabilirsiniz.

Burada bütçesi 100.000'in üzerinde olan bir departmana bağlı tüm personeli buluyoruz.

SELECT name, department
FROM employees
WHERE department IN (
  SELECT dept_name
  FROM departments
  WHERE budget > 100000
);

ANY İşleci

ANY ( SOME olarak da yazılır), bir değeri =, >, <, >= veya <= gibi bir karşılaştırma işleci kullanarak alt sorgu tarafından döndürülen her değerle karşılaştırır.

Alt sorgu sonucundaki en az bir değer için karşılaştırma doğruysa koşul doğrudur.

SELECT name, salary
FROM employees
WHERE salary > ANY (
  SELECT salary
  FROM employees
  WHERE department = 'HR'
);

= ANY, IN ile Aynı Anlama Gelir

Bilinmesi gereken önemli bir eşdeğerlik vardır: = ANY (subquery), IN (subquery) ile mantıksal olarak özdeştir. Her ikisi de değer alt sorgudan dönen en az bir sonuçla eşleştiğinde doğru sonuç verir.

Bu iki sorgu aynı sonucu üretir:

-- Using IN
SELECT name FROM employees
WHERE department_id IN (SELECT id FROM departments WHERE location = 'NYC');

-- Using = ANY
SELECT name FROM employees
WHERE department_id = ANY (SELECT id FROM departments WHERE location = 'NYC');

ALL İşleci

ALL, bir değeri alt sorgu sonucundaki her değerle karşılaştırır. Koşul yalnızca döndürülen tüm değerler için geçerliyse doğrudur.

Bu örnek, maaşı Intern kademesindeki tüm maaşlardan yüksek olan personeli bulur — yani en yüksek maaşlı stajyerden daha fazla kazanırlar.

SELECT name, salary
FROM employees
WHERE salary > ALL (
  SELECT salary
  FROM employees
  WHERE job_grade = 'Intern'
);

ANY ve ALL — Yan Yana

Temel fark şudur: ANY, koşulun en az bir değer için doğru olmasını isterken ALL, koşulun her değer için doğru olmasını ister.

Şöyle düşünebilirsiniz: ANY, tüm karşılaştırmalar arasında OR kullanmaya; ALL ise tüm karşılaştırmalar arasında AND kullanmaya benzer.

-- Returns rows where salary > at least one value in the subquery
SELECT name, salary FROM employees
WHERE salary > ANY (SELECT salary FROM employees WHERE department = 'Support');

-- Returns rows where salary > every value in the subquery
SELECT name, salary FROM employees
WHERE salary > ALL (SELECT salary FROM employees WHERE department = 'Support');

NULL Değerleriyle NOT IN ve <> ALL Karşılaştırması

= ANY nasıl IN'i karşılıyorsa, <> ALL işleci de NOT IN'e eşdeğerdir. Her ikisi de yalnızca değer alt sorgudaki hiçbir değerle eşleşmediğinde doğru sonuç verir.

Ancak dikkatli olun — alt sorgu tek bir NULL bile döndürürse SQL'in üç değerli mantığı nedeniyle NOT IN hiç satır döndürmez.

-- Using NOT IN
SELECT name FROM employees
WHERE department_id NOT IN (SELECT id FROM departments WHERE location = 'Remote');

-- Using <> ALL (equivalent)
SELECT name FROM employees
WHERE department_id <> ALL (SELECT id FROM departments WHERE location = 'Remote');

NOT IN ile NULL Değeri Tuzağı

Önemli bir tuzak şudur: NOT IN ile kullanılan alt sorgu bir NULL döndürürse NOT IN koşulunun tamamı her satır için UNKNOWN olarak değerlendirilir ve sonuç kümesi boş döner.

Bunu önlemek için alt sorgudaki NULL değerlerini filtreleyin veya NULL değerlerini güvenli şekilde ele alan NOT EXISTS kullanın.

-- Dangerous: if manager_id has any NULL, no rows are returned
SELECT name FROM employees
WHERE id NOT IN (SELECT manager_id FROM employees);

-- Safe: filter NULLs explicitly
SELECT name FROM employees
WHERE id NOT IN (
  SELECT manager_id FROM employees
  WHERE manager_id IS NOT NULL
);

Uygulamalı Örnek: Yüksek Maaşlıları Bulma

Üç işlecin tamamını gerçekçi bir senaryoda kullanalım. employees tablosunda name, department ve salary sütunlarının bulunduğunu varsayalım.

Herhangi bir tek departmanın ortalama maaşından daha fazla kazanan personeli istiyoruz — yani en az bir departmanın ortalamasından daha fazla kazananları.

SELECT name, salary
FROM employees
WHERE salary > ANY (
  SELECT AVG(salary)
  FROM employees
  GROUP BY department
)
ORDER BY salary DESC;

Hangisini Ne Zaman Kullanmalı?

Üç işleç arasında seçim yapmak için hızlı bir kılavuz:

  • IN — sabit bir listeniz olduğunda veya bir alt sorguya karşı basit eşitlik eşleştirmesi yapmanız gerektiğinde.
  • = ANY — IN ile aynıdır, ancak > ve < gibi diğer karşılaştırma işleçlerini kullanmanıza olanak tanır.
  • ALL — koşulun her değere göre geçerli olması gerektiğinde (örneğin MAX kullanmadan maksimumdan büyük bir değer ararken).
  • NOT IN — kullanışlıdır, ancak NULL değerlerine dikkat edin; alt sorgu NULL değerleri içerebiliyorsa NOT EXISTS'i tercih edin.

Hızlı Kontrol

IN, ANY ve ALL konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste, IN, ANY ve ALL kullanarak değerleri bir kümeyle nasıl karşılaştıracağınızı öğrendiniz.

Önemli noktalar:

  • IN, üyeliği kontrol eder — değer listedeki veya alt sorgudaki herhangi bir öğeyle eşleşiyorsa sonuç doğrudur.
  • = ANY, IN'e eşdeğerdir; > ANY gibi diğer işleçleri kullanmak, en az bir eşleşme için doğru sonuç verir.
  • ALL, koşulun alt sorgu tarafından döndürülen her değer için geçerli olması gerektiği anlamına gelir.
  • Alt sorgu NULL değerleri içerdiğinde NOT IN sessizce hiç satır döndürmez — buna karşı her zaman önlem alın.
  • NULL değerleri bulunabileceğinde NOT IN'e daha güvenli bir alternatif olarak NOT EXISTS kullanın.

Sıkça Sorulan Sorular

“IN, ANY ve ALL Karşılaştırması” dersi ücretsiz mi?

Evet — “IN, ANY ve ALL Karşılaştırması” 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 Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.

“IN, ANY ve ALL Karşılaştırması” dersinde ne öğreneceğim?

Değer kümeleriyle karşılaştırma yapın. SQL Academy 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 Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Academy, 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 Karşılaştırması” 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 Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Academy 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. İlişkili Alt Sorgular
  2. EXISTS ve NOT EXISTS
  3. IN, ANY ve ALL Karşılaştırması
  4. EXISTS ve JOIN Performansı
← SQL Academy Sayfasına Dön