"Vatanını en çok seven, görevini en iyi yapandır."


Hoş Geldin, Ziyaretçi!

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

  • Yeni üyeler Neler Yapmalı, Nasıl Başlamalı? Detaylar için tıklayın
    Rütbeler ve genel görevlendirme konuları hakkında bilgi almak için tıklayın
    Uzmanlık alanları hakkında bildirge için tıklayın
    Güncel forum kuralları için tıklayın

SQL Server T-SQL'e Giriş Ve Sorgular #3

Codbar

Yarbay
Katılım
8 Şub 2017
Mesajlar
1,340
Uzmanlık Alanları:
Veritabanı Sistemleri
Yapay Zeka
Yazılım / Kodlama
Görev/Org:
lojistik
Merhabalar değerli forum üyeleri, bu sefer Veritabanı ile ilgili, üçüncü serisinin devamı ile karşınıza çıkıyorum. Daha önceden paylaşımlarım bu konuda olmuştu. Fakat tam olarak derli toplu değildi. Bunu çözmek için belli bir başlık altında alt konulardan oluşan bir makale düşündüm. Uzun bir makale olacak, keyifli okumalar dilerim.

Bu makale içeriğine geçmeden ön bilgi olarak konu başlıkları şu şekildedir;
  1. Gruplama İşlemleri (group by, having)
  2. Sıralama İşlemleri (order by)
1552429132185.png
GRUPLAMA İŞLEMLERİ (GROUP BY, HAVİNG)
Bir veri tabanı yönetim sistemini kullanmanın en önemli amacı veriyi saklamaktan ziyade, saklanan veriyi performanslı bir şekilde işlemek ve yönetmektir. Tabi ek gereksinimler bolca bulunmaktadır. Bunların başında ise; veriler üzerinde istatistik ve raporlama gibi ihtiyaçları karşılayacak programsal alt yapıyı sahip olmak vardır. Bu işlemleri genellemek için gruplama terimi kullanılır.

GROUP BY
Bir tablo içerisinde ortak özelliklere sahip kayıtların bir gruplama fonksiyonu kullanılarak sorgulanmasıdır. Grup fonksiyonu "group by " sözcüğüyle gerçekleştirilir. Bu gruplama işlemlerimizi gerçekleştirmek için belli başlı fonksiyonlarımız bulunmaktadır.
Gruplama fonksiyonlarımıza da bir göz gezdirelim...

  • avg(); Sorgu sonucuna göre oluşan, gruba bağlı sütunun ortalama değerini alır. Sadece sayısal alanlarda kullanılabilir.
  • sum(); Sorgu sonucuna göre oluşan, gruba bağlı sütunun toplam değerini alır.Sadece sayısal alanlarda kullanılabilir.
  • max(); Sorgu sonucuna göre oluşan, gruba bağlı sütunun en Büyük değeri gösterir.Sadece sayısal alanda değil aynı zamanda da metinsel alanlarda da kullanılabilir.
  • min(); Sorgu sonucuna göre oluşan, gruba bağlı sütunun en küçük değeri gösterir.Sadece sayısal alanda değil aynı zamanda da metinsel alanlarda da kullanılabilir.
  • count(); Kayıt sayısını yani saydırma işini yapar. Null olmayan kayıtları saydırma işlemi gerçekleştirmez.
Fonksiyonları daha iyi kavrayabilmek için örnekler üzerinden devam edelim. Kullanacağımız Personel tablomuz şu şekildedir;

&&


Örnek_1: Personellerimiz arasında maaşı en yüksek olanı bulalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_2: En eski ve en yeni elemanımızın tarihini yan yana görüntüleyen sql cümleciğini yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_3:Tablomuzda bulunan düşük maaşlı personelimizi, maaş ortalamasının ne kadar altındaymış onu bulalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_4:Şimdi gelelim biraz daha çetrefilli sorulara; Görev bazında(yani mesleklerin kendi aralarında gruplanması) en düşük maaşları görüntüleyen sql cümleciğini yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_5:Elemanlarımızın işe başlama tarihlerini baz alarak, en yüksek maaş bilgisini ekrana getiren sql cümleciğini yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_6:Maaşı 1800 ile 3800 arasında olan personellerin görev bazında, en erken işe başlama tarihini görüntüleyen sql'i yazalım
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_7:Soyadı içerisinde "a" geçip maaşı 2000'den yüksek olan personellerin görev bazında ortalama maaş bilgilerini görüntüleyen sql yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_8:Firmada çalışan personel sayısını bulan sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_9:Görev bazında kaçar personel çalıştığını yan yana gelecek şekilde görüntüleyecek sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_10: Maaşı 2500'den yüksek olan personellerin soyadı bazında maaş toplamlarını görüntüleyen sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


HAVİNG
  • Normalde biz kriter yazarken (şart oluşturuken) "where" kelimesi kullanırız.Buna benzer olarak bir diğer yapı havingdir.
  • Where ifadesi ile belirtilen kriter Group By uygulanmadan önce geçerli olurken, Having ifadesi ile belirtilen kriter ise group by uygulandıktan sonra ortaya çıkan verileri filtrelemek için kullanılır.
  • Ayrıca Where ifadesinden sonra sum, avg gibi fonksiyonlar kullanılamazken, Having ile kullanılabilir.
Daha iyi kavrayabilmek için örnekler üzerinden devam edelim. Kullanacağımız Tblurun tablomuz şu şekildedir;

(Liste fiyatının veri tipi= smallmoney olarak değiştirilmiştir.)




Örnek_1: Toplam ne kadarlık bir satış yapılmıştır onu bulalım. (Bunu bilmemiz için adet sayısıyla ile liste fiyatını çarpar ve toplar isek sonucu buluruz.)
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_2: Ürünlerimizin bulunduğu açıklama sütunun uzunluğunu bulmak istiyoruz. Bunu bulan sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_3: 30 karakterden uzun ürün isimlerine bağlı yapılan satışların, liste fiyat ortalamalarının ürün firma koduna göre gruplayan sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_4:Kutulu ürünlerin açıklamalarını görüntüleyebilmek için "kutulu" ibaresine kadar olan kısmını parçalayıp görüntüleyen sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_5:Döviz kurları bazında en yüksek liste fiyatlarını bulan sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_6:TL bazında kaç ürün satıldığını bulan sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_7:Döviz kuru ve ürün firma kodu bazında parça toplamlarını görüntüleyen sqli yazalım.
SELECT SUM(ParcaAdet) AS tbl_parça_adet, DövizKod, UrunFirmaKod FROM Tblurun GROUP BY DövizKod, UrunFirmaKod


**Dikkat ederseniz bir arada iki gruplama işlemi gerçekleştirdik. Arasında ki farkı iyi anlayabilmek için yani sql server gruplamayı gerçekleştirirken ilk öncelikliği hangisine tanıyor ona bakalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Görüldüğü gibi iki fotoğrafa bakıldığında ne kadar farklı olduğunu sizde göreceksiniz. İlk çözüm için biz sql'e; grouplamayı Dövizkod üzerinden gerçekleştir fakat kendini UrunFirmaKod'una göre ayarla dedik. Kod'u çalıştırdığımız da ilk "UrunFirmaKod" sütunu çalışır ardından ise diğer sütundaki gruplama işlemini gerçekleştir. İkinci çözüm ise bu olayın tam tersini gerçekleştirir.

Having Mantıksal İşleyiş Tablosu

Yukarıdaki tabloda mantıksal işleyiş sıralaması gösterilmiştir. Where Group by dan önce having ise sonra çalışır. Gelelim having içeriğini barındıran örneklere...


Örnek_8: Satış fiyatını 500'den yüksek olan ürünleri döviz koduna göre toplam satışlarını bularak 1000'in üstünde olanları görüntüleyen sqli yazalım.( Tabi ki biz hem where ile hem de having ile gerçekleştireceğiz.)
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Ama biz gruplamamızı gerçekleştirdik fakat eksik olan bir şey var cevapta. Soru da istenen 1000'den büyük olmasıydı. Ama 887,4'lük bir satır var. Where ile tam olarak karşılayamadık. Şöyle having'in küçük bir kodu ile halledebiliriz;
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Örnek_9: Döviz kod bazında 4'ten az işlem yapılmış dövizlerin ve işlem adetlerini yan yana görüntüleyen sqli yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


SIRALAMA İŞLEMLERİ (ORDER BY)
Bir veri gösterim(select) sorgusu gerçekleştirildiğinde herhangi bir özel istek belirtilmediği taktirde veriler, tablodaki sütunların sırasına göre listelenir. Bu, Sql Server'ın hızlı veri listelemek için kullandığı varsayılan bir yöntemdir. Ancak istediğimiz taktirde bu sıralamayı müdahale ederek değiştirebiliriz.
Sql Server'da satırların herhangi bir sütuna göre sıralı olarak görüntülemesi söz konusu ise "order by" deyimi kullanılır. Söyle küçük bir örnek ile Sql Server'ın varsayılan sıralama algoritmasını görelim.


Örnekleri vereceğimiz tablo bilgileri aşağıdaki gibidir;

&&


Örnek_1: Personel tablomuzun soyad alanını order by aracılığıyla sıralayalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


Görüldüğü gibi SQL Server'ın varsayılan sıralama algoritması A'dan Z'ye doğru bir sıralama gerçekleştirdi. SQL Server'da iki tip sıralama yöntemi vardır. Bunlar;
  • ASC (Ascending): Sql Server için varsayılan sıralama yöntemidir. Artan sırada listeleme yapar. Metinsel veri için A'dan Z'ye, numerik veri için ise 0'dan 9'a doğru işlem gerçekleştirir. Bu kodu order by'dan sonra yazmaya gerek yoktur fakat kod okunabilirliği açısından kullanılmasında fayda vardır.
  • DSC (Descending): ASC için belirttiklerimizin tam tersidir. Yani azalan sırada listeleme yapar.
Örnek_2: Tablomuzu maaş sütununa göre En yüksekten aşağıya sıralayan ve bilgileriyle mesleğini yansıtan SQL i yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!
Please, Giriş yap or Kayıt ol to view URLs content!


Örnek_3: Tablomuzdan görev kısmı ile maaş kısmını küçükten büyüğe doğru sıralayan SQL'i yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!


*Birden fazla sıralama sütunu belirttiğimizde durum biraz karışık gibi gözükebilir. Fakat göründüğü gibi değildir. İlk yazacağımız sütunu sıralar daha sonra ikinci sıradaki sıralamayı da ilkine göre sıralar. *

** Sıralama işlemleri gerçekleştirirken Null ifadeler de ASC gerçekleşirken en başta, DSC gerçekleşirken en son da görünür.**

Örnek_4: İd numarası 3 ile 5 arasında olanların ad,soyadı ve maaşlarının yarısını görüntüleyen , göreve ve maaşa göre azalan sırada görüntüleyen SQL i yazalım.
SQL:
Please, Giriş yap or Kayıt ol to view codes content!
Please, Giriş yap or Kayıt ol to view URLs content!



Elimden geldiğince gruplama ve sıralama işlemlerini örnekler ile anlatmaya çalıştım...
animated-goodbye-image-0044.gif
Umarım Makale Yararlı Olmuştur... @Dapirr
 
Son düzenleme:
Üst