Anasayfa / Yazılım / SQL / SQL TOP Fonksiyonu

SQL TOP Fonksiyonu

Microsoft SQL’de TOP fonksiyonu ile herhangi bir sorgu sonucu dönecek verilerin istediğimiz kadarını ya da istediğimiz şekilde limitlenerek gösterilmesini sağlayabiliriz. MS SQL’de TOP fonksiyonu SQL Server 2005’ten bu yana kullanılmaktadır ancak sürekli olarak her versiyonda bir takım gelişmeler göstermiştir. Örneğin daha önceleri TOP fonksiyonu sadece SELECT sorgusu ile kullanılabilirken şimdi SQL Server 2012 Management Studio’da TOP fonksiyonu INSERT, UPDATE ve DELETE fonksiyonları ile birlikte de kullanılabilmektedir.

Örneklerle yazımızı pekiştirelim. AdventureWorks veritabanı üzerinde çalışıyorum. Şimdi yeni bir tablo oluşturalım öncelikle. Bunun için CREATE fonksiyonunu kullanıyoruz.

CREATE TABLE dbo.Satis (MusteriID INT, SiparisTarihi DATE,
SatisTarihiID INT NOT NULL PRIMARY KEY);

Satis adında MusteriID (integer), SiparisTarihi (date) ve SatisTarihi (integer) adlarında ve tiplerinde tablomda kolonlar oluşturdum. Ayrıca SatisTarihiID alanıda INT ve boş geçilemeyen Primary Key cinsinde. Bunu yapma sebebim şu aslında, birazdan INSERT ve TOP ile limitlenen miktarda veriyi mevcut bir tablodan bu tabloma aktaracağım.

Üstteki sorgumu çalıştırıyorum ve Satis tablom oluşturuluyor.

2013020501

Evet tablomu oluşturdum. Şimdi Sales.SalesOrderHeader tablosundan ilk 10 sırada yer alan verileri dbo.Satis tablosuna sırası ile MusteriID,SiparisTarihi,SatisTarihiID (sırası önemli) ile INSERT ediyoruz yani ekliyoruz.

INSERT TOP(10) INTO dbo.Satis(MusteriID,SiparisTarihi,SatisTarihiID)
SELECT CustomerID, OrderDate, SalesOrderID FROM Sales.SalesOrderHeader

Bu komut sonucu tam 10 satır etkilenecektir. Şimdi bunu görelim bakalım eklenmiş mi? Bunun için satis tablosunu SELECT ile sorguluyorum.

SELECT MusteriID,SiparisTarihi,SatisTarihiID 
FROM dbo.Satis ORDER BY SatisTarihiID

2013020502

Görüldüğü gibi eklenmiş. Şimdi INSERT ile birlikte TOP fonksiyonunu kullandım. Birde DELETE ile birlikte TOP fonksiyonunu kullanalım. İlk 3 veriyi silelim.

DELETE TOP(3) dbo.Satis

Bunun sonucunda 3 satır etkilenir. Şimdi bi bakalım gerçekten silinmiş mi?

SELECT MusteriID,SiparisTarihi,SatisTarihiID 
FROM dbo.Satis ORDER BY SatisTarihiID

2013020503

Şimdi tablonun son halini gördük. UPDATE ile birlikte TOP fonksiyonunu kullanalım. Bunun için güncelleme yapacağız, MusteriID alanındaki değerin rakam değeri olarak 30000 arttırılmasını sağlayacağım, bunun içinde ilk 3 veriyi arttırıyorum.

UPDATE TOP(3) dbo.Satis SET MusteriID = MusteriID + 30000

Bunun sonucunda 3 satır veri etkilenir. Bir bakalım cidden değişmiş mi?

SELECT MusteriID,SiparisTarihi,SatisTarihiID 
FROM dbo.Satis ORDER BY SatisTarihiID

2013020504

Görüldüğü üzere 29 binlerde olan ID değeri 30000 ekleme ile 59 binlerde olmuş ve sadece benim istediğim ilk üçü için geçerli bu durum.

Şimdide sadece ilk 3 elemanı listeleyelim.

SELECT TOP(3) MusteriID,SiparisTarihi,SatisTarihiID
FROM dbo.Satis

2013020505

Şimdi de diyelim ki bir değişken yapalım. Bu değişken kadar olanı TOP deyimi ile listeleyelim. Şöyle bir şey hayal edin yani, bir müşteri e-ticaret sitesine girdi ve en ucuz 5 ürünü listelemek istiyor. Şu anda yapacağımız mantık bu. Ben bir değişkene 5 değerini atayacağım ve SELECT sorgumda TOP deyiminin ardından bu değişkenin ismini vererek sorgumu gerçekleştireceğim.

DECLARE @KacSatir INT = 5;
SELECT TOP(@KacSatir) MusteriID, SiparisTarihi, SatisTarihiID
FROM dbo.Satis
ORDER BY SatisTarihiID;

2013020506

TOP deyimi ile örnekler sanırım bu kadar yeterli. Şunu demeden edemeyeceğim, Microsoft TOP deyimi yerine program geliştiricilerin MS SQL’de FETCH ve OFFSET deyimlerinin kullanılmasını öneriyor. Tabi TOP deyimini kullanmak bir sorun oluşturmuyor ancak FETCH ve OFFSET deyimleri TOP deyimine göre daha esnek bir yapıda ve daha çok özelliğe sahip hatırlatmakta fayda var.

Bir sonraki yazıda görüşmek üzere..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir