Bu bölümde, sorgu çıktısında bulunan satırların sırasını kontrol etmek için sorguya ORDER BY ifadesinin nasıl ekleneceğini öğreneceğiz.
ORDER BY ifadesi
SELECT ifadesinin mantıksal işlem sırasında son aşama ORDER BY’dır. ORDER BY, sorguda SELECT ifadesinden dönen sonucun sıralamasını kontrol etmenizi sağlar. SQL Server, ORDER BY ifadesi olmadan satırların sıralamasının ilişkisel teoriye uygun olmasını garanti etmez.
Sorgu çıktısının sıralı olmasını sağlamak için aşağıdaki kodu kullanabilirsiniz.
SELECT <select_list> FROM <table_source> ORDER BY <order_by_list> [ASC|DESC];
ORDER BY liste parametresine çeşitli eleman türleri kabul edebilir:
İsme göre sütunlar: İlk sütunda tekrarlanan değerler varsa, diğer sütunlardaki değerler eşsizliği sağlamak için kullanılabilir.
Sütun takma adları: ORDER BY, SELECT ifadesinden sonra işlendiği için SELECT listesinde tanımlanan takma adlara erişebilir.
SELECT ifadesinde konuma göre sütunlar: ORDER BY listesini, SELECT listesindeki sütun sırasında yapılan değişiklikler olursa güncelleştirilebilirsiniz fakat özel bakım gerektirdiği ve okunabilirliği azalttığı için önerilmez.
- Sütunlar, SELECT listesinde ayrıntılı bulunmaz fakat FROM listesindeki tabloların bir bölümünde ayrıntılı olarak açıklanmıştır. Eğer sorguda DISTINCT kullanılıyorsa, ORDER BY listesindeki sütunların hepsi SELECT listesinde bulunmak zorundadır.
Not: ORDER BY, COLLATE ifadesini de içerebilir. Bunu daha sonraki bölümlerde tartışacağız.
Sıralama düzenini belirlemek için hangi sütunların kullanılması gerektiğine karar vermenin yanı sıra, artan (A-Z, 0-9) için ASC veya azalan (Z-A, 9-0) için DESC kullanarak da sıralama yönünü kontrol edebilirsiniz. Artan (ASC) varsayılandır. Her sütun, aşağıdaki örnekte olduğu gibi farklı yönlerde sıralanabilir.
Bu sorgu, en yakın tarihten en uzak tarihe kadar işe alınan işçileri listeler aynı anda soyada göre alfabetik olarak sıralar:
USE TSQL; GO SELECT hiredate, firstname, lastname FROM HR.Employees ORDER BY hiredate DESC, lastname ASC;
ORDER BY ifadesinin syntax’ı aşağıdaki gibidir:
ORDER BY <order_by_list> OFFSET <offset_value> ROW|ROWS FETCH FIRST|NEXT <fetch_value> ROW|ROWS ONLY
Not: ORDER BY ifadesinde OFFSET-FETCH ifadelerinin kullanımı sonraki bölümlerde ele alınacaktır.
ORDER BY listesinden bir çok varyasyon ortaya çıkar. Sütunları isme göre belirlerken için varsayılan artan düzende aşağıdaki syntax kullanılır:
ORDER BY <column_name_1>, <column_name_2>;
Sales.Customers tablosundaki sütunları kullanan bir kod parçası şöyle görünür:
ORDER BY country, region, city;
SELECT ifadesinde tanımlanan takma ada göre sütunları belirtmek için aşağıdaki syntax kullanılır:
SELECT <column_name_1> AS alias1, <column_name_2> AS alias2 FROM <table source> ORDER BY alias1;
Sütun takma adlarını kullanarak Sales.Orders tablosundan veri çeken sorgu da şöyle görünecektir:
SELECT orderid, custid, YEAR(orderdate) AS orderyear FROM Sales.Orders ORDER BY orderyear;
ORDER BY Örnekleri
Aşağıda, dönen sonucu sıralamak için ORDER BY kullanan örnekler görmekteyiz. Tüm sorgularda TSQL örnek veri tabanı kullanılmıştır.
Sales.Orders tablosuna sorgu atıldığında, sonuçları orderdate sütununa göre sıralayan bir sorgu şu şekilde yazılmıştır:
SELECT orderid, custid, orderdate FROM Sales.Orders ORDER BY orderdate;
Sales.Orders tablosuna sorgu atıldığında sonuçları sipariş tarihine göre azalan olarak sıralayan bir sorgu da şu şekildedir (yani en eski tarihten en yeni tarihe):
SELECT orderid, custid, orderdate FROM Sales.Orders ORDER BY orderdate DESC;
HR.Employees tablosunu kullanarak işe alım tarihine göre azalan yönde sıralayan, aynı tarihteyse soyada göre sıralayan bir sorgu şu şekildedir:
SELECT hiredate, firstname, lastname FROM HR.Employees ORDER BY hiredate DESC, lastname ASC;
Kaynak:
ORDER BY Clause (Transact-SQL)