Sıralama ve Limit (ORDER BY, LIMIT)

Sonuçları sıralama, sayfalama ve limit kullanımı

ORDER BY - Sıralama

Artan Sıralama (ASC)

-- Varsayılan artan sıra (ASC yazılmasa da çalışır)
SELECT * FROM products ORDER BY price ASC;
SELECT * FROM products ORDER BY price; -- Aynı sonuç

-- Alfabetik sıralama
SELECT * FROM users ORDER BY name ASC;

Azalan Sıralama (DESC)

-- En yeniden eskiye
SELECT * FROM orders ORDER BY created_at DESC;

-- En pahalıdan ucuza
SELECT * FROM products ORDER BY price DESC;

Çoklu Kolon Sıralama

-- Önce ülkeye, sonra şehre göre sırala
SELECT * FROM customers 
ORDER BY country ASC, city ASC;

-- Önce kategoriye göre, sonra fiyata göre (azalan)
SELECT * FROM products 
ORDER BY category ASC, price DESC;
category | name | price -------------+---------+------- Electronics | Laptop | 15000 Electronics | Tablet | 8000 Electronics | Phone | 5000 Furniture | Desk | 2500 Furniture | Chair | 1500

NULL Değerlerin Sıralaması

-- NULL değerleri sona al
SELECT * FROM users ORDER BY phone NULLS LAST;

-- NULL değerleri başa al
SELECT * FROM users ORDER BY phone NULLS FIRST;

LIMIT ve OFFSET - Sayfalama

Temel LIMIT

-- İlk 10 kayıt
SELECT * FROM users LIMIT 10;

-- En pahalı 5 ürün
SELECT * FROM products ORDER BY price DESC LIMIT 5;

-- En yeni 20 sipariş
SELECT * FROM orders ORDER BY created_at DESC LIMIT 20;

OFFSET ile Sayfalama

-- Sayfa 1 (ilk 10 kayıt)
SELECT * FROM products ORDER BY id LIMIT 10 OFFSET 0;

-- Sayfa 2 (11-20 arası)
SELECT * FROM products ORDER BY id LIMIT 10 OFFSET 10;

-- Sayfa 3 (21-30 arası)
SELECT * FROM products ORDER BY id LIMIT 10 OFFSET 20;
Sayfalama Formülü:
OFFSET = (sayfa_numarası - 1) × sayfa_başına_kayıt
Örnek: 5. sayfa, 20 kayıt → OFFSET = (5-1) × 20 = 80

Pratik Örnekler

-- En çok satan 10 ürün
SELECT product_id, SUM(quantity) AS total_sold
FROM order_items
GROUP BY product_id
ORDER BY total_sold DESC
LIMIT 10;

-- Son 7 günün siparişleri, en yeniden başlayarak
SELECT * FROM orders
WHERE created_at > NOW() - INTERVAL '7 days'
ORDER BY created_at DESC
LIMIT 50;