0Pricing
SQL Academy · Ders

Kümeler için IN ve NOT IN

IN ve NOT IN ile değer listelerine göre süzün, NOT IN içindeki NULL sorununu öğrenin ve güvenli anlam için EXISTS'e dönüştürün.

Kümeler için IN ve NOT IN, CoddyKit'te ücretsiz bir SQL Academy 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 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: Bir Listeyle Eşleştirme

IN, birden çok OR ifadesinin kısa biçimidir:

SELECT * FROM users WHERE country IN ('US', 'CA', 'GB');

-- Equivalent to:
SELECT * FROM users
WHERE country = 'US' OR country = 'CA' OR country = 'GB';

Alt Sorguyla IN

Sağ tarafta bir alt sorgu kullanabilirsiniz:

SELECT * FROM orders
WHERE user_id IN (
  SELECT id FROM users WHERE country = 'US'
);

NOT IN: Bir Listeyi Hariç Tutma

Eşleşen satırları filtreleyerek çıkarın:

SELECT * FROM users WHERE status NOT IN ('banned', 'deleted');

NOT IN ve NULL Tuzağı

Sağ taraf NULL içeriyorsa NOT IN, NULL döndürür ve koşulu NULL olan satırlar elenir. Sonuç: sıfır satır.

-- Suppose blocked_names contains NULL:
SELECT name FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocked_names);
-- → 0 rows, silently

-- Safer: filter out NULLs explicitly, or use NOT EXISTS:
SELECT name FROM users u
WHERE NOT EXISTS (
  SELECT 1 FROM blocked_names b WHERE b.excluded_name = u.name
);

NOT EXISTS Neden Daha Güvenlidir

NOT EXISTS, standart ilişkili alt sorgu anlamını kullanır ve NULL açısından güvenlidir. Çoğu planlayıcı, bunu düzgün oluşturulmuş bir NOT IN ile aynı şekilde iyileştirir.

IN ve OR — Okunabilirlik

IN, açıklık açısından uzun OR zincirlerinden daha iyidir ve planlayıcı çoğu zaman ikisini aynı şekilde iyileştirir:

-- Hard to read:
WHERE country = 'US' OR country = 'CA' OR country = 'GB' OR ...

-- Clear:
WHERE country IN ('US', 'CA', 'GB', ...)

Demetlerle IN (Satır Oluşturucuları)

Sütun çiftlerini eşleştirin:

SELECT * FROM order_items
WHERE (order_id, product_id) IN (
  (1, 42), (2, 99), (3, 17)
);

Dizin Kullanımı

Dizinlenmiş bir sütundaki IN listesi, birden çok dizin araması olarak yürütülebilir (Bitmap Index Scan). Genellikle hızlıdır.

-- Plan: Bitmap Index Scan + Bitmap Heap Scan
SELECT * FROM products WHERE id IN (1, 5, 99, 121, 4421);

Büyük IN Listeleri

Binlerce değerden oluşan listeler yavaşlayabilir. Şunları tercih edin:

  • Gerçek veya geçici bir tabloyla JOIN kullanın
  • Dizi parametresi geçirmek için = ANY(array) kullanın
SELECT * FROM products WHERE id = ANY(ARRAY[1,2,3,...]);

Boş Listeyle IN

Boş bir IN listesi, standart SQL'de geçersizdir. Bazı istemciler bir yer tutucu gönderir; SQL koşulunu duruma göre oluşturmak daha güvenlidir.

-- Use empty array trick in PostgreSQL:
SELECT * FROM products WHERE id = ANY($1::bigint[]);
-- Pass {} to get zero matches without rewriting the SQL.

IN ve JOIN

Bazen bir JOIN, alt sorgudaki IN ifadesinden daha açıktır:

-- With IN:
SELECT * FROM orders
WHERE user_id IN (SELECT id FROM users WHERE pro);

-- With JOIN:
SELECT o.*
FROM orders o
JOIN users  u ON u.id = o.user_id
WHERE u.pro;

Özet

IN, küme üyeliğini ifade etmenin anlaşılır biçimidir.

  • Okunabilirlik için OR yerine IN kullanın
  • NOT IN, NULL değerleriyle tehlikelidir — NOT EXISTS'i tercih edin
  • Büyük kümeler için JOIN kullanın veya diziler geçirin

Hızlı Kontrol

Alt sorgu NULL değerleri içerebiliyorsa NOT IN (subquery) için en güvenli alternatif hangisidir?

Sıkça Sorulan Sorular

“Kümeler için IN ve NOT IN” dersi ücretsiz mi?

Evet — “Kümeler için IN ve NOT IN” 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.

“Kümeler için IN ve NOT IN” dersinde ne öğreneceğim?

IN ve NOT IN ile değer listelerine göre süzün, NOT IN içindeki NULL sorununu öğrenin ve güvenli anlam için EXISTS'e dönüştürü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 2. dersidir.

“Kümeler için IN ve NOT IN” 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. LIKE Kalıpları ve Joker Karakterler
  2. Kümeler için IN ve NOT IN
  3. Aralıklar için BETWEEN
  4. IS NULL, IS NOT NULL ve COALESCE
← SQL Academy Sayfasına Dön