Ana içeriğe geç
Kesit SQL
Orta · Küme ve Alt Sorgular

Alt sorgular (subquery)

Skaler alt sorgu, IN ile alt sorgu ve FROM içinde türetilmiş tablo.

Uygulamada aç, 9 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Sorgu içinde sorgu

Alt sorgu, parantez içindeki bir SELECT'tir. Üç yaygın yerde kullanılır.

1. Skaler alt sorgu: tek değer

-- Ortalamanın üzerindeki ürünler
SELECT name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products)
ORDER BY price;

2. IN ile liste

-- Elektronik ürün almış müşteriler
SELECT first_name, last_name
FROM customers
WHERE customer_id IN (
  SELECT o.customer_id
  FROM orders o
  JOIN order_items oi ON oi.order_id = o.order_id
  JOIN products p ON p.product_id = oi.product_id
  WHERE p.category = 'Elektronik'
);

3. FROM içinde: türetilmiş tablo

Önce özetle, sonra özet üzerinden sorgula:

SELECT ROUND(AVG(siparis_sayisi), 2) AS musteri_basina_ort_siparis
FROM (
  SELECT customer_id, COUNT(*) AS siparis_sayisi
  FROM orders
  GROUP BY customer_id
) AS t;
NOT IN ve NULLAlt sorgu tek bir NULL döndürürse NOT IN hiç satır döndürmez (çünkü x <> NULL bilinmeyendir). NOT IN kullanırken alt sorguya WHERE ... IS NOT NULL ekle veya NOT EXISTS tercih et.

Derinleş: alt sorgu nerede ne döndürmeli?

YerDöndürmesi gerekenYanlışsa
WHERE x > (SELECT ...)Tek değerBirden çok satır gelirse hata
WHERE x IN (SELECT ...)Tek sütun, çok satırNOT IN + NULL tuzağı
FROM (SELECT ...) tTabloTakma ad zorunlu (çoğu SQL türünde)
SELECT (SELECT ...)Satır başına tek değerBüyük tablolarda yavaş olabilir
Alıştırmalara geç (9)