Site icon Netopsiyon Online

Alt Sorgular (Subqueries) ve Karmaşık Sorgular

SQL’de alt sorgular (subqueries) ve karmaşık sorgular, veriyi daha esnek bir şekilde sorgulamak ve analiz etmek için kullanılır. Alt sorgular, bir başka sorgunun içinde bulunan iç içe geçmiş sorgulardır ve özellikle filtreleme, veri manipülasyonu ve hesaplamalar için kullanılır.

Bu yazıda, alt sorguların kullanım alanlarını ve karmaşık sorgu tekniklerini anlatacağım. Bunu kimse anlatmaz demedi demeyin 🙂


1. Alt Sorgular Nedir?

Alt sorgular, SELECT, INSERT, UPDATE ve DELETE gibi SQL ifadelerinde kullanılabilen iç içe geçmiş sorgulardır. Ana sorgunun bir parçası olarak çalışırlar ve bir değeri veya veri kümesini döndürebilirler.

Alt sorgular genellikle şu şekilde kullanılır:

1.1 WHERE İçinde Alt Sorgular

Bir alt sorgu, WHERE ifadesi içinde kullanılarak belirli kriterleri karşılayan verileri seçmek için kullanılabilir.

Örnek:

SELECT * FROM Musteriler 
WHERE ID IN (SELECT MusteriID FROM Siparisler WHERE SiparisTarihi > '2024-01-01');

Bu sorgu, 2024-01-01 tarihinden sonra sipariş veren müşterileri getirir.

1.2 FROM İçinde Alt Sorgular (Sanal Tablolar)

Alt sorgular, FROM ifadesinde kullanılarak geçici bir sanal tablo (derived table) oluşturulabilir.

Örnek:

SELECT Sehir, OrtalamaYas FROM 
    (SELECT Sehir, AVG(Yas) AS OrtalamaYas FROM Musteriler GROUP BY Sehir) AS SehirBazliYas;

Bu sorgu, her şehirdeki müşterilerin ortalama yaşlarını hesaplayarak yeni bir sanal tablo oluşturur ve bu tabloyu ana sorguda kullanır.


2. JOIN ile Tabloları Birleştirme

SQL’de farklı tablolar arasında ilişki kurarak verileri birleştirmek için JOIN kullanılır.

2.1 INNER JOIN

INNER JOIN, iki tabloda eşleşen kayıtları getirir.

Örnek:

SELECT Musteriler.Ad, Siparisler.SiparisTarihi 
FROM Musteriler 
INNER JOIN Siparisler ON Musteriler.ID = Siparisler.MusteriID;

Bu sorgu, sadece siparişi olan müşterileri ve onların sipariş tarihlerini listeler.

2.2 LEFT JOIN

LEFT JOIN, sol (birinci) tablodaki tüm kayıtları getirir, sağ (ikinci) tabloda eşleşme yoksa NULL döndürür.

Örnek:

SELECT Musteriler.Ad, Siparisler.SiparisTarihi 
FROM Musteriler 
LEFT JOIN Siparisler ON Musteriler.ID = Siparisler.MusteriID;

Bu sorgu, siparişi olsun ya da olmasın tüm müşterileri getirir. Eğer müşteri hiç sipariş vermemişse SiparisTarihi sütunu NULL olur.

2.3 RIGHT JOIN

RIGHT JOIN, sağ (ikinci) tablodaki tüm kayıtları getirir, sol (birinci) tabloda eşleşme yoksa NULL döndürür.

Örnek:

SELECT Musteriler.Ad, Siparisler.SiparisTarihi 
FROM Musteriler 
RIGHT JOIN Siparisler ON Musteriler.ID = Siparisler.MusteriID;

Bu sorgu, siparişi olan tüm kayıtları listeler. Eğer siparişi olmayan müşteri varsa, o müşteri sonuç kümesine dahil edilmez.

2.4 FULL OUTER JOIN

FULL OUTER JOIN, her iki tablodaki tüm kayıtları getirir. Eşleşmeyen kayıtlar için NULL döndürülür.

Örnek:

SELECT Musteriler.Ad, Siparisler.SiparisTarihi 
FROM Musteriler 
FULL OUTER JOIN Siparisler ON Musteriler.ID = Siparisler.MusteriID;

Bu sorgu, hem siparişi olan hem de siparişi olmayan tüm müşterileri ve tüm siparişleri listeler. Eğer bir müşteri sipariş vermemişse SiparisTarihi NULL olur, eğer bir sipariş bir müşteriyle eşleşmiyorsa Ad NULL olur.

2.5 CROSS JOIN

CROSS JOIN, iki tablodaki her satırın diğer tabloyla tüm kombinasyonlarını oluşturur.

Örnek:

SELECT Musteriler.Ad, Urunler.UrunAdi 
FROM Musteriler 
CROSS JOIN Urunler;

Bu sorgu, her müşteriyi her ürünle eşleştirerek tüm olası kombinasyonları listeler.


3. Karmaşık Sorgular

Karmaşık sorgular, birden fazla alt sorgu, JOIN, UNION, CASE ve CTE (Common Table Expressions) gibi tekniklerin kombinasyonu ile oluşturulan güçlü sorgulardır.

3.1 UNION ile Veri Kümesi Birleştirme

UNION operatörü, birden fazla sorgunun sonuçlarını tek bir sonuç kümesinde birleştirmek için kullanılır.

Örnek:

SELECT Ad, Soyad FROM Musteriler WHERE Sehir = 'Istanbul'
UNION
SELECT Ad, Soyad FROM Musteriler WHERE Sehir = 'Ankara';

Bu sorgu, İstanbul ve Ankara’da yaşayan müşterileri tek bir sonuç kümesinde birleştirir.

3.2 CASE ile Koşullu İfade Kullanımı

CASE ifadesi, bir sorgu içindeki verileri koşullara göre değiştirmek için kullanılır.

Örnek:

SELECT Ad, Soyad, Yas, 
    CASE 
        WHEN Yas < 18 THEN 'Çocuk'
        WHEN Yas BETWEEN 18 AND 65 THEN 'Yetişkin'
        ELSE 'Yaşlı'
    END AS YasGrubu
FROM Musteriler;

Bu sorgu, müşterilerin yaşlarına göre hangi yaş grubuna ait olduğunu belirler.

Alt sorgular ve karmaşık sorgular, SQL’in gücünü artıran önemli tekniklerdir. WHERE, FROM, HAVING ve SELECT ifadelerinde alt sorgular kullanarak veri analizi yapabiliriz. Ayrıca JOIN, UNION, CASE ve CTE gibi yapılar ile sorgular daha güçlü hale getirilebilir.

Exit mobile version