SQL İç İçe Select, İnner Join, Order ve Group By Kullanımı – Örnekle Anlatım – Örnekle Anlatım , yazımız ile sql eğitim setime devam ediyorum. Bu yazım ile birlikte birkaç örnek daha yapmayı düşünüyorum. Hem anlattığım dersleri pekiştirebilmeniz hemde farklı kullanım şekillerinin sonuçlarını görebilirsiniz. Bu örnek bir zamanlar, bir yazılım soru cevap sitesinde sorulan soruya verdiğim cevabı içeriyor. Gelin SQL İç İçe Select, İnner Join, Order ve Group By Kullanımı – Örnekle Anlatımgörelim.
SQL İç İçe Select, İnner Join, Order ve Group By Kullanımı – Örnekle Anlatım
Bu dersim
- İç içe select kullanımının örnek üzerinde anlatımı
- İnner Join kullanımının örnek üzerinde anlatımı
- Order By kullanımının örnek üzerinde anlatımı
- Group By kullanımının örnek üzerinde anlatımı
konularını ve iki farklı örnek içermektedir. Aslında bir aynı işi (3) ÜÇ farklı yol ile yapacağız.
Yapacağımız iş neredeyse tüm web sitesinde kullandığımız “kategori” sistemi ile ilgili olacak. Bir kateogi listemiz olacak ve bu kategoriye ait kaç içerik varsa adedini kateogi adının yanına yazdıracağız.
Önce iç içe select kullanarak örneğimizi yapalım ve ekran görüntüsüne bir bakalım.
elect kat_adi as Kategori, (Select Count(*) from Haberler Where Hbr_Kategori = kat_adi) as Adet From Kategoriler Where Aktif = 1 -ya Order By Adet desc -- genelde bu kullanılır. -- Bu şekilde içerisinde en çok makale olan kategori en üstte olacaktır --yada Order By Kategori asc -- Bu şekilde kategorileri alfabetik olarak a-z olarak sıralayacak ------------------------------------------ --iki kolona göre de sıralayabilirsiniz ancak; Order By Kategori, Adet asc -- Kategori a'dan z'ye sıralı ve adet az olandan çok olana doğru şekilde sıralanır. Order By Kategori, Adet desc -- Kategori z'den a'ya sıralı ve adet çok olandan az olana şeklinde sıralanır. --aynı anda iki adet order by yazamazsınız.
NOT: Order by yazarken kolon adını yazmak zorunda değiliz. Kolonun adı olan “kat_adi” da yazsak “as” dan sonraki “Kategori” de yazsak doğrudur. Her ikisinde de hata almayız.
Şimdi de İnner join kullanarak aynı işlemi yapalım.
SELECT TOP 100 PERCENT Kat_Adi as kategori_Adi, COUNT(Haberler.Hbr_Kategori) adet FROM Kategoriler INNER JOIN Haberler ON Haberler.Hbr_Kategori = Kategoriler.Kat_Adi WHERE Kategoriler.Aktif = 1 GROUP by Haberler.Hbr_Kategori,Kategoriler.Kat_Adi ORDER BY Kategoriler.Kat_Adi ASC
1 – Her kategori adından bir tane görünmesi için
GROUP by Haberler.Hbr_Kategori,Kategoriler.Kat_Adi
2 – Haberlerin sayısı için
COUNT(Haberler.Hbr_Kategori) adet
İnner Join de “group by” kullanmadan bu işi yapamayız. Aksi takdirde “count()” dan dolayı hata verecektir. Sebebi ise Haberler tablomuzda A kategorisine ait on adet haber var ama kategoriler tablomuzda bir adet A kategorisi var. Bir tablodan bir kayıt diğer tablodan on kayıt geleceğinden dolayı listeyi yapamaycak bu sebeple de hata verecektir.
Hata almamak için Haberler tablosundaki haberleri kategori adıan göre grupluyoruz ki bir tane kategori bilgisi gelsin ve bu şekilde kategori tablosu ile eşleştirme yapılabilsin.
NOT: Bunu sadece Haberler tablosu üzerinden de yapabiliriz. Ancak o zamanda içerisinde haber olmayan kategorileri listelenmeyecektir. Inner Join kullanımı yerine sadece Haberler tablosu üzerinden de aynı sonucu aşağıdaki select sorgusu ile alabiliriz.
select Hbr_Kategori as kat, count(*) as adet from Haberler group by Hbr_Kategori
Buradaki amacımız Inner Join’i de anlatmak olduğundan ve tek bir örnek üzerinde olması amacı ile bu şekilde anlattım.
Aradaki farkları bakalım.
İç İçe Select:
Avantajları:
- Okunması, yazılması ve anlaşılması daha kolaydır.
- Ana tablo baz alınarak işlemler yapılır.
Dezavantaları:
- Göstermek istediğin her kolon için ayrı ayrı select sorgusu yazman gerekir.
- Çok fazla tablo kullanmak gerektiğinde hız açısından yavaştır.
Inner Join:
Avantajları:
- SQL Management Studio üzerinde Views bölümünden kolayca oluşturulabilir.
- Çoklu tablolarda kolayca ilişkilendirme yapılabilir
- Sorgular hızlı çalışır.
Dezavantajları:
- Okunması, yazılması ve anlaması zordur.
- Manuel olarak yazmak istediğinde daha çok zorlanırsın ve uzun zaman alır.
- Tablolardaki ortak bilgiler baz alınarak işlemler yapılır.
Bu açıklamada kafanızı karıştırabileceğini yada kafanızda soru işareti oluşturacağını düşündüğüm yerler
- Ana tablo baz alınarak işlemler yapılır.
- Tablolardaki ortak bilgiler baz alınarak işlemler yapılır.
maddeleridir.
Arkadaşlar yukarıdaki ekran çıktılarında farketmişsinizdir.
İç içe select de karşısında 0 (sıfır) olan bir kategori var iken inner joinde yoktur..
İç içe select’te önce en dıştaki tablodaki (ana tablo diyorum) tüm veriler listelenir. Daha sonra diğer tablolara gidilerek iç select’teki where şartına göre istenen veriler listeye eklenir. Ana tabloda var olan ama diğer tabloda olmayan bir kayıt olduğunda karşısına 0 (sıfır) yazar.
Yani şöyle düşünün; “önünüzde iki kutu var ve içlerinde renkli toplar var. İlk kutudaki tüm topları yerine yerleştirdiniz. Sonrasında diğer kutuya bakıp aynı renkte olanları da yerlerine yerleştirdiniz. İlk kutuda olan ama diğer kutuda olmayan birkaç rengin karşısı boş kaldı.”
Inner joinde listeyi oluşturacak tüm veriler aynı anda toparlanıp yerlerine koyulduğu için birine olup diğerinde olmayan kayıtlar listelenmez.
Yani şöyle düşünün; “önünüzde iki kutu var ve içlerinde renkli toplar. Her iki kutuyada aynı anda bakıp aynı anda aynı renkli topları aynı anda bir yerlerine koyuyorsunuz. Bu şekilde olduğundan ilk kutuda olup ikinci kutuda olmayan renklere elinizi hiç uzatmıyorsunuz.”
Uzun bir ders oldu umarım düzgünce anlatbilmiş ve sizlerinde anlamasını sağlayabilmişimdir.
SQL İç İçe Select, İnner Join, Order ve Group By Kullanımı – Örnekle Anlatım , yazımda bu kadar dostlar. Diğer derslerimizde görüşmek üzere.
Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız.
Sağlıcakla ve Takipte Kalın.