Merhaba, SQL İç İçe Select Kullanım Örnekleri yazım ile uzun zamandır yazamadığım SQL hakkında bir ders ile karşınızdayım. Bu dersimizde SQL İç İçe Select konusunda bir kaç örnek yapacağız.
SQL İç İçe Select Kullanım
Örnekleri
SQL İç İçe Select Kullanım Sebebimiz
Ben projelerimde, kod ve ad mantığı kullanıyorum. Yani ID bilgisine ek olarak örnek vermek gerekirse Kullanıcılar için bir Kod bilgisi daha tutuyorum ve her zaman bu Kod bilgisini kullanıyorum. Bu cari olsun, stok olsun hep aynıdır.
Kod yerine ID kullansaydım;
Mesela, cari hesaplar tablosunda cariyi kaydeden kullanıcının ID bilgisini yazıyor olayım. Bir sebepten ötürü kullanıcı kayıtlarının silinmiş olursa tüm kullanıcıların ID bilgileri değişeceğinden, cari hesaplar tablosundaki Kullanıcı ID’leri yanlış kullanıcıları gösterecek.
Şöyle tarif edeyim, benim kullanımının ID’si 15 olsun. Bir sebepten ötürü tüm kullanıcılar ya da benim kullanıcım silinmiş olsun. Kullanıcı kaydım yeniden eklendiğinde 15 numaralı ID’yi tekrar almayacak değil mi? O zaman benim eklemiş olduğum kayıtları incelediğimizde, kayıtları 15 ID numaralı kullanıcının eklemiş olduğunu ama Kullanıcılar tablosunda 15 ID’li bir kullanıcı olmadığını görürüz. Bu bir sıkıntıdır.
ID bilgisi yerine kullanıcı adını kullanıyor olsanız ve yine bir sebepten bu kullanıcının adı değişmiş olsa yine bir sıkıntı yaşayabiliriz. Mesela kullanıcının adı yanlış yazılmıştır sonradan düzeltilme gereği hissedilmiştir. Belki de aynı isimde iki kullanıcı vardır. İki Mustafa Bükülmez olsa şirkette bir kaydı hangi Mustafa Bükülmez ekledi? Olmaz demeyin. Ben ilk okula giderken aynı ad ve soyadı olan ve birbirleri ile hiçbir akrabalıkları olmayan iki kişi vardı. :)
Bu sebepleri düşündüğümüzde hiç değişmeyecek tek şey Kod bilgisi olduğunu görebiliyoruz. Durum böyle olunca, ilgili verileri listelediğimizde kullanıcının kodu bilgisini değilde kullanıcının adı bilgisini gösterme ihtiyacımız doğuyor.
Bu sebeple de SQL İç İçe Select konusu çok gerekli oluyor… Örneği her ne kadar kullanıcı üzerinden vermiş olsam da her konuda yukarıdaki potansiyel sorunlar yaşabiliyor.
Mesela Cari, Stok, Personel, Makine, Demirbaş, Kategori vs. liste daha uzuyor.
SQL İç İçe Select Kullanım Örnekleri
Örnek 1:
Yukarıdaki konuya istinaden, kullanıcılara cari listesi göstermek istediğimizde, ilgili carileri kimlerin eklediğini göstermek isteyebiliriz. Bu durumda SQL iç içe select kullanırız.
select 'Mustafa Bükülmez' as Cari_Adi , (select Kullanici_Adi from KULLANICI_TANIMLARI where Kullanici_Kod = cari.Kaydeden) as Kaydeden from CARI_HESAPLARI as cari
Yukarıdaki sorgunun çıktısı aşağıdaki gibidir.
Kod bilgisini kaydettiğimiz her bilgi için bu şekilde iç içe select kullanabiliriz. Elbette tek kullanım amacı da bu şekilde değil. Şimdi örnek senaryolar üzerinden gidelim.
Örnek 2:
Diyelim ki, projemizde giderlerimizin kaydını tutuyoruz ve bu giderlerin ödemeleri hangi kullanıcıların yaptığını aylık toplam giderler olarak göstermek istiyoruz. 06.2020 ayı için;
select Kullanici_Kod as [Kullanıcı Kodu] , Kullanici_Adi as [Kullanıcı Adı] , isnull((select sum(Gider_Tutar) from GIDERLER_KAYDI where Kaydeden = Kullanici_Kod and Gider_Tarih>= '20200601' and Gider_Tarih<='20200630') ,0)as [Toplam Ödenen] , (select count(Gider_Tutar) from GIDERLER_KAYDI where Kaydeden = Kullanici_Kod and Gider_Tarih>= '20200601' and Gider_Tarih<='20200630')as [Ödeme Adedi] , (select MAX (Gider_Tarih) from GIDERLER_KAYDI where Kaydeden = Kullanici_Kod and Gider_Tarih>= '20200601' and Gider_Tarih<='20200630')as [Son Ödeme Tarih] from KULLANICI_TANIMLARI
Gördüğünüz gibi iç içe select kullanarak istediğimiz raporu elde etmiş olduk. Elbette bunu yapmanın başka yolları yok değil. Ben sadece konuyu anlatmak amacı ile böyle bir örnek hazırladım. Tabi yine de sık sık kullandığım bir yöntemdir. Çok büyük veriler üzerinden raporlama yapmam gerektiğinde elbette en hızlı ve mantıklı yol hangisi ise kullanırım. Burada hız ilk önceliktir. Kimse 1 saat raporun hazırlanması beklemek istemez.
Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız.
Buradan C# Eğitim Setimde yayınladığım Github projeme ulaşabilirsiniz.
Bu yazı, sitemdeki 420. yazıdır…
Sağlıcakla ve Takipte Kalın.