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;
ASCartan (varsayılan),DESCazalan.- Birden fazla sütunla sıralayabilirsin; ilk sütun eşitse ikinciye bakılır.
- SELECT listesindeki takma adla da sıralayabilirsin.
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ır | 6–10. satırlar (sayfalama) |
|---|---|---|
| SQL Server | SELECT TOP 5 ... | ORDER BY ... OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY |
| PostgreSQL, SQLite | ... LIMIT 5 | LIMIT 5 OFFSET 5 |
| MySQL | ... LIMIT 5 | LIMIT 5 OFFSET 5 veya LIMIT 5, 5 |
| Oracle (12c+) | FETCH FIRST 5 ROWS ONLY | OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY |
SQL Server'a özel
TOP, 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;