Red Kit

WFN Üye
Konular
580
Mesajlar
580
Çözüm
0
Ticaret Puanı
0
Üyelik
23 Gün
Konum
Adana
Web Sitesi
Var
Alanı
Makale Yazarı
1/1
Konu sahibi
İsim veya başlık gibi metin içeren bir sütunu alfabetik sırada listelemek için sorguya ORDER BY ekleyin. Örneğin SELECT * FROM musteriler ORDER BY ad ASC; ifadesi, musteriler tablosundaki kayıtları ad sütununa göre A’dan Z’ye sıralar. ASC yazılmazsa çoğu SQL sisteminde artan sıralama varsayılır; Z’den A’ya listelemek için DESC kullanılır.

Metin sütununu A’dan Z’ye sıralama​


Temel sorgunun yapısı şöyledir:

SQL:
SELECT sütun1, sütun2
FROM tablo_adi
ORDER BY metin_sütunu ASC;

Örneğin urunler tablosunda ürün adları urun_adi sütununda tutuluyorsa:

SQL:
SELECT id, urun_adi, fiyat
FROM urunler
ORDER BY urun_adi ASC;

Bu sorgu önce seçilen sütunları urunler tablosundan getirir, ardından kayıtları urun_adi değerine göre artan sıraya koyar. Sonuçta ürün adları genel olarak A’dan Z’ye doğru görünür; aynı ada sahip kayıtların kendi aralarındaki sırası ayrıca belirtilmediği için kesin olmayabilir.

Sütun adında Türkçe karakter bulunması sorgunun mantığını değiştirmez. Örneğin sütunun adı şehir ise sorgu şu şekilde yazılabilir:

SQL:
SELECT *
FROM adresler
ORDER BY şehir ASC;

Ancak Türkçe karakterlerin, büyük-küçük harflerin ve aksanlı harflerin hangi sırada değerlendirileceği veritabanının karakter kümesi ve karşılaştırma kurallarına, yani collation ayarına bağlıdır. Bu nedenle farklı veritabanlarında veya farklı ayarlarda aynı kelimelerin sıralaması değişebilir. Özellikle I, İ, ı ve i harflerinin sırası için veritabanınızın Türkçe karşılaştırma ayarını kontrol etmeniz gerekir.

Z’den A’ya sıralama​


Azalan alfabetik sıralama için DESC kullanılır:

SQL:
SELECT id, urun_adi
FROM urunler
ORDER BY urun_adi DESC;

Bu sorguda liste genellikle Z’den A’ya doğru gelir. DESC yalnızca alfabetik sıralamada değil, sayısal ve tarih sütunlarında da kullanılabilir. Örneğin en yeni kayıtları önce listelemek için:

SQL:
SELECT id, urun_adi, olusturma_tarihi
FROM urunler
ORDER BY olusturma_tarihi DESC;

Burada sıralama ürün adına göre değil, olusturma_tarihi sütununa göre yapılır. Sıralama ölçütü, ORDER BY ifadesinden sonra yazılan sütundur.

Filtrelenen kayıtları alfabetik sıralama​


Yalnızca belirli koşula uyan kayıtları alfabetik listelemek için WHERE ile ORDER BY birlikte kullanılabilir:

SQL:
SELECT id, ad, sehir
FROM musteriler
WHERE sehir = 'Ankara'
ORDER BY ad ASC;

Bu sorgu önce şehri Ankara olan müşterileri seçer, ardından yalnızca bu kayıtları ad sütununa göre A’dan Z’ye sıralar. WHERE koşulu sonucu daraltır; ORDER BY ise kalan kayıtların gösterim sırasını belirler.

Metin aramasıyla birlikte de kullanılabilir:

SQL:
SELECT id, ad
FROM musteriler
WHERE ad LIKE 'A%'
ORDER BY ad ASC;

Bu örnekte adı A harfiyle başlayan kayıtlar seçilir ve alfabetik sıraya konur. LIKE 'A%' ifadesindeki yüzde işareti, A’dan sonra herhangi bir karakter dizisinin gelebileceğini belirtir.

Aynı alfabetik değere sahip kayıtların sırasını belirleme​


Birden fazla kaydın sıralama sütunundaki değeri aynıysa, ikinci bir sıralama ölçütü ekleyebilirsiniz:

SQL:
SELECT id, ad, soyad
FROM musteriler
ORDER BY ad ASC, soyad ASC;

Bu sorguda kayıtlar önce ad sütununa göre sıralanır. Aynı ada sahip kişiler kendi aralarında soyad sütununa göre A’dan Z’ye dizilir. İkinci sütunun sırasını ters çevirmek de mümkündür:

SQL:
SELECT id, ad, soyad
FROM musteriler
ORDER BY ad ASC, soyad DESC;

Birden fazla ORDER BY sütunu soldan sağa öncelik taşır. İlk sütunda fark varsa sonraki sütunlar dikkate alınmaz; ilk sütundaki değerler eşitse ikinci sütuna geçilir.

Sonuçların her çalıştırmada aynı sırada gelmesi gerekiyorsa, eşit değerleri ayıran benzersiz bir sütun da ekleyin:

SQL:
SELECT id, ad
FROM musteriler
ORDER BY ad ASC, id ASC;

Burada aynı ada sahip kayıtlar id değerine göre düzenlenir. Böylece yalnızca alfabetik sıra değil, eşit değerlerin kendi içindeki sıra da açıkça tanımlanmış olur.

NULL ve boş değerleri kontrol etme​


Sıralama sütununda NULL bulunan kayıtların listenin başında mı yoksa sonunda mı görüneceği veritabanı sistemine veya sorgu biçimine göre değişebilir. NULL, değer bulunmadığını ifade eder; boş metinle aynı şey değildir.

Önce dolu isimleri, ardından NULL değerleri görmek istiyorsanız veritabanınız destekliyorsa şu biçim kullanılabilir:

SQL:
SELECT id, ad
FROM musteriler
ORDER BY ad ASC NULLS LAST;

NULLS LAST desteklenmiyorsa, önce NULL değerleri işaretleyen bir ifade, sonra metin sütunu kullanılabilir. Örneğin birçok SQL sisteminde şu yaklaşım uygulanır:

SQL:
SELECT id, ad
FROM musteriler
ORDER BY CASE WHEN ad IS NULL THEN 1 ELSE 0 END,
         ad ASC;

Bu sorguda adı bulunan kayıtlar önce gelir, adı NULL olanlar sona bırakılır. Ancak CASE kullanımı ve NULLS LAST desteği kullandığınız veritabanına göre farklılık gösterebilir. Çalışmayan bir sorguda önce hangi SQL sistemini kullandığınızı ve sürümünü, ardından ilgili sistemin ORDER BY sözdizimini kontrol edin.

Büyük ve küçük harflerin sıralamaya etkisi​


Bazı veritabanlarında büyük ve küçük harfler aynı kabul edilirken bazılarında farklı kabul edilebilir. Örneğin Ali ile ali değerlerinin sırası, sütunun karşılaştırma ayarına bağlıdır. Sorgu doğru çalıştığı hâlde beklediğiniz Türkçe alfabetik sırayı vermiyorsa sorun çoğu zaman ORDER BY ifadesinde değil, karakter kümesi veya collation seçimindedir.

Bu durumda şu bilgileri birlikte kontrol edin:
  • Kullandığınız veritabanı sistemi ve sürümü.
  • Sıralanan sütunun veri türü; metin sütunu beklenirken sayısal veya farklı bir tür kullanılmış olabilir.
  • Sütunun karakter kümesi ve collation ayarı.
  • Değerlerde başta veya sonda görünmeyen boşluklar bulunup bulunmadığı.
  • Sıralama sırasında LOWER(), UPPER() veya veritabanına özgü bir dönüştürme kullanılıp kullanılmadığı.
Başta kalan boşluklar alfabetik sonucu etkileyebilir. Verileri kalıcı olarak değiştirmeden önce sonucu görmek için bazı sistemlerde TRIM() kullanılabilir:

SQL:
SELECT id, ad
FROM musteriler
ORDER BY TRIM(ad) ASC;

Bu kullanım sıralama sırasında baştaki ve sondaki boşlukları yok saymayı amaçlar; ancak TRIM() üzerinde sıralama büyük tablolarda dizin kullanımını etkileyebilir. Kalıcı veri temizliği yapmadan önce hangi kayıtların değişeceğini ayrıca inceleyin.

Sadece ilk kayıtları alfabetik sırayla getirme​


Alfabetik sıralamadan sonra yalnızca belirli sayıda kayıt almak istiyorsanız kullandığınız SQL sistemine uygun sınırlama sözdizimini ekleyin. Örneğin LIMIT destekleyen sistemlerde:

SQL:
SELECT id, ad
FROM musteriler
ORDER BY ad ASC
LIMIT 10;

Bu sorgu tüm kayıtları alfabetik olarak sıralar ve sonuç kümesinden ilk 10 kaydı döndürür. LIMIT tek başına alfabetik sıra oluşturmaz; sıralamayı sağlayan ifade yine ORDER BY’dır. ORDER BY olmadan LIMIT 10 kullanırsanız hangi 10 kaydın geleceği garanti edilmez.

Farklı SQL sistemlerinde ilk kayıtları sınırlamak için kullanılan ifade değişebilir:
İhtiyaçTemel ifadeNot
A’dan Z’ye sıralamaORDER BY ad ASCASC artan sırayı belirtir; çoğu sistemde varsayılandır.
Z’den A’ya sıralamaORDER BY ad DESCDESC azalan sırayı belirtir.
Eşit adları ayırmaORDER BY ad ASC, id ASCİkinci sütun, ilk sütun eşit olduğunda kullanılır.
İlk kayıtları sınırlamaORDER BY ad ASC LIMIT 10LIMIT her SQL sisteminde aynı biçimde desteklenmez.
Bu nedenle sorguyu doğrudan kopyalamadan önce kullandığınız sistemin MySQL, PostgreSQL, SQL Server, SQLite veya başka bir ürün olup olmadığını dikkate alın. Temel alfabetik sıralama için ORDER BY sütun ASC ortak ve anlaşılır yaklaşımdır; farklılıklar daha çok sonuç sayısını sınırlama, NULL değerleri konumlandırma ve karakter karşılaştırma ayarlarında ortaya çıkar.

Sorgunun sonucunu doğru yorumlama​


Sorgu hata vermeden çalışıyor ancak kayıtlar beklediğiniz gibi sıralanmıyorsa önce ORDER BY sonrasında doğru sütun adının yazıldığını kontrol edin. SELECT * kullanıldığında sonuç ekranındaki sütunların yerini yanlış yorumlamak kolaydır; denetim için sıralama sütununu seçilen sütunlar arasında açıkça gösterin.

Örneğin:

SQL:
SELECT id, ad, soyad
FROM musteriler
ORDER BY ad ASC, soyad ASC, id ASC;

Bu sorguda ilk olarak ad, sonra soyad, en son da id dikkate alınır. Kayıtların farklı sırada görünmesi, verilerin eksik veya silinmiş olduğunu kanıtlamaz; yalnızca uygulanan sıralama ölçütlerinin sonucunu gösterir. Eksik kayıt şüphesi varsa WHERE koşulunu, JOIN kullanılıyorsa birleştirme koşullarını ve toplam kayıt sayısını ayrıca kontrol etmeniz gerekir.

Temel kullanım için çoğu durumda şu sorgu yeterlidir:

SQL:
SELECT *
FROM tablo_adi
ORDER BY alfabetik_sütun ASC;

tablo_adi yerine tablonun adını, alfabetik_sütun yerine ad, ürün adı, şehir veya benzeri metin sütununu yazın. Sonuç beklenenden farklıysa sonraki kontrol noktaları sütunun veri türü, NULL değerleri, baştaki boşluklar, büyük-küçük harf kuralları ve veritabanının collation ayarıdır.

Sık sorulan sorular​

ORDER BY yazmadan kayıtlar alfabetik sırada gelir mi?​

Genellikle hayır. Veritabanı, ORDER BY kullanılmadığında kayıtları fiziksel depolama düzenine veya sorgu çalıştırma planına göre döndürebilir. Bir sorguda alfabetik sıra gerekiyorsa bunu açıkça ORDER BY sütun ASC ile belirtin.

ORDER BY ile WHERE arasındaki fark nedir?​

WHERE hangi kayıtların sonuçta bulunacağını belirler; ORDER BY ise seçilen kayıtların hangi sırada gösterileceğini belirler. Bu yüzden önce kayıtları filtreleyip sonra kalanları alfabetik sıralamak için ikisini aynı sorguda kullanabilirsiniz.

İki sütuna göre alfabetik sıralama nasıl yapılır?​

Sütunları virgülle ayırarak yazın. ORDER BY ad ASC, soyad ASC ifadesinde önce ad, ad değerleri eşitse soyad dikkate alınır. Eşit kayıtların sırasını kesinleştirmek için sonuna benzersiz bir sütun, örneğin id, ekleyebilirsiniz.

Türkçe karakterler yanlış sırada görünüyorsa ne yapılmalı?​

Önce sütunun karakter kümesini ve collation ayarını kontrol edin. Ayrıca değerlerde başta boşluk bulunup bulunmadığını ve büyük-küçük harflerin nasıl karşılaştırıldığını inceleyin. Sorgu doğru olsa bile veritabanı Türkçe karşılaştırma kurallarını kullanmıyorsa beklenen alfabetik sıra elde edilmeyebilir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic