ORDER BY komutu verilerin belli bir sıraya göre çekilmesini sağlar. ORDER BY komutu her zaman SQL ifadesinin en sonunda bulunur. ORDER BY komutu ile birlikte iki anahtar kelime kullanabiliriz, Bunlar;
Bu iki ifadeden birisi kullanılmıyorsa default olarak ASC kullanılıyor kabul edilir. O yüzden ASC sıralama yapmak ASC ifadesini kullanmasak da olur fakat DESC sıralama yapmak istiyorsak kesinlikle kullanmalıyız. Genel Olarak ifade etmek gerekirse şu şekilde kullanıldığını söyleyebiliriz
SELECT [Kolon isimleri] FROM [Tablo isimleri] ORDER BY [sıralanacak kolonlar] [ASC|DESC]
Şimdi bunu bir örnekle incelersek
SELECT * FROM tbKisiler ORDER BY ad
id | ad | soyad | tel | sehir | yas | dogumTarihi |
---|---|---|---|---|---|---|
1 | Cahit | ÇEÇEN | 05411231212 | MARDİN | 21 | 01.01.1991 00:00:00 |
2 | Emre | ÜNAL | 05543120101 | İSTANBUL | 19 | 17.12.1993 00:00:00 |
3 | Faruk | ÜNAL | 05369333629 | ESKİŞEHİR | 21 | 11.08.1991 00:00:00 |
4 | Fatih | KAYA | 05351133055 | ANKARA | 22 | 06.08.1990 00:00:00 |
8 | Necip | ULU | 05057654321 | ANKARA | 37 | 21.03.1976 00:00:00 |
9 | Osman | HIZLI | 05067891234 | AKSARAY | 33 | 11.07.1980 00:00:00 |
10 | Osman | ÜNAL | 03127775533 | ANKARA | 67 | 27.09.1946 00:00:00 |
11 | Özgü | ADEM | 05556677880 | ŞANLIURFA | 21 | 15.06.1991 00:00:00 |
Tablomuz kişilerin adına göre alfabetik olarak sıralanmıştır, ASC yada DESC kullanmadığımız için default olarak ASC kabul edilmiştir. Şimdi birde DESC ile aynı verileri çekelim
SELECT * FROM tbKisiler ORDER BY ad DESC
id | ad | soyad | tel | sehir | yas | dogumTarihi |
---|---|---|---|---|---|---|
11 | Özgü | ADEM | 05556677880 | ŞANLIURFA | 21 | 15.06.1991 00:00:00 |
9 | Osman | HIZLI | 05067891234 | AKSARAY | 33 | 11.07.1980 00:00:00 |
10 | Osman | ÜNAL | 03127775533 | ANKARA | 67 | 27.09.1946 00:00:00 |
8 | Necip | ULU | 05057654321 | ANKARA | 37 | 21.03.1976 00:00:00 |
4 | Fatih | KAYA | 05351133055 | ANKARA | 22 | 06.08.1990 00:00:00 |
3 | Faruk | ÜNAL | 05369333629 | ESKİŞEHİR | 21 | 11.08.1991 00:00:00 |
2 | Emre | ÜNAL | 05543120101 | İSTANBUL | 19 | 17.12.1993 00:00:00 |
1 | Cahit | ÇEÇEN | 05411231212 | MARDİN | 21 | 01.01.1991 00:00:00 |
Şimdi birde yaşlarına göre sıralattıralım, yaşı büyük olandan küçük olana [DESC] olacak şekilde sıralamak istersek kodu şu şekilde olacaktır.
SELECT * FROM tbKisiler ORDER BY yas DESC
id | ad | soyad | tel | sehir | yas | dogumTarihi |
---|---|---|---|---|---|---|
10 | Osman | ÜNAL | 03127775533 | ANKARA | 67 | 27.09.1946 00:00:00 |
8 | Necip | ULU | 05057654321 | ANKARA | 37 | 21.03.1976 00:00:00 |
9 | Osman | HIZLI | 05067891234 | AKSARAY | 33 | 11.07.1980 00:00:00 |
4 | Fatih | KAYA | 05351133055 | ANKARA | 22 | 06.08.1990 00:00:00 |
3 | Faruk | ÜNAL | 05369333629 | ESKİŞEHİR | 21 | 11.08.1991 00:00:00 |
1 | Cahit | ÇEÇEN | 05411231212 | MARDİN | 21 | 01.01.1991 00:00:00 |
11 | Özgü | ADEM | 05556677880 | ŞANLIURFA | 21 | 15.06.1991 00:00:00 |
2 | Emre | ÜNAL | 05543120101 | İSTANBUL | 19 | 17.12.1993 00:00:00 |
Bu şekilde diğer kolonlara göre de sıralama yaptırabiliriz, aynı şekilde doğum tarihlerine göre de sıralama yapmamız mümkün.
BİRDEN FAZLA KOLON ÜZERİNDE SIRALAMA YAPMAK
SELECT sorgularımızda sıralama yaparken istersek bütün kolonları dahi aynı anda kullanabiliriz. Bunu kullanma şeklimiz ise ORDER BY idafesinden sonra sıra ile aralarında virgül olması şartı ile sırala yapacağımız kolonları listeleyebiliriz, Örnek olarak aşağıdaki sorguyu inceleyecek olursak,
SELECT * FROM tbKisiler ORDER BY soyad ASC, yas DESC
id | ad | soyad | tel | sehir | yas | dogumTarihi |
---|---|---|---|---|---|---|
11 | Özgü | ADEM | 05556677880 | ŞANLIURFA | 21 | 15.06.1991 00:00:00 |
1 | Cahit | ÇEÇEN | 05411231212 | MARDİN | 21 | 01.01.1991 00:00:00 |
9 | Osman | HIZLI | 05067891234 | AKSARAY | 33 | 11.07.1980 00:00:00 |
4 | Fatih | KAYA | 05351133055 | ANKARA | 22 | 06.08.1990 00:00:00 |
8 | Necip | ULU | 05057654321 | ANKARA | 37 | 21.03.1976 00:00:00 |
10 | Osman | ÜNAL | 03127775533 | ANKARA | 67 | 27.09.1946 00:00:00 |
3 | Faruk | ÜNAL | 05369333629 | ESKİŞEHİR | 21 | 11.08.1991 00:00:00 |
2 | Emre | ÜNAL | 05543120101 | İSTANBUL | 19 | 17.12.1993 00:00:00 |
...ORDER BY soyad ASC, yas DESC
ifadesinden dolayı sıralamamız öncelikle soyad a göre a dan z ye, yas a göre ise büyükte küçüğe doğru sıralanmıştır. Tablomuzu incelersek ÜNAL soyadına sahip kişiler bir arada, bunlar arasında ise yaşı büyük olan en üstte, küçük olan ise en altta listelenmiştir. Bu örnekte de gördüğümüz gibi sıralama yapacağımız her kolondan sonra ayrı ayrı ASC yada DESC ifadelerini kullanabiliriz.
SORGUDA OLMAYAN KOLONLARI KULLANARAK SORGULAMA YAPMAK
Üstteki sorgularımızda * ile bütün kolonları çekerek çektiğimiz kolonlar arasında sıralama yapmıştık. Sorgularımızda bütün kolonları çekmesek dahi çekmediğimiz kolonları kullanarak da sorgumuzu çalıştırabiliriz. Mesela üstteki sıralamanın aynısını soyad ve yas kolonunu kullanmadan çekelim. Kişilerin adının ve şehirlerinin çekildiği fakat sıralamanın yas ve soyada göre olduğu sorgu için;
SELECT ad, sehir FROM tbKisiler ORDER BY soyad ASC, yas DESC
ad | sehir |
---|---|
Özgü | ŞANLIURFA |
Cahit | MARDİN |
Osman | AKSARAY |
Fatih | ANKARA |
Necip | ANKARA |
Osman | ANKARA |
Faruk | ESKİŞEHİR |
Emre | İSTANBUL |
Gördüğünüz gibi üstteki sorgudaki kişilerle bu sorgudaki kişiler aynı sıraya göre listelenmiş olup bu sorguda sıralama yapılan kolonlar kullanılmamıştır.
KOLON NUMARASINA GÖRE SIRALAMA YAPMAK
Sorgularımızda sıralama yaparken kolon numarasına göre de sıralama yapmamız mümkün, ORDER BY ifadesinden sonra sıra ile hangi kolonlar üzerinde sıralama yapacağımızı numara belirterek yazabiliriz. İlk kolonun numarası 1den başlamakta ve sağa doğru gittikçe 1er 1er artmaktadır.
Kolon1 | Kolon2 | Kolon3 | Kolon4 | Kolon5 |
---|---|---|---|---|
veri1 | veri2 | veri3 | veri4 | veri5 |
Bir önceki başlıkta sorguda olmayan kolona göre sıralama yapabileceğimizi belirtmiştim fakat bu şekilde kolon numarasına göre sıralama yapacağımızda tabloda olmayan kolona göre sıralama yapamayız. Sıralama veritabanındaki sıraya göre değil, sorgumuzdaki kullandığımız sıraya göredir, Örneğin;
SELECT sehir,soyad,ad,yas FROM tbKisiler ORDER BY 2 DESC,4
1-SEHİR | 2-SOYAD | 3-AD | 4-YAS |
---|---|---|---|
İSTANBUL | ÜNAL | Emre | 19 |
ESKİŞEHİR | ÜNAL | Faruk | 21 |
ANKARA | ÜNAL | Osman | 67 |
ANKARA | ULU | Necip | 37 |
ANKARA | KAYA | Fatih | 22 |
AKSARAY | HIZLI | Osman | 33 |
MARDİN | ÇEÇEN | Cahit | 21 |
ŞANLIURFA | ADEM | Özgü | 21 |
Gördüğünüz gibi SELECT ifadesine kolonları hangi sıraya göre yazarsak ORDER BY ifadesinde kullanacağımız sıralama da ona göre şekilleniyor. Bu şekilde kolon numarasına göre sıralandırma yapmak sağlıklı bi yöntem değil, o yüzden tavsiye etmiyorum, en güvenilir yol en başta anlattığım gibi kolon isimleri ile sıralandırma yapmak.