İçeriğe geç
pitonmert

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.

Kaynaklar