Son Haberler
Anasayfa / Yazılım / SQL / Verileri Sıralama ORDER BY, OFFSET, ASC, DESC, FETCH NEXT ONLY Deyimlerinin Kullanımı

Verileri Sıralama ORDER BY, OFFSET, ASC, DESC, FETCH NEXT ONLY Deyimlerinin Kullanımı

Verilerimizi sorgularımız ile listeledikten sonra bu verileri istediğimiz kolonlara göre sıralama yapabiliriz. Bunun için ORDER BY deyimini kullanırız. Eğer ORDER BY deyimini yalnız olarak kullanırsak verilerimiz varsayılan olarak artan şeklinde sıralanır. Yani alfabetik verilerde A’dan Z’ye, numerik verilerde ise küçükten büyüğe olacak şekilde sıralama gerçekleşir. Ama biz tam tersi yönde yani azalan şekilde sıralamak istiyorsak, alfabetik olarak Z’den A’ya, numerik olarak büyükten küçüğe yani bunun için DESCENDING deyimini veya DESC deyimini kullanırız. İkisi de aynı işlemi yapar. Artanın ayrıca deyimsel ifadesi ASCENDING veya ASC’dir. Kullanım kalıbı aşağıdaki gibidir :

SELECT kolon1, kolon2 FROM tablo ORDER BY kolon1 sıralamaYönü (asc veya desc), kolon2 sıralamaYönü (asc veya dsc)

Örnekler ile konumuzu pekiştirelim :

SELECT ProductID, LocationID, Shelf, Bin, Quantity, 
rowguid, ModifiedDate
FROM Production.ProductInventory ORDER BY Quantity

Production.ProductInventory tablosundan ProductID, LocationID, Shelf, Bin, Quantity, rowguid, ModifiedDate kolonlarını, Quantity kolonunun artan haline göre sıraladım.

261201

SELECT ProductID, LocationID, Shelf, Bin, Quantity, 
rowguid, ModifiedDate
FROM Production.ProductInventory 
ORDER BY ProductID, LocationID DESC

Bu sorgumda da Production.ProductInventory tablosundan ProductID, LocationID, Shelf, Bin, Quantity, roqguid, MidifiedDate alanlarını listele ancak listelerken sıralama ProductID artan iken, LocationID azalan olsun demektir. Peki biri artarken biri ne demek azalan olsun. Diyelim ki ProductID alanında 1 ID’sine sahip 5 veri var. 2 ID’sine sahip 3 veri var ve böyle gidiyor. ProductID alanında 1 ID’sine sahip 5 verinin kendi içinde sıralaması ise LocationID azalan olacak şekilde yap demek oluyor. SQL’de query okuma işlemi soldan sağa doğru sıra ile giderdi, hatırlayınız. Tabi parantezler olursa durum değişir.

Görelim sonucu :

261202

Görüldüğü üzere ProductID alanı artan şeklinde, LocationID azalan şekilde sıralanmış.

ORDER BY ile sıraladığımız veriler içinde istediğimiz kadar satırı gösterebilme imkanımızda mevcut. Örneğin aşağıdaki sorguyu yazıp çalışıtıralım alacağımız sonuç :

SELECT ProductID, LocationID, Shelf, Bin, Quantity, 
rowguid, ModifiedDate
FROM Production.ProductInventory 
ORDER BY LocationID

261203

Toplam 1069 sonuç aldım. Aşağıdaki sorguyu yazıp çalıştıralım :

SELECT ProductID, LocationID, Shelf, Bin, Quantity, 
rowguid, ModifiedDate
FROM Production.ProductInventory 
ORDER BY LocationID OFFSET 5 ROWS;

261204

Bu sefer aldığım sonuç ise 1064 tane. OFFSET kesinti anlamına gelir ve bizde sorgumuzda OFFSET ve ardından gelen değer ile normal elde edilecek sonucun ilk satırlarından kaç tanesinin kesintiye uğrayacağını belirtiriz.

Listelenen verilerin satırlarının sınırlamasını yapmak içinde FETC NEXT ONLY deyimlerini kullanırız. Örneklersek;

SELECT ProductID, LocationID, Shelf, Bin, Quantity,
rowguid, ModifiedDate FROM Production.ProductInventory
ORDER BY LocationID OFFSET 5 ROWS 
FETCH NEXT 5 ROWS ONLY;

Bu sorgu ile Production.ProductInventory tablosunda ProductID, LocationID, Shelf, Bin, Quantity, rowguid, ModifiedDate alanlarını listeledim. Bu listelenen satırlardan LocationID alanına göre sıralama yaptım bu sıralamanın ilk 5 satırını kestim ve sonraki 5 satırı listeleme yaptım. Yani limitleme işlemimi gerçekleştirdim. Sonucu görelim :

261205

Person.Person tablosundan BusinessEntityID, Title, FirstName, MiddleName, LastName alanlarını FirstName, MiddleName ve LastName alanlarına göre artan şekilde listeleyelim.

SELECT BusinessEntityID, Title, FirstName, 
MiddleName, LastName FROM Person.Person
ORDER BY FirstName, MiddleName,LastName

261206

Person.Person tablosundan BusinessEntityID, Title, FirstName, MiddleName, LastName alanlarını FirstName, MiddleName ve LastName alanlarına göre FirstName azalan, MiddleName azalan ve LastName artan şekilde listeleyelim.

SELECT BusinessEntityID, Title, FirstName, 
MiddleName, LastName FROM Person.Person
ORDER BY FirstName DESC, MiddleName DESC, LastName

261207

Person.Person tablosundan BusinessEntityID, Title, FirstName, MiddleName, LastName alanlarını FirstName, MiddleName ve LastName alanlarına göre artan şekilde ancak ilk 30 satır atılıp daha sonra sadece 15 satır görüntülenecek şekilde listeleyelim.

SELECT BusinessEntityID, Title, FirstName, 
MiddleName, LastName FROM Person.Person
ORDER BY FirstName, MiddleName, LastName 
OFFSET 30 ROWS FETCH NEXT 15 ROWS ONLY

261208

4 yorum

  1. Hocam ben ilk 10 kaydı gizlemek diğerlerini göstermek istiyorum ne yapmalıyım acaba?

  2. İlk 10 kaydı gizler diğerlerini gösterirsin.

    SELECT * FROM (TabloAdı) OFFSET 10 ROWS;

  3. hocam gridviewde yeşil renkli olanları ilk sırada göstermek istiyorum

  4. Gayet yalın ve güzel anlatım için teşekkür ederim

Bir cevap yazın

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