Son Dersler
Veri Tabanı Yönetimi ve SQL

SQL Subquery (Alt Sorgu) Kullanımı ve Örnekleri

2 Mayıs 2026 9 dk okuma Deniz Karay

SQL Subquery (Alt Sorgu) Kullanımı ve Örnekleri konusu, ilişkisel veri tabanlarında verileri filtrelemek, hesaplamak ve organize etmek için kullanılan en güçlü tekniklerden biridir ve veri analizi süreçlerinde karmaşık mantıksal işlemleri tek bir adımda gerçekleştirmeyi sağlayarak veri tabanı yönetiminde esneklik sunar. Veri tabanı yöneticileri ve yazılımcılar için alt sorgular, bir tablodaki verileri başka bir tablodaki sonuçlara dayanarak çekmek veya mevcut verileri dinamik kriterlere göre işlemek için kritik bir rol oynar. Günlük hayatta karşılaştığımız e-ticaret sipariş takibi, bankacılık işlemleri veya akademik başarı analizleri gibi pek çok sistem, arka planda bu iç içe geçmiş sorgu yapılarını kullanır. Bu rehberde, SQL dünyasının bu temel taşını her yaştan öğrencinin anlayabileceği bir dille, bol örnekli ve yapılandırılmış bir şekilde inceleyeceğiz.

🎯 Bu Derste Öğrenecekleriniz
  • Alt sorgu (subquery) kavramını ve temel çalışma mantığını kavrayacaksınız.
  • WHERE, FROM ve SELECT bloklarında alt sorgu yazmayı öğreneceksiniz.
  • IN, ANY, ALL ve EXISTS gibi operatörlerin alt sorgularla kullanımını keşfedeceksiniz.
  • İlişkili (correlated) ve ilişkisiz alt sorgular arasındaki farkları ayırt edebileceksiniz.
  • Alt sorgular ile JOIN işlemleri arasındaki farkları ve performans etkilerini anlayacaksınız.
📌 Bu Konuda Bilmeniz Gerekenler
  • Alt sorgular her zaman parantez ( ) içerisinde yazılır.
  • Genellikle önce içteki sorgu (inner query) çalışır ve sonucu dıştaki sorguya (outer query) iletir.
  • Bir alt sorgu, dış sorgunun kullandığı operatöre göre tek bir değer, bir liste veya bir tablo döndürebilir.
  • Okunabilirliği artırsa da, çok büyük veri setlerinde performans için dikkatli kullanılmalıdır.

Alt Sorgu (Subquery) Nedir?

SQL’de alt sorgu, bir başka SQL ifadesinin (SELECT, INSERT, UPDATE veya DELETE) içine gömülmüş olan SELECT sorgusudur. Bir nevi “sorgu içinde sorgu” olarak tanımlanabilir. Alt sorgular, ana sorgunun ihtiyaç duyduğu veriyi dinamik olarak sağlar. Örneğin, bir şirketteki en yüksek maaşı alan kişiyi bulmak istiyorsanız, önce “en yüksek maaşın ne olduğunu” bulmanız gerekir; işte bu aşamada alt sorgu devreye girer.

ℹ️ Bilgi: Alt sorgular genellikle ana sorgunun WHERE cümlesinde bir filtreleme kriteri oluşturmak için kullanılır. Ancak modern SQL standartlarında SELECT listesinde ve FROM cümlesinde de sıkça karşımıza çıkarlar.

Alt Sorguların Temel Kuralları

Bir alt sorgu yazarken uyulması gereken bazı teknik kurallar vardır. İlk olarak, alt sorgu mutlaka parantez içine alınmalıdır. İkinci olarak, alt sorgu genellikle tek bir sütun döndürmelidir (özellikle WHERE bloğunda karşılaştırma operatörleri ile kullanılıyorsa). Ayrıca, alt sorgularda ORDER BY komutu genellikle kullanılamaz; çünkü alt sorgu bir sonuç seti döndürür ve sıralama işleminin ana sorguda yapılması beklenir.

Alt Sorgu Türleri ve Kullanım Alanları

Alt sorgular, döndürdükleri veri yapısına ve ana sorguyla olan ilişkilerine göre üç ana kategoriye ayrılırlar. Bu kategorileri anlamak, hangi durumda hangi yapıyı kullanacağınızı belirlemek açısından hayati önem taşır. SQL dünyasında “subquery nedir” sorusunun cevabı, bu türlerin işlevselliğinde gizlidir.

1. Skaler Alt Sorgular (Scalar Subqueries)

Bu tür alt sorgular sadece tek bir değer (tek satır ve tek sütun) döndürür. Genellikle eşittir (=), büyüktür (>), küçüktür (<) gibi standart karşılaştırma operatörleri ile birlikte kullanılırlar. Örneğin, tüm çalışanların ortalama maaşını hesaplayıp, bu ortalamanın üzerinde maaş alanları listelemek skaler bir işlem gerektirir.

📖 Örnek: Ortalama Üstü Maaş Alanlar

Aşağıdaki sorgu, önce iç kısımdaki SELECT ile ortalama maaşı bulur, ardından dış sorgu bu değeri kullanarak filtreleme yapar:

SELECT ad, soyad, maas FROM personel WHERE maas > (SELECT AVG(maas) FROM personel);

2. Çok Satırlı Alt Sorgular (Multi-Row Subqueries)

Eğer alt sorgu birden fazla satır döndürüyorsa, doğrudan eşittir operatörünü kullanamazsınız. Bunun yerine IN, ANY veya ALL gibi özel operatörleri kullanmanız gerekir. Bu sorgular genellikle bir listedeki elemanlarla eşleşme aramak için idealdir.

💡 İpucu: Eğer alt sorgunuzun birden fazla sonuç döndürme ihtimali varsa, hata almamak için her zaman IN operatörünü kullanmayı tercih edin.

3. İlişkili (Correlated) Alt Sorgular

Bu en gelişmiş alt sorgu türüdür. İçteki sorgu, dıştaki sorgudan gelen bir değere bağımlıdır. Yani ana sorgudaki her bir satır için alt sorgu tekrar tekrar çalıştırılır. Bu durum, veri seti çok büyük olduğunda performansı olumsuz etkileyebilir ancak çok karmaşık mantıksal karşılaştırmalar yapmanıza olanak tanır.

Operatörlerin Alt Sorgularla Kullanımı

Alt sorguların gücü, onlarla birlikte kullanılan operatörlerden gelir. Sadece bir değer döndüren sorgular basit olsa da, liste döndüren sorgularla çalışırken aşağıdaki operatörleri bilmek gerekir.

Operatör Açıklama Kullanım Durumu
IN Alt sorgu listesindeki herhangi bir değerle eşleşir. Bir küme içinde arama yaparken.
EXISTS Alt sorgu en az bir satır döndürürse TRUE döner. Varlık kontrolü yaparken.
ANY / SOME Listedeki değerlerden en az biriyle karşılaştırma yapar. Büyüktür/Küçüktür ile bir eleman yetiyorsa.
ALL Listedeki tüm değerlerle karşılaştırma yapar. Tüm gruptan daha büyük/küçük olanı bulurken.

IN ve EXISTS Arasındaki Fark

Öğrencilerin en çok karıştırdığı konulardan biri IN ve EXISTS operatörleridir. IN operatörü, alt sorgudan dönen tüm değerleri bir liste haline getirir ve ana sorgudaki değeri bu listede arar. EXISTS ise alt sorgunun herhangi bir veri döndürüp döndürmediğine bakar; verinin içeriğiyle ilgilenmez. Genellikle büyük tablolarda EXISTS performansı daha yüksektir çünkü ilk eşleşmeyi bulduğunda aramayı durdurur.

⚠️ Dikkat: Alt sorguda NULL değerler dönüyorsa NOT IN kullanımı beklenmedik sonuçlar verebilir. NULL değerlerin karşılaştırılması SQL’de özel bir durumdur (UNKNOWN), bu nedenle boş değer kontrolüne dikkat edilmelidir.

Alt Sorguların SELECT ve FROM İçinde Kullanımı

Çoğu zaman alt sorguların sadece WHERE bloğunda kullanıldığı düşünülür, ancak bu büyük bir yanılgıdır. Alt sorgular, sorgunun her aşamasında esneklik sağlar.

SELECT Listesinde Alt Sorgu

Her bir satırın yanına, başka bir tablodan hesaplanmış bir değer getirmek için kullanılır. Örneğin, her müşterinin yanına o müşterinin toplam sipariş sayısını yazdırmak için SELECT içinde alt sorgu kullanılabilir.

📖 Örnek: Müşteri Bazlı Özet

Bu sorgu, her müşteri için o müşteriye ait siparişleri sayar:

SELECT musteri_adi, (SELECT COUNT(*) FROM siparisler WHERE siparisler.id = musteriler.id) AS toplam_siparis FROM musteriler;

FROM Cümlesinde Alt Sorgu (Derived Tables)

Bazen bir sorgunun sonucunu, başka bir sorgu için sanal bir tablo gibi kullanmak istersiniz. Buna “türetilmiş tablolar” denir. FROM bloğunda kullanılan her alt sorguya mutlaka bir takma ad (alias) verilmelidir.

Alt Sorgu mu, JOIN mi?

SQL öğrenenlerin en çok sorduğu sorulardan biri şudur: “Neden JOIN yerine alt sorgu kullanmalıyım?” Aslında çoğu alt sorgu, bir JOIN işlemine dönüştürülebilir. JOIN işlemleri genellikle veri tabanı motoru tarafından daha iyi optimize edilir ve daha hızlı çalışır. Ancak alt sorgular, özellikle karmaşık toplama (aggregate) fonksiyonları kullanıldığında veya kodun okunabilirliği daha önemli olduğunda tercih edilir.

📖 Örnek: JOIN ve Subquery Karşılaştırması

Subquery: SELECT ad FROM ogrenciler WHERE id IN (SELECT ogrenci_id FROM notlar WHERE puan = 100);

JOIN: SELECT DISTINCT o.ad FROM ogrenciler o JOIN notlar n ON o.id = n.ogrenci_id WHERE n.puan = 100;

Veri Güncelleme ve Silme İşlemlerinde Alt Sorgular

Alt sorgular sadece veri çekmek (SELECT) için değil, verileri yönetmek için de kullanılır. UPDATE ve DELETE komutlarında alt sorgu kullanmak, toplu işlemleri güvenli bir şekilde yapmanızı sağlar.

UPDATE ile Kullanım

Bir tablodaki değerleri, başka bir tablodaki verilere göre güncellemek istediğinizde alt sorgu hayat kurtarıcıdır. Örneğin, stok miktarı belirli bir seviyenin altına düşen ürünlerin fiyatına zam yapmak için alt sorgu kullanılabilir.

DELETE ile Kullanım

Belirli bir kriteri sağlayan (veya sağlamayan) satırları silmek için alt sorgu kullanılır. Hiç sipariş vermemiş müşterileri silmek istiyorsanız, siparişler tablosunda bulunmayan müşteri ID’lerini bir alt sorgu ile tespit edip silebilirsiniz.

✏️ Kendinizi Test Edin
  1. Bir tablodaki en yüksek ikinci maaşı alan çalışanı alt sorgu kullanarak nasıl bulursunuz?
  2. EXISTS operatörü hangi durumlarda IN operatöründen daha performanslı çalışır?
  3. Alt sorgular neden her zaman parantez içine yazılmalıdır?
  4. FROM cümlesinde kullanılan bir alt sorguya takma ad (alias) verilmezse ne tür bir hata ile karşılaşılır?

Öğrendiklerinizi Pekiştirin

Alt sorgular, SQL dilinin mantıksal derinliğini oluşturan konulardan biridir. Başlangıçta karmaşık görünse de, “içeriden dışarıya” doğru düşünme pratiği kazandığınızda işler kolaylaşacaktır. Her zaman önce içteki parantezin ne sonuç döndürdüğünü anlamaya çalışın. Daha sonra dış sorgunun bu sonucu nasıl bir filtre olarak kullandığını analiz edin. Bol bol pratik yaparak, hangi durumlarda JOIN, hangi durumlarda alt sorgu kullanmanız gerektiğini sezgisel olarak öğrenmeye başlayacaksınız.

📝 Konu Özeti
  • Tanım: Alt sorgu, başka bir SQL sorgusunun içine gömülü olan SELECT ifadesidir.
  • Yerleşim: WHERE, SELECT, FROM, HAVING, INSERT, UPDATE ve DELETE bloklarında kullanılabilir.
  • Türler: Skaler (tek değer), çok satırlı (liste) ve ilişkili (correlated) olarak ayrılırlar.
  • Operatörler: Karşılaştırma operatörlerinin yanı sıra IN, ANY, ALL ve EXISTS anahtar kelimeleriyle güçlendirilirler.
  • Performans: Küçük ve orta ölçekli verilerde harikadır, ancak devasa verilerde JOIN alternatifleri değerlendirilmelidir.

DersMerkezi.net.tr’nin yazarı, eğitim alanında yıllara dayanan deneyime sahip bir uzmandır ve öğrencilerin öğrenme sürecini desteklemeyi hedefler. Matematik, fen bilimleri, tarih, dil ve edebiyat başta olmak üzere birçok ders alanında içerik üretir ve konuları sade, anlaşılır ve adım adım rehberler halinde sunar.

Yorum Yap