1. Ana Sayfa
  2. SQL

SQL İç İçe Select Kullanımı

SQL İç İçe Select Kullanımı
+ - 3

SQL İç İçe Select Kullanımı , dersimiz ile sql eğitim setime devam ediyorum. Bu dersimizde iç içe select kullanımını göreceğiz. Bu işlemi genellikle, projelerimizde Cariler olsun, personeller olsun bu tarz tanımlamaların kodlarını kullandığımızda işimize yaramaktadır. Diyelim ki Siparişler tablomuzda carilerin ve personellerin adını değil de kodlarını tutuyoruz. Bu siparişleri göstereceğimiz bir select sorgusu yazdığımızda cari kısmında cari kodu personel kısmında da personelin kodu görünecektir. Kullanıcılar da bu kodları ezbere bilmiyorsa kim olduklarını anlamayacağından buralarda iç select yazarak kodu görünen yere adlarını getirebiliriz. Bu ve buna benzer tüm işlerde SQL İç İçe Select Kullanımı yapabiliriz. Görelim.

 

SQL İç İçe Select Kullanımı

Bende şuanda bu tablolar olmadığından dolayı ve tanımlamaktan üşendiğimden dolayı çalışacağından emin olacağım şekilde, kafadan bir sorgu yazayım ve o sorgu üzerinden konuşalım.

 

SELECT
	 sip_RECno as KAYITNO
	,sip_cari_kodu  AS CARİ_KOD 
	,(SELECT cari_Adi from CARI_TANIMLARI where cari_Kod = sip_cari_kodu)  AS CARİ
	,sip_teslim_adres AS TESLİM_ADRES
	,sip_siparisi_alan_per AS PERSONEL_KOD
	,(SELECT per_Adi from PERSONEL_TANIMLARI where per_Kod = sip_siparisi_alan_per) AS PERSONEL
	,sip_miktar AS MİKTAR
	
FROM SIPARISLER

Sorgu yukarıda gördüğünüz gibidir. Şimdi incelemesini yapalım.

Siparişler tablomuzda cari adını değil cari kodunu ve personel adını değil personel kodunu tutuyoruz. Burada bizim cari kodu yerine cari adını ve personel kodu yerine personel adını getirmemiz lazım ki listeyi gören kişi hangi cari ve hangi personel olduğunu anlayabilsin.

,(SELECT cari_Adi from CARI_TANIMLARI where cari_Kod = sip_cari_kodu)  AS CARİ

Burada demek istediğimiz şey şudur;

CARI_TANIMLARI tablosuna git, sip_cari_kodu ile cari_Kodu aynı olanın cari_Adı nı getir. Bu aynı şekilde personel adı için de geçerlidir.

SQL İç içe select kullanımının mantığı budur arkadaşlar. Tabi ki her seferinde bu şekilde uzun uzun yazmayacağız. İleride göreceğimiz fonksiyonlar dersinden sonra bir fonksiyon ile bunu çözeceğiz.

FAYDALARI

Buradaki en büyük amacımız performanstır. Peki bu performans nasıl sağlanıyor?

Biliyorsunuz ki firma adları, personel adları, stok adları vs tanımlamalarda bu tanımların isimleri her zaman kısa olmuyor. Bazı firma isimleri var ki (özellikle LTD. ŞTİ ler) firma adının yanında 6, 7 tane ünvanları oluyor. Şimdi Siparişler tablosu durmadan büyüyecek bir bir tablo ama cari tablosu sürekli büyüyen bir tablo değildir. Şimdi diyelim ki Mustafa Bükülmez Yazım Bilişim Danışmalık Hizmetleri LTD. ŞTİ  adında firmadan 500 tane sipariş aldık. Siparişler tablomuzda 500 kere bu şekilde uzun uzun firma adı yazmış olacak. Ama bun uzun ad yerine kodu olan 120.000.001 yazıldığını düşünelim. Şimdi soruyorum….

Her seferinde bu upuzun firma adını çekmek mi daha uzun sürer yoksa bu kısacık kodu mu?

Şimdi burada diyecekseniz kısa kod yazdık ama başka sorgu ile adını getirdik ne farkı var?

Bu soruyu sormakta haklısınız tabi ki ama içerisinde yüzbinlerce satır olan siparişler tablosundan veri çekmek, 1000,2000 tane kayıt içeren tablodan veri çekmeye göre çook daha yavaş oluyor. Bizde tablo içerisindeki verileri mümkün mertebe kısa tutarak sonucun daha hızlı gelmesini sağlıyoruz. Burada yapılan işlem siparişler tablosundan satır alındığı anda cariler tablosundan adı getiriliyor. Yani eşleme o anda yapılıyor. 1000,2000 satırlık tablodan veri çekmenin en geç süresi bile 1 saniyeden fazla olmayacağından genel sorgunun çalışma süresinde gözle görülür bir performans sağlanmaktadır.

Çok net bir şekilde açlıklayamamış olsam da içerisinde 100.000 – 200.000 satırdan fazla olan bir siparişler tablosu ve 1000-2000 veya daha az cari içeren (cari demek müşteri demektir ki 2000 den fazla müşterisi olan yerler nadirdir.)  iki tablo edinin ilk önce eğer siparişler tablosunda cari kodları varsa iç içe select yaparak sorguyu çalıştırın ve süresine bakın sonrasında bir update ile bu kodları ad olarak değiştirin ve bir sorgu yazıp çalıştırın ve yine süresini alın ve karşılaştırın.  Bu karşılaştırmayı ben yapmadım ama yıllardır SQL ile uğraşan ve muazzam verilerle uğraşmış, raporlamalar yapmış bilgisine güvendiğim biri (aynı zamanda şuanda patronum olur) hep bu şekilde yapılması gerektiğini vurgular.

Diğer yandan tabloyu açıp baktığınızda (kodların tutulduğu) tabloda bir düzen oluyor.

Ek olarak ben ilk günden bu güne kadar hep bu şekilde yaptığımdan bana daha mantıklı ve makul geliyor.


SQL İç İçe Select Kullanımı , dersimiz de buraya kadardı dostlar diğer derslerimizde görüşürüz.

Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız.

Sağlıcakla ve Takipte Kalın. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (3)

  1. Bidikleriniz paylaştığınız ve teknik olarak gelişimimize faydalı olduğunuz için teşekkür ederim. Yapıcı bir eleştri olarak algılayacağınızı düşünerek reklam politikanızla ilgili birşey söyleyeyim. Siteden faydalanmak için reklam engelleyiciyi kapatmamızı istiyorsunuz, anlaşılacak bir şeydir ama reklamlarınızı da göden geçirin. Ben kişiselleştirilmiş reklam kullanmıyorum. Sitenizde Hristiyanlığın reklamları çıkıyor sürekli. En azından reklam ayarlarınızdan dini ve hassas içeriği kapatmanız gerekir. Siteniz, müslüman mahallesinde salyangoz satanlara mekan olmamalı. Kalın sağlıcakla.

    • Merhaba, Beni bu durumdan haber ettiğiniz ve bu nazik yorumunuz için canı gönülden teşekkür ediyorum. Gerekli aksiyonları hemen alıyorum. Yakında bu şekilde reklamlar görmeyeceksiniz.

  2. 2 sene önce

    teşekkürler bilgilendirmeniz için

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.