Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Yan Yana Banner
Katılım
7 Nis 2025
Konular
367
Mesajlar
780
Çözümler
1
Tepkime puanı
121
Puan
93
Konum
İstanbul
Web sitesi
forumagel.com
Temel SELECT, WHERE, JOIN ve GROUP BY komutları çoğu sorgulama ihtiyacınızı karşılayabilir. Ancak bazen, daha karmaşık mantık gerektiren veya bir sorgunun sonucunu başka bir sorguda kullanmanız gereken durumlarla karşılaşırsınız. İşte bu noktada Alt Sorgular (Subqueries) ve Common Table Expressions (CTEs) gibi ileri seviye SQL teknikleri devreye girer.

Alt Sorgular (Subqueries)

Alt sorgu (nested query veya inner query olarak da adlandırılır), başka bir SQL sorgusunun içine yerleştirilmiş bir SELECT sorgusudur. Alt sorgular, ana sorgunun koşulları için veri sağlamak üzere kullanılır. Alt sorgular parantez
Ziyaretçiler için gizlenmiş link, görmek için kayıt olun. Giriş yap veya üye ol.
[/icode]
içine alınır.

Alt sorgular farklı yerlerde kullanılabilir:

  • WHERE yan tümcesinde bir koşul için.
  • FROM yan tümcesinde sanal bir tablo gibi.
  • SELECT yan tümcesinde tek bir değer döndürmek için (Scalar Subquery).
1. WHERE Yan Tümcesinde Alt Sorgular

Bu en yaygın kullanım alanıdır. Alt sorgu, ana sorgudaki WHERE koşulunu belirlemek için bir değer veya bir değer listesi döndürür.

Örnek: Fiyatı ortalama ürün fiyatından yüksek olan ürünleri listeleme.Önce ortalama fiyatı bulmamız gerekir, sonra bu değeri ana sorguda kullanırız.

Kod:
SELECT UrunAd, FiyatFROM UrunlerWHERE Fiyat > (SELECT AVG(Fiyat) FROM Urunler); -- Alt sorgu burada

Alt sorgu (SELECT AVG(Fiyat) FROM Urunler) tek bir değer (ortalama fiyat) döndürür ve bu değer ana sorgunun WHERE koşulunda kullanılır.

2. FROM Yan Tümcesinde Alt Sorgular (Derived Tables)

Alt sorgunun sonuç kümesi, sanki geçici bir tabloymuş gibi ana sorgunun FROM yan tümcesinde kullanılır. Bu tür alt sorgulara Türetilmiş Tablolar (Derived Tables) denir ve genellikle bir takma ad (alias) verilmesi gerekir.

Örnek: Her kategorideki en pahalı ürünü bulma.Önce her ürünün kendi kategorisindeki en yüksek fiyatla karşılaştırılacağı bir yol bulmalıyız.

Kod:
SELECT u.UrunAd, u.Fiyat, u.KategoriFROM Urunler uINNER JOIN (SELECT Kategori, MAX(Fiyat) AS MaksFiyatFROM UrunlerGROUP BY Kategori) AS KategoriEnPahali ON u.Kategori = KategoriEnPahali.Kategori AND u.Fiyat = KategoriEnPahali.MaksFiyat;

Burada (SELECT Kategori, MAX(Fiyat) AS MaksFiyat FROM Urunler GROUP BY Kategori) AS KategoriEnPahali kısmı bir türetilmiş tablodur. Her kategori için en yüksek fiyatı hesaplar ve bu sonuç, ana sorgu ile JOIN yapmak için kullanılır.

3. Correlated Subqueries (İlişkili Alt Sorgular)

Normal alt sorgulardan farklı olarak, ilişkili alt sorgular ana sorgudan gelen verilere bağlıdır. Yani, içteki alt sorgu her dış satır için bir kez çalışır. Genellikle WHERE veya SELECT yan tümcelerinde kullanılırlar ve ana sorgudan bir sütuna referans verirler. Performans açısından bazen dikkatli kullanılmaları gerekir.

Örnek: Fiyatı kendi kategorisindeki ortalama fiyattan yüksek olan ürünleri listeleme. (Basit ortalama örneğinden farklı olarak, bu her kategori için ayrı ayrı ortalamayı hesaplar).

Kod:
SELECT UrunAd, Fiyat, KategoriFROM Urunler u1WHERE Fiyat > (SELECT AVG(Fiyat) FROM Urunler u2 WHERE u2.Kategori = u1.Kategori);

Burada içteki alt sorgu (SELECT AVG(Fiyat) FROM Urunler u2 WHERE u2.Kategori = u1.Kategori), dış sorgudaki u1 takma adıyla temsil edilen her ürünün kategorisine göre ortalama fiyatı hesaplar.

Common Table Expressions (CTEs)

Common Table Expression (CTE), tek bir sorgunun yürütülmesi süresince var olan geçici bir adlandırılmış sonuç kümesidir. Sorguları daha okunabilir, bakımı daha kolay hale getirmek ve karmaşık mantığı daha küçük, yönetilebilir parçalara bölmek için kullanılırlar. CTE'ler WITH anahtar kelimesi ile tanımlanır.

CTEs'ler özellikle şu durumlarda faydalıdır:

  • Karmaşık sorguları basitleştirme.
  • Türetilmiş tablolara (FROM yan tümcesindeki alt sorgular) daha okunabilir bir alternatif sunma.
  • Tekrarlayan alt sorguları ortadan kaldırma.
  • Özyinelemeli (recursive) sorgular yazma.
Örnek: Her kategorideki en pahalı ürünü CTE kullanarak bulma (Yukarıdaki türetilmiş tablo örneğinin CTE ile yazılmış hali).

Kod:
WITH KategoriMaksFiyat AS (SELECT Kategori, MAX(Fiyat) AS MaksFiyatFROM UrunlerGROUP BY Kategori)SELECT u.UrunAd, u.Fiyat, u.KategoriFROM Urunler uINNER JOIN KategoriMaksFiyat k ON u.Kategori = k.Kategori AND u.Fiyat = k.MaksFiyat;

Burada KategoriMaksFiyat adında bir CTE tanımladık. Bu CTE, her kategori için maksimum fiyatı hesaplayan sorgunun sonucunu tutar. Daha sonra ana sorguda bu CTE'yi sanki normal bir tabloymuş gibi kullandık. Bu yapı, sorguyu okuyan kişi için neyin hesaplandığını ve nerede kullanıldığını anlamayı kolaylaştırır.

Alt sorgular ve CTE'ler, SQL'in gücünü tam olarak kullanmanızı sağlayan önemli araçlardır. Başlangıçta biraz kafa karıştırıcı görünebilirler, ancak pratik yaptıkça sorgularınızı daha etkili ve zarif bir şekilde yazmanıza yardımcı olurlar.

Bu bölümde ileri SQL sorgulama tekniklerinden alt sorgular ve CTE'lere değindik. Veritabanı performansını anlamak ve sorgularınızı optimize etmek de bu işin önemli bir parçasıdır.

Bir sonraki bölümde, yazdığınız SQL sorgularının veritabanı tarafından nasıl işlendiğini anlamanıza yardımcı olan sorgu yürütme planları (execution plans) konusuna giriş yapabiliriz.


 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri