SQL ÖĞRENMEK
"Üç günde SQL öğrendim" diyen biri ile karşılaştığınızda büyük ihtimalle SELECT * FROM tablo yazmayı öğrenmiştir. Gerçek SQL öğrenmek bu değil. Bir analistin gece raporlama sorgusu, bir geliştiricinin sipariş tablosundaki kilitlenmeyi çözdüğü cümle veya bir veri mühendisinin window function ile yazdığı kohort analizi — hepsi aynı dilin farklı seviyeleri. İlginç olan, bu seviyelere geçiş süresinin tahmin ettiğinizden daha öngörülebilir olması.
Aşağıda SQL'i sıfırdan öğrenmek isteyen birinin sırayla geçtiği aşamaları, her aşamada ne kadar zaman geçtiğini, ne tür alıştırmalarla pekiştirildiğini ve sık yapılan hataları derledik. Konuyu sistematik takip etmek isterseniz LearnSQL roadmap referansı da somut bir 6 aylık plan sunar.
SQL Öğrenmek Ne Kadar Sürer?
Soru yanlış kurulduğu için cevabı da bulanık. "SQL öğrenmek" tek bir hedef değil; en az üç farklı seviye var. İlk seviye bir tabloyu okuyup süzebilmek — günde bir saat çalışmayla iki ila üç haftada çıkar. İkinci seviye birden fazla tabloyu birleştirip analiz raporları üretebilmek — yaklaşık üç ay. Üçüncü seviye performans, indeksleme, transaction izolasyonu ve uygulama tarafıyla konuşan üretim seviyesi sorgular — altı ay ile bir yıl arası, gerçek projede çalışmadan da pekişmez.
Bu süreler "kursta video izleme" değil "klavyede sorgu yazma" süresi. Kurs izleyip alıştırma yapmayan kişiler altıncı ayda hâlâ JOIN konusunda emin değildir. Bunun aksine günde 30-40 dakika küçük veri setleri üzerinde çalışan biri ikinci ayın sonunda gerçek raporlama sorgusu yazabilecek hâle gelir.
Hangi Veritabanı ile Başlamalı?
Yeni başlayanlar genelde "SQL'in türü mü var?" diye şaşırır. Standart bir SQL var (ISO/IEC 9075) ama her veritabanı kendi lehçesini ekler. İşe başlarken hangisini seçtiğiniz öğrenme hızınızı doğrudan etkiler.
- SQLite: Kurulum yok, tek dosya, anında çalışır. İlk haftalar için ideal.
- PostgreSQL: En yakın standart uyumlu, en zengin özellik seti. Uzun vadeli tercih.
- MySQL: Web ekosisteminde yaygın, basit kurulum, geniş öğretici havuzu.
- SQL Server: Kurumsal Microsoft ortamı, T-SQL lehçesi, ücretsiz Developer edition.
Pratik tavsiye: ilk iki haftayı SQLite ile geçirin (öğreneceğiniz tek şey SELECT/WHERE/ORDER BY zaten). Üçüncü haftadan itibaren PostgreSQL'e geçin. Lehçeler arası geçiş düşündüğünüzden çok daha hızlıdır; temel sözdiziminin %90'ı ortak.

Temel Sorgu Aşaması
İlk üç hafta sadece tek tablo üzerinde geçirilir. Burada hedef sorguyu yazabilmek değil, sorgunun mantıksal okuma sırasını içselleştirmek. Yazılan sırası ile çalıştırılan sırası farklı — bu farkı görmeden ileriye geçilmemeli.
Yazma sırası: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT. Çalıştırma sırası ise tersine yakın: önce FROM, sonra WHERE, GROUP BY, HAVING, SELECT, en sonda ORDER BY. Bu sıralamayı kavradığında neden bir alias'ı WHERE içinde kullanamadığın da netleşir.
Bu aşamada yazılan tipik sorgular:
- Belirli tarih aralığındaki siparişleri listele
- Tutarı 1000 TL üzerindeki ürünleri filtrele
- İsmi "A" ile başlayan müşterileri sırala
- Boş kalan e-posta alanlarını bul (
IS NULL) - Aynı şehirden gelen tekil müşterileri çıkar (
DISTINCT)
Burada en çok tökezlenen nokta NULL davranışı. WHERE telefon = NULL hiçbir satır döndürmez çünkü NULL üç değerli mantıkla çalışır; doğru kullanım IS NULL'dır. Bu küçük detay yeni başlayanların ilk gerçek "aha!" anıdır.
JOIN ve Çoklu Tablo Mantığı
SQL öğrenmenin gerçek kırılma noktası burası. Tek tablodan çoklu tabloya geçiş, dilin neden var olduğunu anlatır. İlişkisel modelin gücü tek tabloda değil tabloları doğru birleştirmekte.
Dört temel JOIN tipini sıralamak yetmez; her birinin ne zaman kullanılacağını senaryoyla pekiştirmek gerekir:
- INNER JOIN: Sadece iki tarafta da eşleşen satırlar. "Hem müşteri hem sipariş kaydı olanlar."
- LEFT JOIN: Sol tablonun tamamı + sağdan eşleşenler. "Sipariş vermemiş müşterileri de görmek için."
- RIGHT JOIN: Sağ tablonun tamamı. Pratikte LEFT JOIN tercih edilir, çoğu sorguda anlam aynı.
- FULL OUTER JOIN: İki tarafın da tüm satırları. Veri kalitesi denetimi için kullanışlı.
Burada en yaygın hata kartezyen çarpım: JOIN koşulunu unutmak veya yanlış kolon eşlemek. 1000 satırlık iki tablo arasında koşulsuz join 1 milyon satır üretir; üretimde ciddi bir sorundur. JOIN konusunu daha geniş ele alan ayrı bir rehbere göz atmak isterseniz çeşitli JOIN senaryolarını karşılaştıran kaynakları incelemekte fayda var. Sistematik takip için SQL eğitim programı sıralı bir müfredat sunar.
Aggregation, Subquery ve CTE
JOIN'i kavradığında bir sonraki kapı açılır: veriyi sadece çekmek değil, özetlemek. COUNT, SUM, AVG, MIN, MAX ve bunlarla birlikte gelen GROUP BY mantığı. Burada da klasik hata: SELECT içinde aggregate olmayan kolonları unutmak. PostgreSQL bunu hata olarak verir, MySQL eski sürümlerde sessizce yanlış sonuç döndürür — öğrenme aşamasında PostgreSQL'in katı davranışı aslında öğreticidir.
Subquery (alt sorgu) ile başlarsınız: WHERE musteri_id IN (SELECT id FROM premium_musteriler) gibi. Ama subquery iç içe geçtikçe okunabilirlik düşer. Bu noktada CTE (Common Table Expression) devreye girer:
WITH premium AS (
SELECT id FROM musteriler WHERE harcama > 10000
)
SELECT s.* FROM siparisler s
JOIN premium p ON s.musteri_id = p.id;CTE sayesinde sorgu yukarıdan aşağıya okunur, debug etmek kolaylaşır. Modern raporlama sorgularının büyük çoğunluğu CTE üzerine kurulur; subquery'yi atlamadan ama hızla CTE'ye geçmek pratik bir öğrenme stratejisi.
Window Function ve İleri Analitik
Window function'lar SQL'in en güçlü, en az anlaşılan kısmı. GROUP BY satırları birleştirir; window function satırları birleştirmeden hesaplar. Yani her satırın yanında, o satıra ait bir "küme istatistiği" üretir.
Tipik kullanım örnekleri:
ROW_NUMBER() OVER (PARTITION BY musteri ORDER BY tarih)— her müşterinin siparişlerini sıralamakSUM(tutar) OVER (ORDER BY tarih)— kümülatif toplam (running total)LAG(tutar) OVER (ORDER BY tarih)— bir önceki satırın değeri, dönemsel karşılaştırma içinRANK()veDENSE_RANK()— sıralama bazlı analiz
Bir e-ticaret raporunda "her müşterinin ilk siparişini bul" sorusu window function ile tek sorguda çözülür; subquery ile yapmaya kalkarsanız üç katı uzunluk ve yarısı kadar performans. Bu aşamaya geldiğinizde artık SQL kullanıcısı değil, SQL ile düşünen biri olursunuz.

Pratik Nasıl Yapılır?
SQL kitaptan değil sorgudan öğrenilir. Pratik için somut yollar:
- Hazır veri seti yükleyin: Northwind, Sakila, Chinook gibi klasik örnek veritabanları PostgreSQL veya SQLite'a 5 dakikada kurulur ve gerçek tablolar içerir.
- Soru havuzu çözün: StrataScratch, LeetCode SQL, HackerRank SQL gibi platformlarda günde 1-2 soru bitir hedefi koyun.
- Gerçek bir CSV bulun: Kaggle'dan bir veri setini PostgreSQL'e yükleyin, sonra elinizde olmayan sorulara cevap arayın. "Ay bazında satışlar nasıl değişti?" gibi.
- EXPLAIN okumayı öğrenin: Yazdığınız her büyük sorgunun planını bakın. İndeks kullanılmıyorsa sebebini anlamaya çalışın.
- Mevcut bir sorguyu refactor edin: İş yerinde veya GitHub'da bulduğunuz uzun bir raporu CTE ile yeniden yazın.
Pratik konusunda klasik hata: aynı seviye soruları sürekli tekrarlamak. Günde 5 kolay soru yerine 2 orta zorluk soru daha öğreticidir. Resmi referans olarak PostgreSQL SQL Language dokümantasyonu yanınızda bulunsun — neyin standart, neyin lehçe-spesifik olduğunu ayırt etmenizi sağlar.
Sık Yapılan Hatalar
Yeni başlayanların düzenli olarak takıldığı yerler aşağı yukarı aynı. Bunları önceden bilmek aylar kazandırır:
- SELECT * kullanım alışkanlığı: Üretimde kolon adlarını açıkça yazmak hem performans hem bakım açısından şart.
- NULL karşılaştırması:
= NULLyerineIS NULL. - JOIN'siz çoklu tablo: FROM cümlesine virgülle iki tablo koymak kartezyen çarpım üretir.
- GROUP BY eksik kolonu: SELECT'te olan ama aggregate fonksiyon içinde olmayan her kolon GROUP BY'da olmalı.
- İndeks varsayımı: Sorgunun hızlı çalışması indeks olduğu anlamına gelmez; EXPLAIN ile doğrulayın.
- String birleştirme karışıklığı: PostgreSQL'de
||, SQL Server'da+, MySQL'deCONCAT(). - Tarih formatı varsayımı: Lehçeden lehçeye değişir;
DATE '2026-06-01'en güvenli yazım.
Daha kapsamlı bir öğrenme yapısı kurmak ve gerçek senaryolar üzerinden ilerlemek isterseniz SQL eğitim sayfası içeriği konuları sıralı bir şekilde derleyen referans olarak kullanılabilir. Resmi MySQL Reference Manual da lehçe karşılaştırması için sık başvurulan kaynaklardan.
Sık Sorulan Sorular
SQL öğrenmek için programlama bilmek gerekir mi?
Hayır. SQL deklaratif bir dildir; "ne istediğinizi" söylersiniz, "nasıl getireceğini" veritabanı çözer. Döngü, koşul, fonksiyon yazma alışkanlığı olmadan da öğrenilir. Aksine, çoğu kişi SQL'i ilk programlama deneyimi olarak öğrenip sonra Python veya JavaScript'e geçer çünkü mantıksal düşünmeyi alıştırır.
SQL öğrenirken hangi kaynak en faydalıdır?
Tek bir kaynak yok; karışım gerekli. Konuyu okumak için bir kitap (örneğin Alan Beaulieu - Learning SQL), pratik için interaktif platform (LearnSQL, StrataScratch), referans için resmi dokümantasyon. Video tek başına yetersiz; klavyede sorgu yazılmadan kavramlar oturmaz.
SQL ile MySQL veya PostgreSQL arasındaki fark nedir?
SQL bir dildir, MySQL ve PostgreSQL ise o dili uygulayan veritabanı sistemleridir. Temel sözdizimi büyük oranda ortaktır; her sistem kendi lehçesini ekler. PostgreSQL standart SQL'e daha yakındır; MySQL bazı yerlerde gevşek davranır. Birini öğrenince diğerine geçmek bir hafta sürer.
SQL öğrendikten sonra hangi iş alanlarında çalışılabilir?
Veri analisti, raporlama uzmanı, BI geliştirici, veri mühendisi, backend geliştirici, DBA, dijital pazarlama analisti gibi geniş bir yelpazede SQL doğrudan kullanılır. Hatta finans, lojistik ve sağlık gibi sektörlerdeki birçok ürün yönetimi rolünde de temel SQL bilgisi beklenir. Tek başına bir iş değil, çoğu işin alt katmanı.
SQL'i sadece izleyerek öğrenebilir miyim?
Hayır, gerçekçi değil. Video izlerken "anladım" hissi yanıltıcıdır; sorgu yazmaya oturunca sözdizimi, mantıksal sıra, NULL davranışı gibi detaylar tek tek karşınıza çıkar. Bir saatlik izleme yerine 20 dakika izleyip 40 dakika alıştırma yapmak çok daha kalıcı.
NoSQL varken SQL öğrenmek anlamlı mı?
Çok anlamlı. NoSQL belirli senaryolarda (ölçek, esnek şema, döküman tabanlı veri) güçlüdür ama ilişkisel modelin gücünü değiştirmez. Bir startup bile çoğunlukla PostgreSQL ile başlar. Ayrıca NoSQL sistemlerinin büyük kısmı (Cassandra CQL, MongoDB Aggregation, BigQuery SQL) SQL benzeri arayüzler sunar; temel SQL bilgisi her yerde işe yarar.
Window function öğrenmeden SQL bilgim eksik mi sayılır?
İş analizi yapacaksanız evet, eksik. Window function olmadan birçok raporlama sorusu üç-dört aşamalı geçici tablo veya iç içe subquery ile çözülür; window function ile tek sorgu yeterli olur. Mülakatlarda da orta-üst seviye SQL pozisyonlarının ayırt edici sorusu genelde bu konudan gelir.
SQL öğrenmek bir maraton değil, üst üste konan tuğlalardan oluşan bir duvar. Temel SELECT ile başlayıp JOIN ile birleştirip, aggregation ile özetleyip window function ile analitik hale getirdiğinde dil artık size çalışmaya başlar. Sonrasında öğrenmeye devam edersiniz — indeks tasarımı, transaction izolasyonu, replication, performans tuning — ama bu noktadan itibaren öğrenme bağımsız, kişisel ve kendi projelerinizle pekişen bir süreç olur.



