Ana içeriğe geç
Kesit SQL
Temel · Temeller

ORDER BY ve ilk N satır (LIMIT / TOP / FETCH)

Sıralama, ilk N kaydı almak ve sayfalama; her SQL türünün kendi yazımı.

Uygulamada aç, 8 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Sıralama

SQL, ORDER BY yazmadığın sürece sonuçların sırasını garanti etmez. Sıralamak için:

SELECT name, price
FROM products
ORDER BY price DESC;
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC;

İlk N satır: her SQL türü farklı yazar

Standart SQL'de bu iş FETCH FIRST n ROWS ONLY ile yapılır; ama en yaygın iki yazım LIMIT ve TOP'tur. Uygulamada kutunun üstündeki SQL türü sekmelerinden farkı görebilirsin:

SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 5;
SQL türüİlk 5 satır6–10. satırlar (sayfalama)
SQL ServerSELECT TOP 5 ...ORDER BY ... OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY
PostgreSQL, SQLite... LIMIT 5LIMIT 5 OFFSET 5
MySQL... LIMIT 5LIMIT 5 OFFSET 5 veya LIMIT 5, 5
Oracle (12c+)FETCH FIRST 5 ROWS ONLYOFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY
SQL Server'a özelTOP, SELECT'ten hemen sonra yazılır. TOP (5) WITH TIES son sıradaki eşitleri de getirir, TOP 10 PERCENT satırların %10'unu getirir. Bunları T-SQL modülünde ayrıca işliyoruz. OFFSET/FETCH kullanmak için ORDER BY zorunludur.
Oracle'a özel12c öncesi sürümlerde WHERE ROWNUM <= 5 kullanılırdı. ROWNUM, sıralamadan önce atandığı için sıralı ilk N için alt sorgu gerekir; FETCH FIRST bu sorunu çözer.
-- 2. sayfa (her sayfada 5 ürün)
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 5 OFFSET 5;
NULL'lar nerede?SQL Server, MySQL ve SQLite'ta NULL'lar artan sıralamada başa gelir; PostgreSQL ve Oracle'da sona. PostgreSQL, Oracle ve SQLite NULLS FIRST / NULLS LAST ile bunu kontrol etmene izin verir. Şehre göre sıralayıp SQL türü sekmesini PostgreSQL'e çevirerek dene:
SELECT first_name, city
FROM customers
ORDER BY city
LIMIT 8;
Alıştırmalara geç (8)