Ana içeriğe atla

SQL Alt Sorgu: Kapsamlı Rehber

Veritabanı sorgularınızı geliştirmek için SQL alt sorgularına nasıl hâkim olacağınızı keşfedin. İlişkili, ilişkisiz ve özyinelemeli alt sorguları öğrenin. Çalıştırma sırası ve alt sorguları diğer SQL özellikleriyle birleştirme konularına göz atın.
Güncel 22 Nis 2026  · 8 dk. oku

SQL alt sorguları, veritabanı yönetiminde daha karmaşık ve verimli veri alma imkânı sağlayan güçlü bir araçtır. Bu rehber, SQL alt sorgularının temellerini adım adım ele alarak pratik kullanım alanları ve ileri tekniklere dair içgörüler sunar. İster yeni başlayan olun ister deneyimli bir profesyonel, alt sorgulara hâkim olmak SQL becerilerinizi önemli ölçüde geliştirebilir.

SQL’e yeni başlayanlar için, sağlam bir temel oluşturmak amacıyla Orta Düzey SQL kursumuzla başlamanızı öneririz. Ayrıca, indirip kullanabileceğiniz SQL Temelleri Cheat Sheet’inin en yaygın SQL fonksiyonlarını içermesi nedeniyle iyi bir başvuru kaynağı olduğunu düşünüyorum. Son olarak, alt sorguların sık karşılaşılan bir SQL mülakat sorusu olduğunu da belirtmek isterim; bir mülakata hazırlanıyorsanız, gözden geçirmek için doğru yerdesiniz.

SQL Alt Sorgu Nedir?

Alt sorgu, aksi halde birden fazla ayrı sorgu gerektirecek görevleri üstlenerek SQL sorgularını daha modüler hâle getirir.

Tanım ve amaç

SQL alt sorgusu, birden fazla adım veya karmaşık mantık gerektiren işlemleri gerçekleştirmek için başka bir SQL sorgusunun içine yerleştirilen sorgudur. SQL’de alt sorguların rolü şunları içerir:

  • İlişkili tablolardaki verilere göre kayıtları filtrelemek.
  • Verileri toplamak ve hesaplamaları dinamik olarak yapmak.
  • Tablolar arasında çapraz başvuru yaparak belirli içgörüleri elde etmek.
  • Açıkça join yazmaya veya harici kod mantığına gerek kalmadan koşullu satır seçmek.

Çok gibi görünebilir, ancak eğitim boyunca bunları inceledikçe anlam kazanacak.

Alt sorgu türleri

Farklı alt sorgu türleri olduğunu duymak sizi şaşırtabilir. Bu türler, farklı veri alma ihtiyaçlarına göre gruplandırılır ve bu ihtiyaçlara uygundur. Gerçekleştirmek istediğiniz işleme bağlı olarak aşağıdaki alt sorgular arasından seçim yapabilirsiniz:

Skaler alt sorgular

Skaler alt sorgular tek bir değer döndürür; örneğin bir satır ve bir sütun. Genellikle SELECT veya WHERE ifadelerinde hesaplama, karşılaştırma veya atama gibi tek bir değerin beklendiği yerlerde kullanılır.

Aşağıdaki örnekte, skaler alt sorgu (SELECT AVG(salary) FROM employees) tek bir değer, yani ortalama maaşı döndürür ve bunu her çalışanın maaşıyla karşılaştırır.

-- Example of Scalar Subquery 
-- Compares each salary to the average salary
SELECT employee_name, 
       salary,
       (SELECT AVG(salary) FROM employees) AS average_salary 
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Sütun alt sorguları

Sütun alt sorguları tek bir sütun ama birden çok satır döndürür. Bu alt sorgular sıklıkla IN veya ANY gibi operatörlerle kullanılır; dış sorgu, birden fazla satırdan gelen değerleri karşılaştırır.

Örneğin, aşağıdaki alt sorgu New York’ta bulunan departmanların departman kimliklerini döndürür; ana sorgu da bu departmanlardaki çalışanları filtrelemek için bu listeyi kullanır.

-- Example of Column Subquery 
-- Filters based on departments in New York
SELECT employee_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');

Satır alt sorguları

Satır alt sorguları, birden çok sütun içeren tek bir satır döndürür. Genellikle bir veri satırını karşılaştırabilen = veya IN gibi karşılaştırma operatörleriyle, birden çok değerin beklendiği durumlarda kullanılır.

Aşağıdaki alt sorgu bir yöneticinin departmanını ve iş unvanını getirir; dış sorgu da bu değerlerle eşleşen çalışanları bulur.

-- Example of Row Subquery 
-- Matches department and job title with a specific manager
SELECT employee_name
FROM employees
WHERE (department_id, job_title) = (SELECT department_id, job_title FROM managers WHERE manager_id = 1);

Tablo alt sorguları (türetilmiş tablolar)

Tablo alt sorguları veya türetilmiş tablolar, birden çok satır ve sütundan oluşan tam bir tablo döndürür. Bunlar genellikle sorgu içinde FROM ifadesinde geçici bir tablo olarak kullanılır.

Örneğin, aşağıdaki alt sorgu departman bazında ortalama maaşlardan oluşan bir türetilmiş tablo oluşturur; dış sorgu ise bu tabloyu kullanarak ortalama maaşı belirtilen eşiğin üzerinde olan departmanları bulur.

-- Example of Table Subquery 
-- Uses derived table for average department salary comparison
SELECT dept_avg.department_id, dept_avg.avg_salary
FROM 
    (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id) AS dept_avg
WHERE dept_avg.avg_salary > 50000;

SQL Alt Sorgularını Anlamak

Yukarıdaki örneklerden gördüğümüz gibi, bir alt sorgu parantez içinde yer alır. Şimdi bir alt sorgunun işleyişini, söz dizimini ve çalıştırma sırasını inceleyelim.

Söz dizimi ve yapı

Alt sorgunun söz dizimi, ana SQL ifadesinde nerede kullanıldığına bağlı olarak değişir; örneğin SELECT, FROM veya WHERE içinde. Alt sorgular genellikle ayrı bir sorguyu belirten parantezlerle ( ) çevrilidir. 

Aşağıdaki örnek, bir WHERE ifadesi içindeki alt sorguyu gösterir; böylece ana sorgudaki verileri iç içe sorgunun sonuçlarına göre filtrelememize olanak tanır. 

-- Selects the main column to retrieve from the main table to query
SELECT column_name
FROM table_name
-- Applies a condition to filter rows based on the subquery result
WHERE column_name operator 
      -- Subquery retrieves data for comparison in the WHERE clause
      (SELECT column_name FROM table_name WHERE condition);  

Çalıştırma sırası

Alt sorguların çalıştırma sırası, ilişkili olup olmadıklarına bağlıdır.

İlişkisiz alt sorgular

İlişkisiz alt sorgular dış sorgudan bağımsızdır ve önce çalışır. Alt sorgunun sonucu daha sonra dış sorguya aktarılır. İlişkisiz alt sorgular genellikle skaler veya sütun düzeyinde hesaplama ve filtrelemelerde kullanılır.

Aşağıdaki sorgu şu sırayı izler:

  • (SELECT AVG(salary) FROM employees) alt sorgusu önce çalışır ve ortalama maaşı hesaplar.

  • Dış sorgu daha sonra bu ortalamadan yüksek maaşa sahip çalışanları getirir.

-- Retrieves names of employees with above-average salary
SELECT employee_name  
FROM employees
-- Subquery: calculates average salary across all employees
WHERE salary > (SELECT AVG(salary) FROM employees);  

Gruplama, veri toplama ve tabloları birleştirme hakkında daha fazla bilgi edinmek için DataCamp’in Introduction to SQL Server kursunu almanızı öneririm.

İlişkili alt sorgular

İlişkili alt sorgular, verilerinin bir kısmı için dış sorguya bağlıdır; bu nedenle dış sorgu tarafından işlenen her satır için yeniden değerlendirilirler. 

Aşağıdaki sorgu şu sırayla çalışır:

  • employees tablosundaki her satır için (e1 takma adıyla), (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id) alt sorgusu ilgili departman için ortalama maaşı hesaplar.

  • Dış sorgu, her çalışanın maaşını departman ortalamasıyla karşılaştırır ve yalnızca daha fazla kazananları dahil eder.

-- Retrieves names of employees with above-average salary in their department
SELECT e1.employee_name  
FROM employees e1
 -- Subquery: calculates average salary for each department
WHERE e1.salary > (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id); 

SQL Alt Sorgusunun Kullanım Alanları

SQL alt sorguları, karmaşık sorgular yazmanıza ve ileri düzey veri analizi görevlerini yürütmenize olanak tanıyarak veri alma ve dönüştürme için önemlidir. Aşağıdakiler, veritabanı yönetiminde alt sorguların gerçek dünya uygulamalarıdır.

Veri filtreleme

Alt sorgular, özellikle filtrelemenin birden fazla tablo arasında değerleri karşılaştırmayı veya hesaplamalar yapmayı gerektirdiği durumlarda, dinamik koşullara göre veri filtrelemede faydalıdır.

Aşağıdaki alt sorgu, "Product A"nın category_id değerini getirir; ana sorgu ise o kategorideki tüm ürünleri bulur.

-- Retrieves names of products in the same category as 'Product A'
SELECT product_name  
FROM products
 -- Subquery: finds category ID of 'Product A'
WHERE category_id = (SELECT category_id FROM products WHERE product_name = 'Product A'); 

Veri toplama

Alt sorgular, özellikle raporlama ve analiz için özet istatistikler veya içgörüler üretirken veri toplamaya da kullanılır. (SELECT department_id, AVG(sales) AS avg_sales FROM sales GROUP BY department_id) alt sorgusu, departman başına ortalama satışı hesaplar. Dış sorgu daha sonra ortalama satışı 50.000’in üzerinde olan departmanları filtreler. 

-- Retrieves department IDs and their average sales
-- Filters for departments with average sales over 50,000
SELECT department_id, avg_sales  
FROM (SELECT department_id, AVG(sales) AS avg_sales FROM sales GROUP BY department_id) AS dept_sales  -- Subquery: calculates average sales per department
WHERE avg_sales > 50000;  

Performans Hususları ve En İyi Uygulamalar

Alt sorgular, karmaşık sorgular yazarken güçlü olsa da özellikle büyük veri kümeleriyle çalışırken performansı etkileyebilir. Yaygın tuzakları ve daha iyi performans için en iyi uygulamaları dikkate almak önemlidir.

Alt sorgu performansını optimize etme

Alt sorgu performansını optimize etmek, sorgu çalışma süresini ve veritabanı yanıt verebilirliğini iyileştirir. Alt sorguyu optimize etmenin yolları şunlardır:

  • İlgili Sütunları İndeksleyin: Veri alımını hızlandırmak için WHERE ve JOIN ifadelerinde ve karşılaştırma işlemlerinde kullanılan sütunların indekslendiğinden emin olun.

  • İlişkili Alt Sorgu Kullanımını Sınırlayın: Mümkün olduğunda, satır satır işleme yerine küme işlemlerinden yararlanabildikleri için ilişkili alt sorgular yerine JOIN işlemleri veya CTE kullanın; genellikle daha hızlıdırlar.

  • Alt Sorgulardaki Sütun Sayısını Sınırlayın: Veri alımını en aza indirmek, bellek kullanımını azaltmak ve veritabanının yürütmeyi optimize etmesini sağlamak için alt sorgularda yalnızca ihtiyaç duyduğunuz sütunları seçin.

  • IN yerine EXISTS kullanın: Bir alt sorgu büyük bir veri kümesi döndürüyorsa, IN yerine EXISTS kullanmak performansı artırabilir. EXISTS operatörü eşleşen bir satır bulduğunda sorgu işlemeyi durdurur; IN ise alt sorgunun tamamını değerlendirmeye devam eder.

Yaygın tuzaklardan kaçınma

Alt sorguları hatalı yazdığınızda, çalıştırmada sorunlarla karşılaşabilirsiniz. Bu tuzaklardan nasıl kaçınılacağına bakalım.

  • Gereksiz İlişkili Alt Sorgulardan Kaçının: İlişkili alt sorgular kaynak tüketir; sonuç ilişkisiz bir alt sorgu veya join ile elde edilebiliyorsa bunları kullanmaktan kaçının.

  • Alt Sorgularda NULL Değerlerine Dikkat Edin: NULL değerleri, özellikle IN veya = gibi karşılaştırma operatörlerinin kullanıldığı alt sorgularda beklenmedik sonuçlara yol açabilir. Hatalardan kaçınmak için null değerleri COALESCE ile ele almayı veya karşılaştırmalarda kullanılan sütunların boş geçilemez olmasını düşünün.

  • Alt Sorgularda SELECT * Kullanmayın: SELECT * gereksiz yere tüm sütunları getirerek verimsizliğe yol açar; ihtiyacınız olmasa bile tüm sütunlar çekilir. Bu durum bellek kullanımını artırır ve özellikle büyük veri kümelerinde sorguyu yavaşlatabilir.

  • Anlamlı Takma Adlar Kullanın: Okunabilirliği artırmak için tablolarınızı ve alt sorgularınızı açık şekilde adlandırın.

SQL Server Developer kariyer programımızı deneyin; SQL Server kullanarak sorgularınızı yazma, sorun giderme ve optimize etme becerileri kazanırsınız. 

Daha İleri SQL Alt Sorgu Teknikleri

Alt sorgular karmaşık sorguları verimli şekilde yazma imkânı sunsa da hiyerarşik veriyi ele almak için ileri yöntemler de vardır. SQL alt sorgularını uygulamaya yönelik gelişmiş teknik ve stratejilere bakalım.

Özyinelemeli alt sorgular

Özyinelemeli alt sorgular (özyinelemeli ortak tablo ifadeleri veya CTE’ler olarak da bilinir), her öğenin başka birine bağlı olduğu organizasyon şemaları, ürün kategorileri veya grafik tabanlı ilişkiler gibi hiyerarşik verileri getirmenizi sağlar.

Diyelim ki employees adında, employee_id, manager_id ve employee_name sütunlarına sahip bir tablonuz var. Belirli bir yöneticinin altındaki çalışan hiyerarşisini getirmek istiyorsunuz.

WITH RECURSIVE EmployeeHierarchy AS (
    -- Anchor Query: Start with the specified manager
    SELECT employee_id, manager_id, employee_name, 1 AS level
    FROM employees
 -- Assuming the top-level manager has NULL as manager_id
    WHERE manager_id IS NULL 
    
    UNION ALL
    
    -- Recursive Query: Find employees who report to those in the previous level
    SELECT e.employee_id, e.manager_id, e.employee_name, eh.level + 1
    FROM employees e
    INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id
)
SELECT * FROM EmployeeHierarchy;

Yukarıdaki sorguda:

  • Çapa Sorgu (Anchor Query) olarak adlandırdığım kısım, (manager_id değerinin NULL olduğu) en üst düzey yöneticiyi seçer.

  • Özyinelemeli Sorgu, employees tablosunu CTE’nin kendisiyle (EmployeeHierarchy) birleştirerek, bir önceki seviyede bulunan çalışanlara bağlı çalışanları bulur.

  • Daha fazla bağlı çalışan kalmayana kadar özyineleme devam eder.

Alt sorguları diğer SQL özellikleriyle birleştirme

Alt sorguları pencere fonksiyonları, CASE ifadeleri ve gruplama fonksiyonları gibi diğer SQL özellikleriyle entegre edebilirsiniz. Bu birleşimler, ileri düzey veri işlemleri ve daha kapsamlı raporlama sağlar.

Alt sorguları pencere fonksiyonlarıyla birleştirme

Alt sorgular, pencere fonksiyonlarının çalıştığı veri kümesini iyileştirmek için kullanılabilir; sıralama, kümülatif toplamlar ve hareketli ortalamalar için faydalıdır. Diyelim ki ürünleri her bölge içinde satışa göre sıralamak istiyorsunuz. İlgili veriyi seçmek için bir alt sorgu kullanabilir, ardından sıralama için bir pencere fonksiyonu uygulayabilirsiniz.

 -- Ranks products by sales within each region
SELECT region, product_id, sales, 
       RANK() OVER (PARTITION BY region ORDER BY sales DESC) AS sales_rank 
-- Subquery: calculates total sales per product in each region
FROM (SELECT region, product_id, SUM(sales) AS sales  
      FROM sales_data
      GROUP BY region, product_id) AS regional_sales;

CASE ifadeleriyle alt sorgu kullanma

Alt sorguları CASE ifadeleriyle birleştirmek, dinamik hesaplamalara dayalı karmaşık koşulları uygulamanıza yardımcı olabilir. Aşağıdaki sorgu, ürünleri kategorilerinin ortalama satışına göre “High”, “Medium” veya “Low” performanslı olarak sınıflandırır.

 -- Categorize above-average sales, average sales, and below-average sales
SELECT product_id, category_id, sales,
       CASE 
           WHEN sales > (SELECT AVG(sales) FROM products WHERE category_id = p.category_id) THEN 'High' 
           WHEN sales = (SELECT AVG(sales) FROM products WHERE category_id = p.category_id) THEN 'Medium' 
           ELSE 'Low'
       END AS performance
FROM products AS p;

Koşullu toplama için toplama fonksiyonlarıyla alt sorgular

Toplama fonksiyonları içinde alt sorgular kullanarak koşullu toplamalar da hesaplayabilirsiniz. Diyelim ki yalnızca aktif müşterilerin oluşturduğu toplam geliri hesaplamak istiyorsunuz. Aşağıdaki örnekte, alt sorgu tüm aktif müşterileri getirir. Ana sorgu daha sonra yalnızca aktif müşterilerin verdiği siparişleri dahil ederek bu gruptan elde edilen toplam geliri hesaplar.

 -- Calculates total revenue from active customers
SELECT SUM(order_total) AS active_customer_revenue 
FROM orders
  -- Subquery: retrieves IDs of active customers
WHERE customer_id IN (
    SELECT customer_id
    FROM customers
    WHERE status = 'Active'
);

SQL Alt Sorgular Ne Zaman Kullanılır

SQL alt sorguları, veri analizi için çok yönlü gerçek dünya uygulamaları sunar; bu nedenle sıklıkla kullanılırlar. Aşağıda SQL alt sorgularının bazı sektöre özgü veya matematiksel uygulamaları yer alır. Bu fikirleri oluştururken, birden fazla adım gerektiren veri analizi veya veri mühendisliği işlerini düşündüm; bana göre alt sorguların gerçekten parladığı yer burası.

Sektöre özgü örnekler

Alt sorgular; finans, sağlık ve perakende sektörlerinde faydalı çözümler sunabilir. İşte bazı fikirler:

  • Kredi Onaylarında Risk Değerlendirmesi (Finans): Bankaların borç/gelir oranı ve kredi skoru gibi metrikleri bir arada değerlendirdiğini hayal ediyorum. Bu metrikleri alt sorgularda iç içe kullanarak analistler karmaşık finansal ölçümleri daha iyi yorumlayabilir. Örneğin, bir alt sorgu belirli gelir dilimlerindeki müşteriler için ortalama kredi tutarını hesaplayabilir.

  • Hasta Tanılarında Desenleri Belirleme (Sağlık): Sağlık alanında hasta verilerini yönetmek büyük bir iştir. Alt sorgular bu karmaşıklığı parçalamaya yardımcı olabilir. Farklı yaş grupları veya risk faktörleri arasında tanı sıklıklarını izlemek için alt sorgular kullanmayı hayal ediyorum.

  • Satın Alma Geçmişine Göre Ürün Yerleşimini Optimize Etme (Perakende): Perakendeciler, satın alma kalıplarını anlamakla yükselir. Alt sorgular, birlikte sıkça satın alınan ürünleri belirlemek için iç içe satın alma verilerini gösterebilir. Bu da tamamlayıcı ürünlerin stratejik konumlandırılmasına ve satışların artırılmasına yardımcı olabilir.

Matematiksel bağlantılar

Alt sorgular, matematiksel ve mantıksal bağlantılarda veri desenlerini ve eğilimlerini belirlemede de kullanılır. Aşağıda alt sorguların matematikte uygulandığı bazı senaryolar yer alır.

  • Zaman Serisi Analizi için Hareketli Ortalamalar: Zaman içindeki eğilimleri analiz ederken, alt sorgular hareketli ortalamaların hesaplanmasını basitleştirir. İç içe sorgularda belirli zaman pencereleri tanımladıklarını ve veriyi yumuşatmayı, eğilimleri tespit etmeyi kolaylaştırdıklarını görüyorum.

  • Standart Sapmalarla Aykırı Değer Tespiti: Aykırı değerleri saptamak pek çok şey için önemlidir; dolandırıcılık tespiti gibi konular buna dahildir. Alt sorgular, standart sapma gibi türetilmiş metriklerin iç içe sorgularda hesaplanmasını kolaylaştırır.

  • Kümeler Kuramı Kavramlarını Kullanma: Alt sorguların UNION ve INTERSECT gibi kümeler kuramı işlemlerini yansıtmasını ilginç buluyorum. Bu yetenek, müşteri grupları arasındaki örtüşme ve farklılıkları anlamanın daha akıllı pazarlama stratejilerine yön verebildiği müşteri tutundurma analizi gibi görevler için idealdir.

Sonuç

SQL alt sorgularına hâkim olmak, verileri verimli biçimde yönetme ve analiz etme yeteneğinizi önemli ölçüde artırabilir. Yapılarını, kullanım alanlarını ve en iyi uygulamaları anlayarak, SQL sorgularınızı daha iyi performans için optimize edebilirsiniz. Ayrıca, alt sorgulara hâkim olmanın SQL yazmayı gerçekten kolaylaştırdığını da söylemek isterim; öğrenmeye değer.

Yetkin bir veri analisti olmakla ilgileniyorsanız, gerekli becerileri öğrenmek için Associate Data Analyst in SQL kariyer programımıza göz atın. Reporting in SQL kursu da SQL kullanarak profesyonel panolar oluşturmayı öğrenmek istiyorsanız uygundur. Son olarak, SQL’i veri analizi için kullanmadaki yetkinliğinizi göstermek ve diğer veri profesyonelleri arasında öne çıkmak için SQL Associate Certification almanızı öneririm.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Veri analitiği, iş zekâsı ve veri bilimi alanlarında pratik deneyime sahip Veri Bilimi Teknik Yazarı. SQL, Python, Power BI, Databricks ve veri mühendisliği üzerine, gerçek dünya analitik çalışmalarına dayanan, uygulamaya dönük ve sektöre odaklı içerikler yazıyorum. Yazılarım teknik derinlikle iş etkisi arasındaki köprüyü kurarak profesyonellerin veriyi güvenle karara dönüştürmelerine yardımcı olur.

SQL Alt Sorgu SSS

SQL alt sorgusu nedir?

SQL alt sorgusu, birden fazla adım veya karmaşık mantık gerektiren işlemleri gerçekleştirmek için başka bir SQL sorgusunun içine yerleştirilen sorgudur.

SQL'de alt sorgu nasıl kullanılır?

Alt sorgular, SQL ifadeleri içinde verileri filtrelemek, hesaplamalar yapmak veya karmaşık koşullara dayalı belirli bilgileri almak için kullanılır.

SQL'de alt sorgu türleri nelerdir?

SQL alt sorguları; skaler, sütun, satır ve tablo alt sorguları olarak sınıflandırılabilir ve her biri veri alımında farklı amaçlara hizmet eder.

Alt sorgu ile join arasındaki fark nedir?

Alt sorgu, karmaşık işlemler için kullanılan iç içe sorgudur; join ise ilişkili sütunlara göre iki veya daha fazla tablodan satırları birleştirir.

Alt sorgular SQL sorgu performansını nasıl iyileştirebilir?

Alt sorgular, karmaşık sorguları daha küçük, yönetilebilir parçalara ayırarak basitleştirebilir ve doğru kullanıldığında performansı iyileştirebilir.

Konular

DataCamp ile SQL Öğrenin

Kurs

SQL’e Giriş

2 sa
1.5M
Sadece iki saat içinde SQL kullanarak ilişkisel veritabanlarını nasıl oluşturacağınızı ve sorgulayacağınızı öğrenin.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow