Data Manipulation Language etiketine sahip kayıtlar gösteriliyor.
Data Manipulation Language etiketine sahip kayıtlar gösteriliyor.

SQL'de COMPUTE ve COMPUTE BY Kullanımı

  • COMPUTE sorgumuzdaki kolonları Aggregate Fonksiyonlar ile kullanmamızı sağlar.
  • COMPUTE tüm sonuç kümesini listeler ve bu listenin altında tek bir detay satırı görüntüler. 
  • Farklı olarak tek sorguda 2 tane sonuç listesi bize döndürür. 2.liste detay listesidir. 
  • COMPUTE ile kullanılan sütun SELECT ifadesinde yer almalıdır.
  • COMPUTE BY kullanarak daha detaylı gruplandırma da yapılabilir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1:
SELECT productid, orderid, quantity FROM [Order Details]
ORDER BY productid, orderid COMPUTE SUM(quantity)

(Sipariş detayları (Order Details) tablosundaki tüm satırları listeler ve kayıt kümesinin sonuna tüm ürünlerin genel toplamını verir.)

Örnek Sorgu 2:
SELECT productid, orderid, quantity FROM [order details]WHERE orderid<10250 ORDER BY orderid,productid COMPUTE SUM(quantity) BY orderid COMPUTE SUM(quantity)

(Sipariş Detayları (Order Details) tablosundaki tüm satırları listeler ve her sipariş altına sipariş genel toplamını verir. Son olarak ise tüm siparişlerdeki genel toplam görüntülenir.)  

NOT : SQL Server 2008 RS sonrası sürümlerde COMPUTE ve COMPUTE BY çalışmamaktadır. MSDN makalelerinde COMPUTE ve COMPUTE BY için SQL Server 2008 RS sonrası sürümlerde kaldırılacağı ve yerine ROLLUP kullanılması tavsiye edilmektedir. Detaylı bilgi için tıklayınız.

GROUPING Fonksiyonu

  • SQL Server'da Fonksiyonlar, hesaplamalarda ve özellikle sistem hakkında bilgi almada yaygın olarak kullanılan araçlardır. Transact-SQL (T-SQL) programlama dilinde değişik kategorilerle adlandırılan fonksiyonlar vardır. Bunlardan en yaygını veriler üzerinde işlem yapan toplama ya da gruplama olarak adlandırabileceğimiz aggregate fonksiyonlarıdır. 
  • GROUPING Aggregate (Gruplama) Fonksiyonudur.
  • GROUP BY ile kullanılan ROLLUP ve CUBE ile elde edilen sonuç listesini GROUPING fonksiyonu daha kolay değerlendirip yorumlamamızı sağlar. 
  • Sütunlarda özet bilgiler için 1, detay bilgiler için 0 değeri görüntülenir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu :
SELECT OrderID, GROUPING(OrderID), ProductID,GROUPING(ProductID), SUM(quantity) AS 'Toplam Sipariş'
FROM [order details] WHERE OrderID < 10250
GROUP BY OrderID, ProductID WITH CUBE ORDER BY OrderID, ProductID


Sorgumuzda sütunlara dikkat edelim. OrderID alanı NULL olarak görünen kayıtlar tüm siparişlerdeki ürünlerin toplamlarını göstermektedir.

SQL'de WITH ROLLUP ve WITH CUBE Kullanımları

  • GROUP BY ile bir toplama işlevi kullandığımızda her farklı değer için sadece sonuç satırı görüntülenir. Gruplandırdığımız değerlerin detaylarını farklı komutlar kullanarak görüntüleyebiliriz.
  • ROLLUP Grup değerlerini özetlemek için kullanılır.
  • CUBE GROUP BY ile belirtilen sütunların tüm olası eşleşmelerini özetler.
  • CUBE komutunun ROLLUP'dan farkı bütün sütünlarında null ile ara toplamlarını vermesidir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1: SELECT ProductID AS 'Ürün ID', OrderID AS 'Sipariş ID', SUM(quantity) AS 'Toplam Sipariş'  FROM [order details]  WHERE OrderID < 10250
GROUP BY OrderID, ProductID WITH CUBE ORDER BY OrderID, ProductID
(Sipariş ID 10250’den küçük olan kayıtların ve ürünlerin detaylı toplamlarını listeleyelim.)

Örnek Sorgu 2: SELECT ProductID AS 'Ürün ID',OrderID AS 'Sipariş ID', SUM(quantity) AS 'Toplam Sipariş'  FROM [order details] WHERE OrderID < 10250
GROUP BY ProductID, OrderID WITH ROLLUP ORDER BY ProductID, OrderID
(Sipariş ID 10250’den küçük olan kayıtların ve ürünlerin detaylı toplamlarını listeleyelim.)

SQL'de HAVING Kullanımı

  • Toplam fonksiyonlarını kullanırken kısıt girilmesi gerektiğinde WHERE komutunu kullanamayız. HAVING, GROUP BY ile elde edilecek satırları kısıtlamak için kullanılır.
  • Görev ve işlev bakımından WHERE gibi çalışır fakat WHERE gruplama işlemlerinden önce, HAVING ise GROUP BY'dan sonra kullanılır.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu : SELECT ProductID, SUM(quantity) AS total_quantity FROM [order details] GROUP BY ProductID HAVING SUM(quantity) > 1300
(Toplam sipariş miktarı 1300 adetten fazla olan ürünkodlarını listeleyelim.)


SQL'de GROUP BY Kullanımı

  • GROUP BY ile belirtilen sütun yada sütunlardaki aynı değere sahip satırları tek bir satırda birleştirmeyi sağlarız.
  • DISTINCT anahtar kelimesi yanlızca benzersiz satırları listelemek için kullanılmaktadır.
  • GROUP BY genellikle toplam fonksiyonlarıyla (Aggregate Function) kullanılır. 
  • GROUP BY ile belirtilen sütunlar SELECT ifadesinde de yeralmalıdır.
  • GROUP BY sorgularında kullanılan en yaygın toplama işlevleri MIN, MAX, SUM ve COUNT'dır.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu : SELECT ProductID AS 'Ürün ID', SUM(quantity) AS 'Toplam Sipariş' FROM [order details] GROUP BY ProductID
(Sipariş detayları tablosundan productid alanına göre gruplandırarak ve her grubun toplam sipariş miktarını belirterek listeleyelim.)


SQL'de WITH TIES Kullanımı

  • WITH TIES, ORDER BY ile sıralanan sonuçlarda son kayıt ile aynı değerde olan kayıtların da listelenmesini sağlar. Bu durumda sonuç belirtilen n sayısından daha fazla olabilir.
  • WITH TIES sadece ORDER BY ile birlikte kullanılmaktadır.

NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1: SELECT TOP 3 OrderID, ProductID, quantity FROM [order details] ORDER BY quantity DESC
(Sipariş detayları tablosundan (order details) en yüksek siparişi verilen 3 ürünü listeleyelim.)


TOP n ile çalıştırdığımız sorgularımızı eğer WITH TIES ile çalıştırırsak n den farklı sonuç listesi görebiliriz. Örnek Sorgu 1′de de görüldüğü gibi en çok satış yapılan ilk 3 ürünü sıraladık. Fakat sıradaki 6., 7. ürünler de 120′şer adet satıldıysa? Onlar listeye giremeyecek çünkü biz 3 satır görmek istediğimizi belirttik. Bu gibi durumlarda WITH TIES'e başvuruyoruz. Şimdi aynı sorguya WITH TIES uygulayalım ve sonuçları görelim.

Örnek Sorgu 2: SELECT TOP 3 WITH TIES OrderID, ProductID, quantity FROM [order details] ORDER BY quantity DESC
(Sipariş detayları tablosundan (order details) en yüksek siparişi verilen 3 ürünü listeleyelim.)

 

WITH TIES kullanımında önemli nokta örnek sorgumuzdaki ilk 3 değeri listeledikten sonra en son satıra ait quantity değeri daha varsa onlarıda getirmesidir. İlk sorguda 3 sonuçtan sonuncusunda quantity değerinin 120 olduğunu görmekteyiz. WITH TIES kullanılan sorguda quantity değeri 120 olan bütün değerlerin getirilmesini sağladık. 

SQL'de TOP n, TOP n Percent ve DISTINCT Kullanımları

İlk n Kaydın Görüntülenmesi - TOP n
  • Belirli sayıda satır çekmek için SQL'de TOP ifadesi kullanılır.
  • TOP n ifadesiyle tablonun baştan ilk n satırını çekebiliriz.
  • TOP n veya TOP n PERCENT anahtar kelimeleri ORDER BY  yan tümcesini ile birlikte kullanılmalıdır. Aksi halde listelenen verilerde WHERE ifadesi ile belirtilen koşula uyan kayıtlar rastgele dizileceğinden, istediğimiz sonucu elde edemeyebiliriz.
TOP n Kullanımı : SELECT TOP n * FROM <Tablo Adı>

NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1: SELECT TOP 10 OrderID,ProductID, quantity FROM [order details] ORDER BY quantity DESC
(Sipariş detayları tablosundan (order details) en yüksek siparişi verilen 10 ürünü listeleyelim.) 



Belli Yüzdeli Kayıtların Görüntülenmesi - TOP n Percent
  • Tablodaki kayıtların % n kadarı görüntülenebilir.
  • Örneğin tablomuzda 100 kayıt var ise TOP 10 Percent ifadesi ile bu kayıtların %10'u görüntülenir.
TOP n Percent Kullanımı : SELECT TOP n Percent * FROM <Tablo Adı>

Örnek Sorgu 2: SELECT TOP 5 Percent OrderID,ProductID, quantity FROM [order details] ORDER BY quantity DESC
(Sipariş detayları tablosundan (order details) en yüksek siparişi verilen ürünlerin %5'ini listeleyelim.) 



Tekrarsız Kayıtların Görüntülenmesi - DISTINCT

DISTINCT Kullanımı : SELECT DISTINCT <sütun adı> FROM <tablo adı> [WHERE <koşul>]
  • Bazen veriler arasındaki benzerlikleri kaldırarak sadece benzer olmayanları listeletmek isteyebiliriz. Böyle durumlarda SELECT DISTINCT sadece tek olan (unique) kayıtların sonuç listesinde yer almasını sağlar. 
  • Bir sütunda belirli bir kelime iki veya daha fazla sayıda tekrarlanıyor olabilir. Fakat DISTINCT ile her tekrarlanan kayıt sadece bir kez listelenir.  
  • DISTINCT SQL komutu SELECT komutu ile birlikte kullanılmaktadır.
Örnek Sorgu 3: SELECT DISTINCT City FROM Customers
(Müşteriler (Customers) tablosundaki  Şehir (City) sutunlarını listeleyelim. Ve aynı değerlerin tekrarlanmamasını sağlayalım.) 

SQL'de AVG, MAX, MIN, SUM, COUNT Fonksiyonlarının Kullanımları

Aggregate Function (Hesaplama Fonksiyonları)

Bazen tablolar üzerinde kayıtların listelenmesi yerine kayıtlar üzerinde hesaplamalar yaptırarak sonuçların listelenmesine ihtiyaç duyarız. Bu nedenle tüm kayıtları döndürmeden sadece matematiksel sonuçlar döndürmemiz gerekebilir. SQL bu gibi durumlar için özel fonksiyonlar sunmaktadır. Bu Fonksiyonlara Aggregate Function (Hesaplama Fonksiyonları) denir.

Peki bu fonksiyonlar bizlere neler sunmaktadır ;
  • Sutundaki tüm değerlerin toplamını bulmak.
  • Sutundaki tüm degerlerin ortalamasını bulmak.
  • Sutundaki en büyük veya en küçük değeri bulmak.
  • Toplam kayıt sayılarını hesaplamak.
Aggregate Function (Hesaplama Fonksiyonları)


Not : Hesaplama fonksiyonları kullanılırken NULL değerler dikkate alınmamaktadır.


 

MAX ve MIN Fonksiyonları Kullanımı
  • MAX fonksiyonu, bir sütundaki en yüksek değeri verir. 
  • Boş (NULL) değerler işleme katılmaz. 
  • MAX fonksiyonu alfabetik sıralamadaki ilk metinsel ifadeyi de bulmamızı sağlar.
  • MIN fonksiyonu bir sütundaki kayıtlardaki en küçük değeri verir. 
  • Boş (NULL) değerler işleme katılmaz.   
  • MIN fonksiyonuda MAX fonksiyonu gibi alfabetik sıralamadaki son metinsel ifadeyi  bulmamızı sağlar
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1: SELECT MAX(UnitPrice) AS Maksimum_Fiyat FROM Products
(Ürünler (Products) tablosundaki en yüksek fiyatlı ürünü listeleyelim.)  
 
 
Örnek Sorgu 2: SELECT MIN(UnitPrice) AS Minimum_Fiyat FROM Products
(Ürünler (Products) tablosundaki en küçük fiyatlı ürünü listeleyelim.) 


Örnek Sorgu 3: SELECT MAX(CompanyName) AS En_Sondaki_Müşteri FROM Customers
(Alfabetik listeye göre en sonda yer alan müşteriyi görüntüleyelim.)  
 
 
SUM, AVG ve COUNT Fonksiyonları Kullanımı
  • SUM fonksiyonu belirtilen sütundaki sayısal değerlerin bir toplamını geri döndürür. 
  • AVG fonksiyonu belirtilen sütundaki ortalama değeri verir. 
  • AVG hesaplama sırasında boş (NULL) değerleri işleme almaz.
  • SQL'de COUNT Kullanımı için tıklayınız.
Örnek Sorgu 4: SELECT SUM(Quantity) AS Toplam_Ürün FROM [Order Details]
(Toplam kaç adet malın sipariş verildiğini bulalım.) 


Örnek Sorgu 5: SELECT AVG(DISTINCT UnitPrice) AS tekil_ortalama_deger  FROM Products WHERE SupplierID = 22
(22 kayıt numaralı tedarikçiye ait ürünlerin tekil değerilerinin ortalama fiyatını almak isteyelim.) 
 

SQL'de AS Kullanımı

 Sütunların Ve Tabloların Yeniden Adlandırılması AS
  • Bazı durumlarda sorgulama yaparken sutunun ismi kullanıcı tarafından anlaşılmayabilir bu yüzden daha anlamlı sutun başlıkları kullanmak isteyebiliriz bu durumda Alias (AS) takma isimler kullanırız.
  • AS yardımcı kelimesini kullanarak sütunları farklı adlarla görüntüleyebiliriz.
  • Uzun tablo isimlerini de kullanımı daha kolay olacak şekilde değiştirebiliriz.
  • Alias kullanımı AS kelimesiyle veya [ ] parantez kullanılarak yazılabilir.
AS Kullanımı : SELECT <sütun adı> AS <yeni ad> FROM <tablo adı> AS <yeni tablo adı>

NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu 1: SELECT AVG(UnitPrice) AS 'Avarage Price' FROM products
(Ürünler (Products) tablosundaki Birim Fiyatı (Unit Price) Ortalama Fiyat (Avarage Price) olarak listelenmiştir.) 


Örnek Sorgu 2: SELECT  COUNT(*) AS Müşteri_Sayısı FROM Customers 
(Müşteriler (Customers) tablosunda kaç tane müşterimiz var. Müşteri_Sayısı başlığıyla listeleyelim.)


SQL'de COUNT Fonksiyonu Kullanımı

  • COUNT fonksiyonu, belirtilen ölçütlerle eşleşen satır sayısını döndürür.
  • Kısaca ; veritabanındaki kayıtları sayabilmek için yerleşik COUNT fonksiyonunu kullanırız.

NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

COUNT(*) Kullanımı :  SELECT COUNT(<sütun adı>) FROM <tablo adı> 
   
Örnek Sorgu 1: SELECT COUNT(*)AS [Sipariş Kayıt Sayısı]  FROM orders
(Siparişler (Orders) tablosundaki kayıt sayısını Sipariş Kayıt Sayısı başlığıyla listeleyelim.) 

Örnek Sorgu 2: SELECT COUNT(*) AS Ürün_Sayısı FROM Products WHERE SupplierID = 5
(Tedarikci Numarası  (SupplierID) 5 olan tedarikçiye ait ürünlerin sayısını öğrenelim.) 

COUNT DISTINCT Kullanımı :  SELECT COUNT(DISTINCT <sütun adı> FROM <tablo adı>

DISTINCT anahtar kelimesi COUNT ile birlikte kullanıldığında, belirtilen sütundaki benzersiz kayıtların sayısını verir

Örnek Sorgu 3: SELECT COUNT (DISTINCT CustomerID) FROM Orders
(Siparişlerin kaç farklı müşteriden alındığını öğrenelim.) 



SQL de Matematiksel ve Metinsel işlemler

  • Tablolardaki alanları kullanarak, matematiksel veya metinsel ifadeler ile yardımıyla sorgularımızın gücünü arttırabiliriz.
  • SQL matematiksel işlemlerin sonucunu otomatik olarak üretmeyi sağlayan özelliklere sahiptir. 

NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu : SELECT OrderID, ProductID, (UnitPrice * Quantity) as TotalCost FROM [Order Details] WHERE (UnitPrice * Quantity) > 10000
(Birim fiyat (UnitPrice) alanı Miktar (Quantity) alanı ile çarpılarak toplam fiyat hesaplanır ve “TotalCost” (Toplam Maliyet) adı ile yeni bir alan olarak görüntülenir.)