Yazılım

Sıfırdan İleri Seviyeye SQL Öğrenme Rehberi: Pratik Yol Haritası

Talha AslanTalha Aslan 15 dk okuma 1 görüntülenme

SQL öğrenme yol haritası nedir ve nereden başlamalısınız?

SQL öğrenme yol haritası, ilişkisel veritabanlarını sorgulamayı adım adım öğreten bir çalışma planıdır: önce SELECT, WHERE ve ORDER BY ile veri okursunuz, ardından JOIN ve GROUP BY ile tabloları birleştirir, sonra alt sorgu, CTE ve pencere fonksiyonlarına geçersiniz. Her adımı gerçek bir veri setinde pratikle pekiştirirsiniz.

Bu rehberde SQL öğrenme sürecini kendi masamdan anlatıyorum. 2012'den beri dijital pazarlama ve web projelerinde çalışıyorum; kampanya verisini, sipariş tablolarını ve CRM kayıtlarını her hafta SQL ile okuyorum. Bu nedenle size akademik bir müfredat değil, işte gerçekten kullandığım sırayı ve pratik platformlarını aktaracağım.

Mülakat soruları bu yazının konusu değil; burada yalnızca öğrenme sırasına ve alıştırma düzenine odaklanıyorum. Yazılım tarafındaki diğer yazılar için yazılım kategorisine göz atabilirsiniz.

SQL neden hâlâ öğrenmeye değer bir dil?

SQL, 1970'lerde IBM'de geliştirilen ilişkisel model fikrinden doğdu ve ANSI ile ISO tarafından standartlaştırıldı. Aradan geçen onca yıla rağmen PostgreSQL, MySQL, SQL Server, SQLite ve BigQuery gibi sistemlerin ortak dili olmaya devam ediyor. Dolayısıyla bir kez öğrendiğiniz temel sözdizimi, farklı araçlarda da büyük ölçüde işinize yarar.

Stack Overflow'un yıllık geliştirici anketinde SQL, uzun süredir en çok kullanılan diller arasında yer alıyor. Kesin oranı her yıl değiştiği için burada rakam vermiyorum; güncel tabloyu anketin resmi sayfasından kontrol edebilirsiniz.

Benim açımdan asıl gerekçe daha pratik. Örneğin bir e-ticaret sitesinde hangi kategorinin tekrar satın aldırdığını ya da hangi kampanyanın iade oranını artırdığını panel ekranları size tam söylemez. Ham tabloya soru sorabildiğinizde ise cevabı kendiniz bulursunuz. Üstelik başkasının hazırladığı rapora bağımlılığınız azalır.

SQL öğrenme sürecine başlamadan önce neyi kurmalısınız?

Başlangıç için ağır bir kurulum gerekmez. Bence en temiz yol, tek dosyalık SQLite ile başlamak ve birkaç hafta sonra PostgreSQL'e geçmektir. SQLite sunucu istemez; bir dosya açarsınız ve sorgu yazmaya başlarsınız.

  • SQLite ve DB Browser for SQLite: Kurulumu dakikalar sürer, tabloları görsel olarak da incelersiniz.
  • PostgreSQL ve pgAdmin ya da DBeaver: Gerçek bir sunucu deneyimi ve güçlü pencere fonksiyonları sunar.
  • Tarayıcı tabanlı alanlar: DB Fiddle veya SQLite'ın çevrim içi sürümleri, hiçbir şey kurmadan deneme yapmanızı sağlar.
  • Bir veri seti: Kendi satış dökümünüz, açık veri portalları veya Kaggle'daki CSV dosyaları iş görür.

Öte yandan araç seçimine haftalarca kafa yormayın. Temel sözdizimi büyük ölçüde aynı kalır; farklar tarih fonksiyonları, metin birleştirme ve sayfalama gibi ayrıntılarda çıkar. Bu yüzden ilk gün bir araç seçin ve ilk sorgunuzu yazın.

Veri seti seçerken de küçük başlayın. Birkaç bin satırlık, anlamını bildiğiniz bir tablo, milyonlarca satırlık yabancı bir veriden daha öğreticidir. Çünkü sonucun doğru olup olmadığını sezgiyle de kontrol edebilirsiniz. Örneğin kendi mağazanızın geçen ayki sipariş sayısını biliyorsanız, sorgunuz farklı bir rakam verdiğinde hatayı hemen fark edersiniz. Böylece sözdizimiyle birlikte doğrulama refleksini de ilk günden kazanırsınız.

İlk hafta hangi SELECT komutlarını öğrenmelisiniz?

İlk hafta yalnızca veri okumayı öğrenin. SELECT ile sütun seçer, FROM ile tabloyu belirtir, WHERE ile satırları süzersiniz. Ardından ORDER BY ile sıralar, LIMIT ile sonucu kısaltırsınız. Bu beş parça, günlük sorguların şaşırtıcı bir kısmını tek başına karşılar.

Örneğin SELECT urun_adi, fiyat FROM urunler WHERE fiyat > 500 ORDER BY fiyat DESC LIMIT 10; sorgusu size en pahalı on ürünü getirir. Bu cümleyi yüksek sesle okuduğunuzda neredeyse İngilizce bir soru gibi durur. SQL'in gücü de tam olarak buradan gelir.

  • Karşılaştırma işleçleri: =, <>, >, <, BETWEEN.
  • Liste ve desen: IN, LIKE ve büyük küçük harf duyarsız eşleşme için ILIKE (PostgreSQL).
  • Boş değer kontrolü: IS NULL ve IS NOT NULL.
  • Mantık işleçleri: AND, OR, NOT ve parantezle öncelik.

Ayrıca NULL mantığını erkenden kavrayın. NULL "boş metin" değil, "bilinmeyen" anlamına gelir; bu yüzden WHERE indirim = NULL hiçbir satır döndürmez. Bu tek ayrıntı, yeni başlayanların en sık takıldığı noktadır.

İlk haftanın sonunda kendinize küçük bir sınav yapın. Bir tablo açın, aklınıza gelen beş soruyu yazın ve her birini yalnızca bu komutlarla cevaplayın. Takıldığınız soru, ikinci haftanın gündemini belirler; böylece plan size göre şekillenir.

Toplama fonksiyonları ve GROUP BY size ne kazandırır?

İkinci adımda satırları özetlemeyi öğrenirsiniz. COUNT, SUM, AVG, MIN ve MAX fonksiyonları, binlerce satırı tek bir sayıya indirir. GROUP BY ise bu özeti kategori, şehir ya da ay gibi gruplara böler. Böylece "hangi kanal ne kadar ciro getirdi" sorusunu tek sorguyla yanıtlarsınız.

Burada en önemli fark WHERE ile HAVING arasındadır. WHERE, gruplamadan önce satırları süzer; HAVING ise gruplamadan sonra grupları süzer. Yani "toplam cirosu 10.000'in üzerindeki kategoriler" dediğinizde HAVING kullanırsınız.

Bir de yürütme sırasını aklınızda tutun: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. Yazdığınız sıra ile veritabanının işlediği sıra aynı değildir. Bu nedenle SELECT içinde verdiğiniz bir takma adı WHERE içinde kullanamazsınız. Bu kuralı bildiğinizde hata mesajları birden anlamlı hâle gelir.

Pazarlama tarafında bu adım hemen karşılığını verir. Örneğin reklam harcamasını ve siparişleri kanala göre gruplayıp oranladığınızda, ROAS hesaplayıcısında tek tek girdiğiniz hesabı tüm tabloya bir anda uygularsınız.

JOIN türlerini hangi sırayla öğrenmelisiniz?

Gerçek veritabanları tek tablodan oluşmaz; müşteri, sipariş ve ürün ayrı tablolarda durur. JOIN, bu tabloları ortak bir anahtar üzerinden birleştirir. Önce INNER JOIN, ardından LEFT JOIN, en son da FULL OUTER JOIN ve kendine birleştirme (self join) üzerinde çalışmanızı öneririm.

JOIN türüNe döndürür?Tipik kullanım
INNER JOINİki tabloda da eşleşen satırlarSiparişi olan müşteriler
LEFT JOINSoldaki tüm satırlar, eşleşme yoksa NULLHiç sipariş vermeyen müşterileri bulmak
RIGHT JOINSağdaki tüm satırlarNadiren gerekir, LEFT JOIN ile yeniden yazılabilir
FULL OUTER JOINİki taraftaki tüm satırlarİki kaynak listeyi uzlaştırmak
CROSS JOINHer satırın her satırla eşleşmesiTarih ve ürün iskeleti üretmek
SELF JOINTablonun kendisiyle eşleşmesiYönetici ve çalışan ilişkisi

Özellikle LEFT JOIN ile WHERE birlikte kullanıldığında dikkatli olun. Sağ tablodaki bir sütunu WHERE içinde süzerseniz, LEFT JOIN sessizce INNER JOIN gibi davranır. Bu yüzden koşulu ON bölümüne taşımak çoğu zaman doğru çözümdür.

Birleştirme yaparken satırlar neden çoğalır?

Yeni başlayanların en pahalı hatası, satır çoğalmasıdır. Bir siparişin birden çok kalemi varsa ve siz siparişleri kalemlerle birleştirip ardından sipariş tutarını toplarsanız, aynı tutarı kalem sayısı kadar sayarsınız. Rapor büyük görünür, ama gerçek değildir.

Bunu önlemek için birleştirmeden önce her tablonun "bir satır neyi temsil ediyor" sorusuna cevap verin. Buna tablo taneciği (grain) denir. Ayrıca birleştirmeden önce ve sonra COUNT(*) alıp karşılaştırmak, sorunu saniyeler içinde gösterir.

Kendi projelerimde bu kontrolü alışkanlık hâline getirdim. Örnek bir senaryo düşünün: sipariş tablosunu ödeme kayıtlarıyla birleştirirsiniz, ama bazı siparişler iki taksitle ödenmiştir. Bu durumda o siparişlerin tutarı iki kez sayılır. Çözüm basittir: ödemeleri önce sipariş bazında toplarsınız, sonra birleştirirsiniz. Kısacası birleştirmeden önce özetlemek, çoğu zaman en güvenli yoldur.

Bu disiplin, raporların güvenilirliğini doğrudan etkiler. Sayılara nasıl bakmanız gerektiğini dijital pazarlama raporu nasıl okunur yazısında ayrıca anlattım.

Alt sorgu ve CTE ne zaman devreye girer?

Orta seviyeye geçtiğinizde tek bir SELECT yetmez; bir sorgunun sonucunu başka bir sorguda kullanmak istersiniz. Alt sorgu (subquery) bunu parantez içinde yapar. Örneğin ortalama fiyatın üzerindeki ürünleri bulmak için WHERE içinde ortalamayı hesaplayan küçük bir sorgu yazarsınız.

Ancak iç içe alt sorgular hızla okunmaz hâle gelir. Burada CTE, yani WITH ifadesi devreye girer. WITH ile her adıma bir ad verir, sorguyu yukarıdan aşağıya bir hikâye gibi okursunuz. Önce "aylık satışlar", sonra "aylık hedefler", en sonda da ikisinin karşılaştırması gelir.

Ayrıca EXISTS ile IN arasındaki farkı bu aşamada öğrenin. NOT IN, alt sorgu NULL içerdiğinde beklenmedik biçimde boş sonuç döndürebilir; NOT EXISTS ise bu tuzağa düşmez. Bu nedenle "hiç sipariş vermeyen müşteriler" gibi sorularda NOT EXISTS'i tercih ederim.

Özyinelemeli CTE (WITH RECURSIVE) ise kategori ağaçları veya organizasyon şemaları gibi hiyerarşik veriler için vardır. İlk ayda buna girmeniz gerekmez, ama varlığını bilmek iyidir.

CASE WHEN ve metin, tarih fonksiyonları nasıl pekişir?

CASE WHEN, SQL içinde koşullu mantık kurmanızı sağlar. Örneğin sepet tutarına göre müşterileri "küçük", "orta" ve "büyük" diye etiketlersiniz. Ayrıca SUM(CASE WHEN ... THEN 1 ELSE 0 END) kalıbıyla tek sorguda birden çok koşullu sayım yaparsınız; bu kalıp pivot tabloların temelidir.

Tarih fonksiyonları ise veritabanına göre en çok değişen alandır. PostgreSQL'de DATE_TRUNC ile aya yuvarlarsınız; MySQL'de DATE_FORMAT, SQL Server'da DATETRUNC veya DATEPART kullanırsınız. Bu yüzden kendi sisteminizin belgesini yanınızda açık tutun.

  • Metin: LOWER, UPPER, TRIM, SUBSTRING, CONCAT ya da || işleci.
  • Tarih: CURRENT_DATE, tarih farkı, aya veya haftaya yuvarlama.
  • Tür dönüşümü: CAST ve PostgreSQL'e özgü :: sözdizimi.
  • Boş değer yönetimi: COALESCE ve NULLIF ile sıfıra bölme hatasından korunma.

Pazarlama verisinde en çok bu fonksiyonlarla uğraşırsınız. Örneğin UTM parametrelerini küçük harfe çevirmeden gruplarsanız "Instagram" ve "instagram" iki ayrı kanal görünür. Bu yüzden kampanya linklerini baştan tutarlı üretmek için UTM oluşturucu gibi bir araç kullanmak, sonradan yazacağınız SQL'i de sadeleştirir.

Pencere fonksiyonları nedir ve neden ileri seviyenin kapısıdır?

Pencere fonksiyonları, satırları tek sonuca indirmeden her satırın yanında bir hesap gösterir. GROUP BY satırları birleştirir; OVER ifadesi ise satırları korur ve yanlarına sıra numarası, önceki değer veya kümülatif toplam ekler. İleri seviye SQL öğrenme yolunun asıl eşiği budur.

Temel yapı şöyledir: fonksiyon, ardından OVER, parantez içinde de PARTITION BY ve ORDER BY. PARTITION BY pencereyi gruplara ayırır, ORDER BY o grubun içindeki sırayı belirler. PostgreSQL'in pencere fonksiyonları eğitimi bu mantığı sade örneklerle anlatır.

  • ROW_NUMBER, RANK, DENSE_RANK: Her kategoride en çok satan üç ürünü bulmak.
  • LAG ve LEAD: Bu ayın cirosunu geçen ayla aynı satırda karşılaştırmak.
  • SUM OVER ile kümülatif toplam: Yıl başından bugüne satış eğrisi.
  • AVG OVER ile hareketli ortalama: Günlük dalgalanmayı yumuşatmak.
  • NTILE: Müşterileri harcamaya göre dilimlere ayırmak.

Bir not daha ekleyeyim: pencere fonksiyonlarının sonucu WHERE içinde doğrudan süzülmez. Bu yüzden önce bir CTE içinde sıra numarasını hesaplar, dış sorguda "sira <= 3" diye filtrelersiniz.

Pencere çerçevesi (frame) ayarı neden önemlidir?

ORDER BY içeren bir pencerede varsayılan çerçeve, bölümün başından geçerli satıra kadar uzanır. Kümülatif toplam için bu tam istediğiniz şeydir. Buna karşın son yedi günün ortalamasını istiyorsanız çerçeveyi açıkça yazmanız gerekir: ROWS BETWEEN 6 PRECEDING AND CURRENT ROW.

ROWS ile RANGE arasındaki fark da burada önem kazanır. ROWS fiziksel satır sayısına bakar; RANGE ise sıralama değerine bakar ve aynı değere sahip satırları birlikte ele alır. Aynı tarihte birden çok satır varsa iki yöntem farklı sonuç verir. SQLite belgesindeki pencere fonksiyonları sayfası, çerçeve kurallarını ayrıntılı gösterir.

Ayrıca eksik günlere dikkat edin. Satış olmayan günler tabloda hiç yoksa "son 7 satır" aslında son 7 gün değildir. Bu durumda önce bir tarih iskeleti üretip LEFT JOIN ile satışları bağlarsınız. Böylece hareketli ortalamanız gerçekten takvime göre hesaplanır.

Veri değiştirme ve tablo tasarımını ne zaman öğrenmelisiniz?

Analiz odaklı öğreniyorsanız INSERT, UPDATE ve DELETE komutlarını okuma becerisinden sonra öğrenmek daha güvenlidir. Çünkü yanlış bir UPDATE, WHERE koşulu unutulduğunda tüm tabloyu değiştirir. Bu yüzden değiştirme komutlarını her zaman önce bir SELECT ile deneyin, sonra aynı koşulu UPDATE'e taşıyın.

İşlem (transaction) mantığı da bu aşamaya aittir. BEGIN ile başlar, sonucu kontrol eder, beğenirseniz COMMIT, beğenmezseniz ROLLBACK dersiniz. Bu alışkanlık canlı sistemlerde sizi büyük hatalardan korur.

Tablo tasarımında ise birincil anahtar, yabancı anahtar, NOT NULL ve UNIQUE kısıtlarını öğrenin. Normalizasyonu üçüncü normal forma kadar kavramak çoğu iş için yeterlidir. Öte yandan analiz tablolarında bilinçli tekrar (denormalizasyon) da sık görülür; hangisinin ne zaman uygun olduğunu bilmek, ezberden daha değerlidir.

Uygulama tarafında veritabanı tasarımı, sitenin mimarisiyle birlikte düşünülür. Büyük sistemlerin nasıl parçalara ayrıldığını merak ediyorsanız micro frontend yazısına bakabilirsiniz.

İndeks ve sorgu planı ileri seviyede neden şarttır?

Doğru sonucu veren bir sorgu, büyük tabloda dakikalarca sürebilir. İndeks, veritabanının aradığı satırlara tüm tabloyu taramadan ulaşmasını sağlar. Ancak her sütuna indeks eklemek çözüm değildir; yazma işlemlerini yavaşlatır ve disk kaplar.

Performansı anlamanın yolu sorgu planını okumaktır. PostgreSQL'de EXPLAIN ve EXPLAIN ANALYZE, veritabanının sorguyu nasıl çalıştırdığını gösterir. PostgreSQL belgesinin EXPLAIN kullanımı bölümü, sıralı tarama ile indeks taramasının farkını açıklar.

  • WHERE içinde sütunu bir fonksiyona sararsanız indeks çoğu zaman kullanılmaz.
  • SELECT * yerine ihtiyacınız olan sütunları seçin.
  • Büyük tablolarda önce süzüp sonra birleştirin.
  • Bulut depolarda (BigQuery gibi) taranan veri miktarı maliyete doğrudan yansır.

Web tarafındaki hız sorunlarının bir kısmı da yavaş sorgulardan gelir. Sayfa hızının SEO etkisini merak ediyorsanız site hızı SEO'yu nasıl etkiler yazısı iyi bir başlangıçtır.

Hangi pratik platformları hangi aşamada kullanmalısınız?

SQL öğrenme sürecinde okumak tek başına yetmez; klavyeye dokunmadığınız bilgi bir hafta içinde silinir. Aşağıdaki tablo, platformları seviyeye göre eşleştirir. Ücret ve içerik koşulları değişebildiği için kayıt olmadan önce güncel durumu kontrol edin.

PlatformSeviyeGüçlü yanı
SQLBoltBaşlangıçKısa, etkileşimli dersler ve anında geri bildirim
SQLZooBaşlangıç ve ortaKonu bazlı alıştırma setleri
PostgreSQL Exercises (pgexercises.com)OrtaTek bir kulüp veritabanında giderek zorlaşan sorular
HackerRank SQLBaşlangıçtan ileriyeZorluk etiketli problemler
LeetCode veritabanı sorularıOrta ve ileriPencere fonksiyonu ağırlıklı problemler
Kaggle veri setleriTüm seviyelerGerçekçi, dağınık veri
DB FiddleTüm seviyelerKurulumsuz deneme ve paylaşım

Benim önerim şudur: ilk iki haftayı SQLBolt ve SQLZoo ile geçirin, üçüncü haftada pgexercises'a geçin, pencere fonksiyonlarında ise LeetCode sorularıyla kas hafızası kazanın. Ancak bunların hepsi hazır ve temiz veridir. Asıl ustalığı dağınık, gerçek veriyle kazanırsınız.

Kendi verinizle nasıl proje kurarsınız?

Alıştırma sitelerinde soru hazırdır; iş hayatında ise soruyu siz bulursunuz. Bu yüzden öğrenmenin ikinci yarısını kendi projenize ayırın. İşletmeniz varsa sipariş dökümü, yoksa açık bir veri seti yeterlidir.

  1. Bir CSV dosyasını SQLite veya PostgreSQL'e aktarın ve sütun türlerini düzeltin.
  2. Veriyi temizleyin: boşlukları kırpın, tarihleri tek biçime getirin, tekrar eden satırları bulun.
  3. Üç iş sorusu yazın; örneğin "hangi ay en çok yeni müşteri geldi?"
  4. Her soruyu önce basit, sonra CTE ve pencere fonksiyonlarıyla yeniden çözün.
  5. Sonuçları bir tabloya veya grafiğe dökün ve bir paragrafla yorumlayın.

Örneğin bir mağazanın siparişlerinden kohort analizi çıkarmak iyi bir hedeftir: müşterileri ilk sipariş ayına göre gruplar, sonraki aylarda kaçının geri döndüğünü sayarsınız. Bu tek proje, JOIN, GROUP BY, tarih fonksiyonları ve pencere fonksiyonlarını aynı anda çalıştırır.

E-ticaret verisiyle çalışıyorsanız hangi metriklerin önemli olduğunu önce netleştirin. Bunun için dijital pazarlama KPI'ları yazısı soru listenizi zenginleştirir.

Sıfırdan ileri seviyeye örnek bir haftalık plan nasıl görünür?

Aşağıdaki plan, günde bir saat ayırabilen biri için yazıldı. Bu süre saha tecrübesine dayalı bir başlangıç aralığıdır, garanti değildir; önceki programlama deneyiminiz ve ayırdığınız zaman süreyi değiştirir.

HaftaKonuPratik hedefi
1SELECT, WHERE, ORDER BY, LIMIT, NULLSQLBolt ilk dersleri
2Toplama fonksiyonları, GROUP BY, HAVINGSQLZoo toplama setleri
3JOIN türleri ve satır çoğalmasıpgexercises birleştirme bölümü
4Alt sorgu, EXISTS, CTEKendi verinizde üç iş sorusu
5CASE WHEN, metin ve tarih fonksiyonlarıVeri temizleme ve pivot
6Pencere fonksiyonları ve çerçeveSıralama, LAG ve hareketli ortalama
7Veri değiştirme, işlem, tablo tasarımıKüçük bir şema kurmak
8İndeks ve EXPLAINYavaş bir sorguyu hızlandırmak

Planı katı bir takvim olarak görmeyin. Bir konuyu kendi verinizde üç farklı soruyla çözemiyorsanız bir sonraki haftaya geçmeyin. Böylece ilerleme hızınız değil, kalıcılığınız artar.

SQL öğrenme sırasında en sık hangi hataları yaparsınız?

Yıllar içinde ekip arkadaşlarımda ve kendimde gördüğüm hatalar büyük ölçüde aynı. Bunları önceden bilmek, size haftalar kazandırır.

  • Sözdizimini ezberleyip veriyi tanımamak: önce tabloya ve satırın neyi temsil ettiğine bakın.
  • Satır çoğalmasını fark etmemek: birleştirme öncesi ve sonrası satır sayısını karşılaştırın.
  • NULL ile eşitlik karşılaştırması yapmak: IS NULL kullanın.
  • Her şeyi tek dev sorguya sıkıştırmak: CTE ile adımlara bölün.
  • Yalnızca alıştırma sitelerinde kalmak: gerçek ve dağınık veriyle proje yapın.
  • Sonucu doğrulamamak: toplamları bilinen bir kaynakla, örneğin muhasebe veya panel verisiyle karşılaştırın.

Son madde özellikle önemlidir. Sorgu hatasız çalıştı diye sonuç doğru olmaz. Ben her yeni raporda en az bir toplamı bağımsız bir kaynakla eşleştiririm; tutmuyorsa sorguyu değil, önce varsayımımı sorgularım.

SQL lehçeleri arasındaki farklar öğrenmeyi zorlaştırır mı?

Pek zorlaştırmaz, ama baştan bilmeniz iyi olur. Her veritabanı standarda kendi eklerini yapar; bu eklere lehçe denir. SELECT, JOIN, GROUP BY ve pencere fonksiyonlarının çekirdeği neredeyse her yerde aynıdır. Farklar daha çok kenar noktalarda çıkar.

KonuPostgreSQLMySQLSQL Server
Satır sınırlamaLIMITLIMITTOP veya OFFSET FETCH
Metin birleştirme|| veya CONCATCONCAT+ veya CONCAT
Aya yuvarlamaDATE_TRUNCDATE_FORMATDATETRUNC (yeni sürümler)
Büyük küçük harf duyarsız aramaILIKEHarmanlamaya bağlı LIKEHarmanlamaya bağlı LIKE

Bu yüzden bir lehçede sağlam temel atın, sonra diğerine geçerken yalnızca farkları not edin. Ben kendi notlarımda "PostgreSQL'de böyle, MySQL'de şöyle" diye kısa bir karşılık listesi tutarım. Böylece yeni bir projede sistemi değiştirdiğimde bir saat içinde uyum sağlarım.

Öğrendiklerinizi nasıl kalıcı hâle getirirsiniz?

Kalıcılığın sırrı tekrar ve açıklamadır. Çözdüğünüz her sorguyu kısa bir açıklamayla birlikte bir not dosyasına ya da Git deposuna kaydedin. Birkaç hafta sonra aynı soruyu notlara bakmadan yeniden çözmeye çalışın; takıldığınız yer, gerçekten öğrenmediğiniz yerdir.

Ayrıca öğrendiğinizi birine anlatın. Bir iş arkadaşınıza LEFT JOIN ile INNER JOIN farkını örnekle açıklayabiliyorsanız, konuyu kavramışsınız demektir. Açıklarken zorlanıyorsanız, o bölüme geri dönün.

Son olarak her hafta küçük bir "veri sorusu" alışkanlığı edinin. Örneğin pazartesi sabahı "geçen hafta hangi ürün ilk kez sipariş aldı?" diye sorun ve SQL ile cevaplayın. Bu küçük rutin, aylar içinde sizi alıştırma çözen birinden veriyle düşünen birine dönüştürür.

Yapay zekâ araçları SQL öğrenmeyi gereksiz kılar mı?

Hayır, ama öğrenme biçimini değiştirir. Bugün bir yapay zekâ asistanına doğal dille soru sorup SQL taslağı alabilirsiniz. Ancak taslağın doğru tabloyu, doğru birleştirmeyi ve doğru taneciği kullandığını anlamak için SQL bilmeniz gerekir.

Benim gözlemim şu: asistanlar sözdizimini hızla üretir, fakat işin bağlamını bilmez. Örneğin iptal edilen siparişlerin ciroya dahil edilip edilmeyeceğine siz karar verirsiniz. Dolayısıyla asistanı bir öğretmen ya da taslak yazarı olarak kullanın; her sorguyu okuyun, küçük bir örnekle test edin ve neden çalıştığını açıklayabildiğinizden emin olun.

Üstelik iyi bir yöntem de var: önce sorguyu kendiniz yazın, sonra asistandan alternatif isteyin ve farkları karşılaştırın. Böylece hem hızlanırsınız hem de öğrenme kaslarınızı zayıflatmazsınız. Yapay zekânın aramadaki etkisini ayrıca yapay zekâ çağında SEO yazısında tartıştım.

SQL bilgisi dijital pazarlama ve SEO işinde nasıl kullanılır?

Pazarlama ekiplerinde SQL, panellerin cevap veremediği soruları cevaplar. GA4 verisini BigQuery'ye aktardığınızda olay düzeyindeki ham kayıtlara SQL ile erişirsiniz. Google'ın GA4 yardım belgeleri bu dışa aktarımın ayarlarını anlatır; özel huni ve kohort analizlerini ise siz yazarsınız.

SEO tarafında da benzer bir durum vardır. Search Console verisini toplu dışa aktarımla BigQuery'ye gönderdiğinizde sorgu ve sayfa düzeyindeki verileri kendi kurallarınızla gruplarsınız. Bu konuda temel bilgiler için Google Search Console rehberine bakabilirsiniz.

Müşterilerimle yürüttüğüm SEO danışmanlığı ve e-ticaret danışmanlığı çalışmalarında da SQL, tahmin yerine ölçümle konuşmamı sağlar. Kısacası SQL öğrenme yatırımı yalnızca yazılımcılar için değildir; veriyle karar veren herkes için geri döner.

İleri seviyeye ulaştığınızı nasıl anlarsınız?

İleri seviye, bilinen komut sayısıyla ölçülmez. Aşağıdaki işleri başka kaynağa bakmadan ve sonucu doğrulayarak yapabiliyorsanız, sağlam bir yere gelmişsiniz demektir.

  • Her kategoride en çok satan üç ürünü pencere fonksiyonuyla listelemek.
  • Aylık kohort tablosu ve tutma oranı çıkarmak.
  • Eksik günleri tamamlayıp yedi günlük hareketli ortalama hesaplamak.
  • Yavaş bir sorguyu EXPLAIN ile inceleyip hızlandırmak.
  • Satır çoğalmasını ilk bakışta fark edip düzeltmek.

Bundan sonraki adımlar alanınıza bağlıdır. Analiz tarafında dbt gibi dönüştürme araçlarına, uygulama tarafında ORM ve veritabanı yönetimine yönelebilirsiniz. Öte yandan hangi yolu seçerseniz seçin, temel disiplin aynı kalır: soruyu netleştirin, veriyi tanıyın, sonucu doğrulayın.

Verinizi işe yarar kararlara dönüştürmek için destek isterseniz hakkımda sayfasından çalışma biçimimi inceleyebilirsiniz.

Sıkça Sorulan Sorular

SQL öğrenmek ne kadar sürer?
Temel sorguları birkaç haftada öğrenebilirsiniz. Günde bir saat ayırırsanız SELECT, JOIN ve GROUP BY rahatlığı genellikle ilk ayda gelir; pencere fonksiyonları ve performans ise birkaç ay daha ister. Bu süre saha tecrübesine dayalı bir aralıktır, garanti değildir; asıl belirleyici gerçek veriyle yaptığınız pratik miktarıdır.
SQL öğrenmek için programlama bilmem gerekir mi?
Hayır, gerekmez. SQL bildirimsel bir dildir; ne istediğinizi yazarsınız, nasıl bulunacağına veritabanı karar verir. Bu yüzden döngü veya fonksiyon bilgisi olmadan başlayabilirsiniz. Yine de mantıksal düşünme ve tablo yapısını kavrama becerisi işinizi hızlandırır; Excel deneyimi olanlar genellikle daha kolay ilerler.
Hangi veritabanıyla başlamalıyım?
Başlangıç için SQLite, ardından PostgreSQL öneririm. SQLite kurulum gerektirmeden tek dosyayla çalışır ve temel sözdizimini rahatça öğretir. PostgreSQL ise standarda yakınlığı, güçlü pencere fonksiyonları ve ayrıntılı belgeleriyle ileri seviyeye taşır. Öğrendiğiniz temel komutlar MySQL ve SQL Server'da da büyük ölçüde geçerlidir.
Pencere fonksiyonlarını ne zaman öğrenmeliyim?
JOIN, GROUP BY ve CTE konularında rahatladıktan sonra öğrenmelisiniz. Pencere fonksiyonları bu üç kavramın üzerine kurulur; özellikle PARTITION BY mantığı GROUP BY bilgisini gerektirir. Erken başlarsanız ezbere kaçarsınız. Genellikle öğrenme sürecinin ikinci ayında bu konuya geçmek, çoğu kişi için dengeli bir tempodur.
Ücretsiz kaynaklar SQL öğrenmeye yeter mi?
Evet, çoğu kişi için yeter. SQLBolt, SQLZoo, pgexercises ve veritabanlarının resmi belgeleri temelden ileri seviyeye kadar sağlam bir yol sunar. Ücretli kurslar düzen ve geri bildirim sağlar, ama zorunlu değildir. Asıl fark yaratan şey, kendi veya açık bir veri setiyle gerçek sorular çözmenizdir.
Yapay zekâ SQL yazarken ne kadar güvenilir?
Taslak için faydalıdır, ama kontrolsüz kullanılmamalıdır. Asistanlar sözdizimini hızlı üretir, fakat tablo ilişkilerini, iş kurallarını ve satır çoğalması riskini her zaman doğru kurmaz. Her sorguyu okuyun, küçük bir veriyle test edin ve toplamı bilinen bir kaynakla karşılaştırın. Böylece hızdan yararlanır, hatadan korunursunuz.
#sql#sql öğrenme#veritabanı#pencere fonksiyonları#postgresql#veri analizi
Paylaş:
Talha Aslan
Talha Aslan

Google Partner dijital pazarlama uzmanı. 2012’den beri SEO, Google Ads, web tasarım ve e-ticaret projelerinde sahada; bu blogda gördüğünüz her yazı o deneyimden çıkar.

Sıradaki proje

Projenizi konuşalım.

Aracı yok, katman yok: doğrudan işi yapacak uzmanla konuşursunuz. İlk istişare ücretsizdir; hedefinizi dinler, net bir yol haritasıyla dönerim.

WhatsApp Hemen Ara