Microsoft SQL Server etiketine sahip kayıtlar gösteriliyor.
Microsoft SQL Server etiketine sahip kayıtlar gösteriliyor.

SQL'de PRINT Kullanımı

  • Değişkenlerin değerlerini, hataları ve diğer ihtiyaç duyulan durumlarda PRINT komutu kullanılır. DEBUG işlemi için ihtiyaç duyulan bir komuttur.
PRINT Kullanımı : PRINT @<Değişken_Adı>

Örnek Sorgu: soyad değişkeninin içeriği PRINT ile gösterilmiş olacaktır.

DECLARE @soyad VARCHAR(15) SELECT @soyad=’Bayraktar’ PRINT @soyad

SQL'de DECLARE & SET Kullanımı

  • SQL'de değişken tanımlamalarında DECLARE komutu kullanılır.    
  • Tanımladığımız değişken için değer atama işlemlerinde SET komutu kullanılır. 

DECLARE & SET Kullanımı : DECLARE @<Değişken_Adı> <Değişken_tipi>

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


Örnek Sorgu: Products tablomuzdaki en yüksek birim fiyata sahip ürünü DECLARE komutu ile değişken tanımlayıp SET ile atamasını yapalım ve MAX fonksiyonu ile en büyük değeri bulup listeleyelim.

DECLARE @enyüksek_birimfiyat MONEY
SET @enyüksek_birimfiyat=(select max(UnitPrice) from Products)
SELECT @enyüksek_birimfiyat AS 'Birim fiyatı en yüksek ürün'


SQL'de USE, ALTER ve DROP Kullanımları

USE Kullanımı
  • USE kullanımı hangi database üzerinde işlem yapacağımızı belirtir.
  • New Query (Ctrl+N) ile yeni sorgu penceremizi açtığımızda default olarak gelen database Available Databases kutucuğunda görünmektedir.
 USE Kullanımı: USE <veritabanı adı>


ALTER ve DROP Kullanımları

Bir tablo kullanılmaya başlandıktan sonra kullanıcılar tablolarda mevcut bulunan verilere ilişkin ek bilgiler depolama ihtiyacı hissederler.

ALTER Kullanımı: ALTER <Nesne_Adı>  <Değişim_Cümlesi>

Örnek Sorgu 1: SQL'de CREATE Kullanımı başlıklı yazımda oluşturduğumuz Kitaplar veritabanında mevcut Bilimkurgu tablomuza yeni bir sütun ekleyip değerinin ise NULL olabilir şekilde ayarlayalım.

ALTER TABLE Bilimkurgu ADD Sayfa INT NULL


Örnek Sorgu 2: Bilimkurgu tablomuzda önceden kaydettiğimiz bir sütunun özelliğini değiştirelim. Yazar alanı 25 karakter değer alabilirken biz bu değeri 30 karakter ile değiştirelim.

ALTER TABLE Bilimkurgu ALTER COLUMN Yazar VARCHAR(30)

Tablo Silmek (DROP TABLE)

Veritabanların yapısı zamanla değişir ve büyür. Yeni değerleri temsil eden yeni tablolar oluşturulur ve bazen eski tablolara gereksinim duyulmaz. Gereksinim duyulmayan bir tabloyu veritabanından silmek için DROP TABLE ifadesini kullanırız.

DROP TABLE Bilimkurgu

Veritabanımızdan Bilimkurgu tablomuzu siler.

NOT: DROP TABLE ifadesi veritabanından bir tablo sildiğinde tablonun tanımı ve tüm içeriği kaybolur.

SQL'de CREATE Kullanımı

  • CREATE TABLE ifadesi veritabanında yeni bir tablo oluşturmamızı sağlar.
  • CREATE DATABASE ifadesi yeni bir veritabanı oluşturmamızı sağlar.
Örnek Sorgu :  CREATE DATABASE ifadesi ile veritabanı yaratalım…ve bu veritabanında tablolar oluşturalım.

CREATE DATABASE KITAPLAR
CREATE TABLE Bilimkurgu(BlkrgId INT,Name VARCHAR(25) )



SQL'de DELETE Kullanımı

  • DELETE ifadesi tablodaki satırları silmek için kullanılır.
  • DELETE ifadesi içerisinde WHERE isteğe bağlıdır
  • Koşul belirtilmez ise bütün kayıtları tablomuzdan siler.
  • DELETE ifadesi ile kayıtlar silinse dahi tablo  ve sütünların tanımı  veritabanında saklanır.
  • Potansiyel riskler nedeniyle DELETE ifadesi kullanılırken her zaman bir arama koşulu tanımlanmalıdır.
DELETE Kullanımı: DELETE FROM <tablo adı> WHERE <sütun adı>=<aranan değer>

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

Örnek Sorgu : Employees (Çalışanlar) tablumuzda EmployeeID'si 5 olan kaydı silelim.

DELETE FROM Employees WHERE EmployeeID=5 SELECT * FROM Employees

SQL'de UPDATE Kullanımı

  • UPDATE ifadesi tek bir tablonun seçili satırlarını yada daha fazla sütundaki değerleri günceller.
  • Güncellenecek hedef tablo, ifadede adlandırılır ve tabloyu güncellenecek olan ayrı sütunların herbirini değiştirmek için gerekli izne sahip olunması gereklidir.
  • Kullanılacak WHERE ifadesi tablonun güncellenecek olan satırlarını belirler.
  • SET  cümleciği ise hangi sütunların güncelleneceğini belirler ve bunların güncel değerini hesaplar.
UPDATE Kullanımı: UPDATE <tablo adı> SET <sütun adı> = <yeni değer> WHERE <sütun adı> = <eski değer> 

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

Örnek Sorgu : Müşteri kodu (CustomerID) "BERGS" olan kayıtların Görüşülecek Kişi (ContactName) ve City alanlarını güncelleyelim. Koşul kısmında belirttiğimiz alan Birincil Alan olduğundan sadece tekbir satır güncellenecektir. Sorgunun sonucunu basit bir SELECT sorgusu ile kontrol edebilirsiniz.

UPDATE Customers SET ContactName='Bayraktar',City='Berlin' WHERE CustomerID='BERGS'

SQL'de INSERT INTO…VALUES Kullanımı

  • INSERT kullanımından farklı olarak istenilen sütunlara kayıt işlemi yapmamızı sağlar.
  • 2 farklı kullanım şekli vardır.
INSERT INTO…VALUES Kullanımı 1 : INSERT INTO tablo_adı VALUES (değer1, değer2,....)
INSERT INTO…VALUES Kullanımı 2 : INSERT INTO tablo_adı (sütun1, sütun2,…) VALUES (değer1, değer2,....)
 
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 
 
Örnek Sorgu : Customers tablosuna sadece müşteri kodu (CustomerID) ve Firma adı (CompanyName) verilerinin girildiği bir kayıt ekleyelim.
 

SQL'de INSERT…SELECT Kullanımı

  • Sorgu sonucunu bir tabloya eklemek istediğimizde  INSERT…SELECT ifadesini kullanırız.
  • Verilerin yazılacağı tablo alanlarının boş (NULL) değere izin verip vermediğine veya alanın varsayılan (default) bir değeri olup olmadığına dikkat edilmelidir. 
  • Tablo alanlarında boş (NULL) değere izin verilmiyorsa, bu alanlar için mutlaka bir değer belirtilmelidir.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

Örnek Sorgu : Sorgumuzda Çalışanlar (Employees) tablosundaki verileri Müşteriler (Customers) tablosuna ekleyelim. Sorgu içerisinde substring() fonksiyonu ile FirstName ve LastName alanlarından sırasıyla 3 ve 2'şer harf alarak yeni bir alan oluşturalım. Bu alan verinin ekleneceği Müşteriler (Customers) tablosunun birincil alanı CustomerID’ ye yazılacaktır.


Sorgu sonucunda 92 adet olan Customers sayısı 101 olacaktır.


SQL'de INSERT ve VALUES Birlikte Kullanımı

  • INSERT ifadesini VALUES ile birlikte kullanarak tablolara yeni satırlar eklenebilir.
  • Eklenecek olan verilerde veri türü ve sutun sırası tablonunkilerle uyuşmalıdır.
NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 
 
Örnek Sorgu :  INSERT ve VALUES ifadelerini birlikte kullanarakk "Bayraktar Tea Company" isimli firmayı Müşteriler (Customers) tablosuna ekleyelim.

INSERT customers(CustomerID,companyname,contactname,contacttitle,
Address,city,region,postalcode,country,phone,fax) VALUES ('BYRK','Bayraktar Tea Company','Ibrahim Bayraktar','Owner','Cumhuriyet Street','Yozgat','TR','66100','Turkei','(354) 000-0000','(354) 000-0000')


SQL'de SUBQUERIES (Alt Sorgular)

    • Bir Alt Sorgu başka bir SELECT, INSERT, UPDATE veya DELETE ifadesi içerisine yuvalanmış bir SELECT ifadesidir. 
    • Çoğu durumda alt sorguları JOIN ifadelerine dönüştürebilirsiniz. 
    • Alt sorgular, karmaşık sorguları biraz daha anlaşılabilir mantıksal bölümlere ayırmak için veya birbaşka sorgunun sonuç kümesine dayalı bir sorguyu çalıştırmak için kullanılır. 
    • JOIN bağlantıları Alt Sorgulardan daha hızlı işlenirler.
    • Kural olarak ise Alt Sorguları parantez içinde yazmalıyız.
    NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

    Sonuç Kümesinin Tablo Olarak Kullanımı : Sorguda FROM ifadesinde kullanılan tablonun yerine bir başka sorguyu kullanabilirsiniz. Sonuç Kümesine herhangi bir tabloya yapabildiğimiz gibi bir geçici takma ad verilebilir.


    SELECT T.ORDERID, T.CUSTOMERID
    FROM (SELECT ORDERID, CUSTOMERID FROM orders) AS T
     

    Sonuç Kümesinin Bir Deyim Olarak Kullanılması : SQL de bir sorguyu herhangi bir deyimin yerine kullanabilirsiniz. Bu amaç için kullanılacak bir sorgu tek bir sayısal değer veya tek bir sütun değer listesi döndürmelidir. Bir değerler listesi geri döndüren sorgular IN anahtar kelimesi içeren WHERE yantümcesi yerine kullanılabilir.
     
    Ortalamayı bulup satılan ürünlerimiz için ayrıntılı birim fiyatlarını ve bu birim fiyatlarının ortalama ürün fiyatına oranla durumunu gösterelim.
     
    SELECT ProductName AS 'ÜRÜN ADI',UnitPrice AS 'BİRİM FİYATI', UnitsInStock AS 'STOK',
    (SELECT AVG(UnitPrice) FROM Products) AS ORTALAMA,
    UnitPrice-(SELECT AVG(UnitPrice) FROM Products) AS FARK FROM Products  


    İlişkili Alt Sorgu :  İç sorgu ile dış sorgu bir alan üzerinden doğrudan bağlantılıdır.
     
    30 nolu üründen 30 dan fazla sipariş veren müşterileri listeleyelim.

    SELECT OrderID, CustomerID FROM orders AS or1
    WHERE 30<(SELECT quantity FROM [order details] AS od
    WHERE or1.OrderID=od.OrderID AND od.ProductID=30)


    Alt Sorgu-JOIN Dönüşümü :  İlişkili alt sorguları bir JOIN ifadesi yerine kullanabiliriz.
     
    İki farklı sorgu aynı sonucu vermektedir. Birinci örnekte Alt Sorgu kullanılmış, ikinci sorguda aynı sonuca JOIN ile ulaşılmıştır. 

    SELECT  DISTINCT E1.TitleOfCourtesy FROM Employees AS E1
    WHERE E1.City IN
    (SELECT E2.City FROM Employees AS E2 WHERE E1.TitleOfCourtesy<>E2.TitleOfCourtesy)


    SELECT DISTINCT E1.TitleOfCourtesy FROM Employees AS E1
    INNER JOIN Employees AS E2 WITH (NOLOCK) ON E1.City=E2.City
    WHERE E1.TitleOfCourtesy<>E2.TitleOfCourtesy
     
     
    Alt Sorgu-HAVING Dönüşümü : İlişkili bir alt sorgunun ürettiği sonuç kümesini HAVING ile de elde edebiliriz.
     
    SELECT ProductName,CategoryID,UnitPrice FROM Products AS p1
    WHERE p1.UnitPrice>(SELECT AVG(UnitPrice) FROM Products AS p2
    WHERE p1.CategoryId=p2.CAtegoryId) ORDER BY CategoryId  


    SELECT p1.ProductName,p1.CategoryID,p1.UnitPrice FROM Products AS p1
    INNER JOIN Products AS p2 WITH (NOLOCK) ON p1.CategoryID=p2.CategoryID
    GROUP BY p1.ProductName,p1.CategoryID,p1.UnitPrice
    HAVING p1.UnitPrice>AVG(p2.UnitPrice) ORDER BY p1.CategoryId
     
     
    EXISTS ve NOT EXISTS İşlevleri : Bazı durumlarda Alt Sorguların ürettikleri değerler ile değil, sorgunun sonucunun var olup olmadığıyla ilgileniriz. EXIST ve NOT EXIST işlevleri, bu sorgulamayı yapmak için kullanılır ve DOĞRU (TRUE) veya YANLIŞ (FALSE) değeri döndürür.

    Birinci sorguda ‘3/05/1998’ ve '4/05/1998' tarihleri arasında sipariş almış olan çalışanlar EXIST işlevi ile listeliyoruz. Aynı sonuca JOIN ile birleştirerekte ulaşabiliriz.
     
    SELECT EmployeeId,LastName,FirstName
    FROM Employees AS e WHERE EXISTS
    (SELECT * FROM Orders AS o
    WHERE e.EmployeeId=o.EmployeeId
    AND o.OrderDate BETWEEN '3/5/1998' AND '4/5/1998')   


    SELECT DISTINCT FirstName,LastName, e.EmployeeID
    FROM Orders AS o
    INNER JOIN Employees AS e
    ON o.EmployeeID =e.EmployeeID
    WHERE o.OrderDate BETWEEN '3/5/1998' AND '4/5/1998'

    SQL'de UNION Kullanımı

    • UNION iki veya daha fazla SELECT sorgusunun sonuçlarını tekbir sonuç kümesinde birleştirir.  
    • Görüntülenecek olan tablolar aynı veri türünde aynı sayıda ve aynı düzendeki sütunlardan oluşmalıdır.
    NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 
    Örnek Sorgu : Müşteriler (Customers) tablosu ve Çalışanlar (Employees) tablosu verilerini birleştirelim.

    SELECT (firstname+' '+lastname) AS ADI,city AS 'ŞEHİR', postalcode AS 'POSTA KODU'
    FROM employees UNION SELECT companyname, city, postalcode FROM customers

    SQL'de SELF-JOINS Kullanımı


    SELF-JOINS Bir tablonun kendisiyle birleştirilme  işlemidir.
    (Bir tablodaki aynı değerleri içeren farklı satırları listelemek amacıyla kullanılır.)

    Örnek Sorgu : Görevi (Job Title) aynı olan çalışanları listeleyelim. WHERE ifadesi ile belirtilen koşul kendisiyle eşleşen kayıtların görüntülenmesi engeller.

    SELECT a.EmployeeID AS 'ÇALIŞAN ID',LEFT(a.lastname,10) 
    AS 'İSİM',LEFT(a.title,10) AS 'GÖREVİ',b.EmployeeID AS 'ÇALIŞAN ID', LEFT(b.lastname,10) 
    AS 'İSİM',LEFT(b.title,10) AS 'GÖREVİ'
    FROM employees AS a INNER JOIN employees AS b ON a.title=b.title
    WHERE a.EmployeeID < b.EmployeeID ORDER BY a.EmployeeID


    SQL'de INNER JOIN ile 3 ve Daha Fazla Tabloyu Birleştirme


    Bazen çok tablo üzerinde sorgu yapma ihtiyacı duyabiliriz. JOIN işlemiyle birleştirilen tablolar bir başka tabloya aradaki ortak sütunlar üzerinden bağlanabilir.

    NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 
    Örnek Sorgu : Sipariş Detayları(Order Details) tablosunu ara tablo şeklinde kullanarak, Siparişler (Orders) ve Ürünler(Products) tablosundan gerekli bilgiler görüntülenmiştir.

    SELECT OrderDate,ProductName FROM Orders AS O
    INNER JOIN [Order Details] AS OD ON O.OrderID=OD.OrderID
    INNER JOIN Products AS P ON OD.ProductID=P.ProductID
    WHERE OrderDate='7/8/96' ORDER BY ProductName
     

    SQL'de OUTER LEFT/RIGHT/CROSS JOIN Kullanımları

    OUTER JOIN-LEFT JOIN Kullanımı
    • INNER JOIN'den farklıdır. 
    • Soldaki tablo baz alınarak sorgu çalıştırılmasıdır. 
    • Soldaki tablodan tüm kayıtlar çekilir ve sağdaki tabloda eşleşen kayıtlar aynen yazılır. 
    • Eşleşmeyen kayıtlar için NULL değer verilir.
    NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 
     
    LEFT JOIN Kullanımı : SELECT <sütun_ad(lar)ı> FROM <ilk_tablo> LEFT JOIN <ikinci_tablo> ON <ilk_tablo>.<anahtar_alan> = <ikinci_tablo>.<anahtar_alan>  

    Örnek Sorgu : Sorgumuz SELECT kısmında iki sütun tekbir sütun adı altında birleştirilmiştir. Çalıştırıldığında çalışanın tam adı ve müşterilerden aldığı siparişler ve tarihleri listelenecektir.

    SELECT Employees.FirstName+' '+Employees.LastName AS Name,OrderID,OrderDate
    FROM Employees LEFT JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID
     
     
    OUTER JOIN-RIGHT JOIN Kullanımı 
    • LEFT OUTER JOIN işleminin tersini yapar.
    • Sağdaki tablonun baz alınarak sorgu çalıştırılmasıdır. 
    • Sağdaki tablodan tüm kayıtlar çekilir ve soldaki tabloda eşleşen kayıtlar aynen yazılır.
    • Eşleşmeyen kayıtlar için NULL değer verilir.
    RIGHT JOIN Kullanımı : SELECT <sütun ad(lar)ı> FROM <ilk_tablo> RIGHT JOIN <ikinci_tablo> ON <birinci_tablo>.<anahtar alan> = <ikinci_tablo>.<anahtar_alan>

    Örnek Sorgu : Sorgumuzda tüm müşteriler ve verdikleri siparişlerin tarihleri listelenecektir.

    SELECT companyname, customers.CustomerID, orderdate
    FROM customers RIGHT OUTER JOIN orders ON customers.CustomerID = orders.CustomerID
     
     
     OUTER JOIN-CROSS JOIN Kullanımı
    • İlişkili tablolar arasındaki tüm eşleşmeleri listeler.
    • Ortak bir alan belirtilmesine gerek yoktur.
    • CROSS JOIN kullanılırken ON ifadesi kullanılmaz.

    Örnek Sorgu : Üreticilerin çalışabilecekleri tüm olası gemi şirketleri listelenir.

    SELECT suppliers.companyname, shippers.companyname
    FROM suppliers CROSS JOIN shippers
     

    SQL Server .bak dosyası ile Restore İşlemi Nasıl Yapılır

     .bak dosyasını kullanarak bir veritabanı Yedeklemesi Nasıl Geri Yüklenir
    • Object Explorer - Database’e sağ tıklıyoruz.     
    • Restore Database seçeneğini seçiyoruz.     
    • Karşımıza çıkan pencerede “from device” seçeneğini işaretliyoruz     
    • Browse yaparak dosyamızın path’ini gösteriyoruz.     
    • OK tuşuna basıyoruz 
    • Database "…" restored successfully mesajı restore işleminin başarılı gerçekleştiğini belirtiyor.

    Başarı ile tamamlamış isek refresh yaparak Object Explorerda restore ettiğimiz .bak uzantılı database görünecektir.

    Not : .bak uzantılı dosyayı SQL Server'e RESTORE edilirken dikkat edilmesi gereken husus dosyanın ancak aynı sürüm veya daha yüksek sürümdeki bir SQL Server'e RESTORE edilebildiğidir.

    SQL'de INNER JOIN Kullanımı

    • INNER JOIN SQL de  varsayılan olarak kullanılan tablolaları bağlama işlemidir.
    • INNER JOIN birleştirilen tablolarda ilişkinin sağlandığı tüm kayıtları getirir.
    NOT : Örnek sorgulamalarda Northwind Database'i kullanacağım. bk: Nortwind Database Kurulumu 

    Örnek Sorgu : 
    SELECT productname AS 'Ürün Adı', companyname AS 'Şirket Adı' FROM products
    INNER JOIN suppliers ON products.SupplierID = suppliers.SupplierID
    (Hangi firmadan hangi ürünü aldığımızı iki farklı tablodan birleştirerek listeleyelim.) 


    SQL'de Tablo Birleştirme ve JOIN


    SQL'de bazı durumlarda birden fazla tablodan veri çekme ihtiyacı duyabiliriz. Bunun için tablolar arasında bir ilişki kurulması gerekmektedir. Bu ilişki JOIN ile sağlanır. JOIN ifadesi birden fazla tabloyu birbirine bağlayıp  bu tablolar üzerinde işlem yapmamıza olanak sağlar.

    JOIN ifadesi ile hangi tabloları ve nasıl birleştireceğimizi ON ifadesi ile tabloların hangi alanlar üzerinden birleşeceğini belirtiriz.

    Tablolar genelde Birincil Anahtar ve Yabancı Anahtar alanları üzerinden birleştirilselerde, gerektiğinde diğer herhangi bir alan da bunun için kullanılabilir. Fakat bu alanların aynı tür veri içerdiğinden emin olmalısınız.

    Birincil Anahtar (Primary key), her kayıt için benzersiz bir değer taşıyan alandır. 

    Örneğin, öğrenci kayıtlarının tutulduğu bir tabloda, öğrenci numarasının saklandığı alan birincil anahtar olarak seçilebilir. Zira öğrenciyle ilgili tüm bilgiler gerçekte onun numarası ile kodlanmıştır ve her öğrencinin numarası bir birinden farklıdır.

    Tablolar birleştirilirken Primary Key - Foreign Key ikilisi kullanılır. Tablolar arası ilişkiler aynı zamanda Unique Index kullanılarakta yapılabilir. Fakat yaygın olarak PK - FK kullanılır.

    Primary Key (Birincil Anahtar) : Her satırı tekil bir şekilde tanımlayan benzersiz anahtardır. Primary Key sayesinde tablolarda bulunan satırlar birbirlerinden farklı olur ve her satırın Primary Key değeri farklı atanır. Primary Key tek bir sütun olduğu gibi birden fazla sütundan da oluşabilir.

    • Primary Key olacak sütun asla boş değer almamalıdır.
    • Primary Key olacak sütun tekrarı olmayan kayıtlardan oluşmalıdır…
    • Primary Key sütunu olabildiğince küçük ve basit veri tipinde tanımlanmalıdır.

    Foreign Key (Yabancı Anahtar) : Bir tablodaki sütunun başka tablodaki anahtara olan referansını belirler. Primary Key'den farklı olarak bir tabloda birden fazla Foreign Key olabilir.

    Örnek Sorgularda kullandığım Northwind Veritabanı diyagramını inceleyerek PK - FK bağlantılarını görebilirsiniz (diyagram'ın ayrıntılı sürümünü indirmek için tıklayınız.)


    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.