Günlük SQL: Kısa Başvuru
Bu sayfa, SQL sözdizimini hızlıca hatırlamak isteyen geliştiriciler içindir. Örnekler PostgreSQL sözdizimini kullanır ve birbirinden bağımsızdır. Her bölümdeki küçük veri tablosu sorgudan önceki durumu, sonuç ise sorgunun döndürdüğü satırları veya işlem sonrasındaki durumu gösterir. Örnekleri kendi veritabanında çalıştırırken tablo ve sütun adlarını uyarlaman gerekir.
Bu sayfayı kullanma
Aradığın işe doğrudan geç: satır seçme, filtreleme, sıralama, tabloları birleştirme, gruplama, veriyi değiştirme veya işlem yönetimi. İşlemlerin neden güvenilir olduğunu öğrenmek için ACID yazısına bak.
SELECT ve DISTINCT
SELECT döndürülecek sütunları seçer. DISTINCT, seçilen sütunların
oluşturduğu yinelenen sonuç satırlarını kaldırır.
Veri: customers(id, city) → (1, Ankara), (2, Bursa),
(3, Ankara)
SELECT DISTINCT city
FROM customers
ORDER BY city;
Sonuç: Ankara, Bursa
Birden çok sütun seçildiğinde DISTINCT her sütunu ayrı ayrı değil,
sütunların birlikte oluşturduğu satırı karşılaştırır.
WHERE ve NULL
WHERE koşulu, işlenecek satırları sınırlar. NULL bilinmeyen veya
bulunmayan değerdir; = NULL yerine IS NULL kullanılır.
Veri: tasks(id, title, completed_at) → (1, Yaz, NULL),
(2, İncele, 2026-09-20)
SELECT id, title
FROM tasks
WHERE completed_at IS NULL
ORDER BY id;
Sonuç: 1 | Yaz
NULL; boş metin, sıfır veya false ile aynı şey değildir.
ORDER BY ve LIMIT
ORDER BY sonucu belirli bir sıraya koyar; ASC artan, DESC azalan
sıralamadır. LIMIT döndürülecek satır sayısını sınırlar.
Veri: products(id, price) → (1, 40), (2, 20), (3, 40)
SELECT id, price
FROM products
ORDER BY price DESC, id ASC
LIMIT 2;
Sonuç: 1 | 40, 3 | 40
Eşit fiyatlarda id ikinci sıralama ölçütüdür. ORDER BY olmadan
satır sırası garanti edilmez; özellikle sayfalama yaparken buna güvenme.
JOIN
INNER JOIN yalnız eşleşen satırları döndürür. LEFT JOIN, soldaki
tablonun eşleşmeyen satırlarını da korur ve sağ taraftaki sütunları
NULL olarak gösterir.
Veri: customers(id, name) → (1, Ada), (2, Ece);
orders(id, customer_id) → (10, 1)
SELECT c.name, o.id AS order_id
FROM customers AS c
LEFT JOIN orders AS o ON o.customer_id = c.id
ORDER BY c.id, o.id;
Sonuç: Ada | 10, Ece | NULL
WHERE o.id IS NOT NULL eklersen eşleşmeyen müşteri elenir. Böyle bir
koşul, LEFT JOIN seçme nedenini ortadan kaldırabilir.
GROUP BY ve HAVING
GROUP BY aynı anahtara sahip satırları toplar. COUNT(*) satır
sayısını, SUM sayısal toplamı verir. WHERE satırları gruplamadan
önce, HAVING oluşan grupları sonra filtreler.
Veri: orders(customer_id, amount) → (1, 20), (1, 30),
(2, 10)
SELECT customer_id, COUNT(*) AS order_count, SUM(amount) AS total
FROM orders
GROUP BY customer_id
HAVING COUNT(*) >= 2
ORDER BY customer_id;
Sonuç: 1 | 2 | 50
COUNT(column), COUNT(*) değerinden farklı olarak o sütundaki
NULL değerlerini saymaz.
INSERT, UPDATE ve DELETE
Bu üç komut veriyi değiştirir. Aşağıdaki küçük örneklerin her biri ayrı bir başlangıç durumuna sahiptir.
INSERT: products(id, name) tablosu başlangıçta boştur.
INSERT INTO products (id, name) VALUES (1, 'Kalem');
Son durum: 1 | Kalem
UPDATE: products(id, price) → (1, 20), (2, 30)
UPDATE products SET price = 25 WHERE id = 1;
Son durum: (1, 25), (2, 30)
DELETE: products(id, name) → (1, Kalem), (2, Defter)
DELETE FROM products WHERE id = 1;
Son durum: 2 | Defter
UPDATE veya DELETE öncesinde WHERE koşulunu kontrol et; koşul
olmazsa komut tablodaki tüm satırları etkileyebilir. Uygulama verisini
sorguya metin birleştirerek eklemek yerine parametre bağlama kullan.
BEGIN, COMMIT ve ROLLBACK
BEGIN birden fazla komutu aynı işlemde toplar. COMMIT işlemi
tamamlar; ROLLBACK henüz tamamlanmamış işlemin değişikliklerini geri
alır. Bu örnekte iki hesabın toplamı korunur.
Veri: accounts(owner, balance) → (Ada, 70), (Ece, 30)
BEGIN;
UPDATE accounts SET balance = balance - 10 WHERE owner = 'Ada';
UPDATE accounts SET balance = balance + 10 WHERE owner = 'Ece';
COMMIT;
Son durum: (Ada, 60), (Ece, 40)
COMMIT yerine ROLLBACK çalıştırılırsa bu işlemin değişiklikleri
kalmaz. ROLLBACK, önceden tamamlanmış bir COMMIT işlemini geri
almaz. İşlemlerin garantileri ve sınırları ACID yazısında
anlatılır.