SQL VERİ OKURYAZARLIĞI

SQL veritabanı silindiri yanında üç basamaklı seviye merdiveni ile veri okuryazarlığı kavramı

Veri okuryazarlığının pratik tanımı şudur: bir karar destek toplantısında "bu sayı nereden geliyor" sorusuna anlamlı cevap verebilmek. Sorunun cevabı genelde tek bir SQL sorgusunun arkasında saklı. Bu sorguyu okuyabilen kişi sayının arkasını bilir; okuyamayan kişi rakama güvenmek zorunda kalır.

Yazılım geliştirici olmayanların — analist, raportör, finans uzmanı, ürün yöneticisi — SQL bilmesi, kurumsal hayatta veriyle ilgili "ben anlamam" pozisyonunu kıran beceri. Üç ay düzenli pratik bir uzmanı analist-üstü pozisyona taşıyor.

Veri Okuryazarlığı Ne Demek?

Veri okuryazarlığı sadece "Excel pivot tablo kullanmak" değil. Üç katmanlı bir beceri seti:

  • Veriyi anlama: Tablodaki kolonların ne anlattığını, ölçü birimini, kapsamını çözebilmek
  • Veriyi sorgulama: Bir iş sorusunu sorguya çevirmek; doğru filtre, doğru gruplama, doğru özet
  • Veriyi yorumlama: Sonuçtan bir karara, bir aksiyona ulaşmak

SQL bu üç katmanın ortasında. Sorguyu yazabilen kişi otomatik olarak veriyi anlama disiplinini de geliştiriyor; sonucu yorumlama becerisi de SQL pratiğiyle keskinleşiyor.

Tablo Mantığını Okumak

SQL öğrenmenin ilk adımı tabloları anlamak. Her tablonun belirli bir "konusu" vardır:

  • Olay tabloları: Bir şeyin olduğunu kaydeder. Siparişler, ödemeler, tıklamalar.
  • Varlık tabloları: Bir şeyin var olduğunu kaydeder. Müşteriler, ürünler, çalışanlar.
  • Bağlantı tabloları: Çoka-çok ilişkileri yönetir. Ürün-Kategori, Çalışan-Proje.

Yeni bir veritabanı önünde sorulması gereken ilk soru: "Her tablonun her satırı neyi temsil ediyor?" Bu cevabı netleştirmeden yazılan sorgular karmaşaya gidiyor. Satış raporunda yanlış granülerlik (sipariş başına mı, ürün satırı başına mı) çoğu yanlış metriğin kaynağı.

SELECT'in Mantığı

SQL'in en temel komutu SELECT şu mantıkta okunur:

SELECT -- hangi kolonları gör
FROM -- hangi tablodan
WHERE -- hangi satırları (koşula göre)
GROUP BY -- nasıl gruplandır
HAVING -- grup sonrası filtre
ORDER BY -- nasıl sırala

Ama SQL'in çalışma sırası farklı: önce FROM, sonra WHERE, GROUP BY, HAVING, SELECT, sonunda ORDER BY. Bu sıra bilgisi WHERE ve HAVING'in farkını anlamayı kolaylaştırıyor.

JOIN: Tabloları Birleştirmek

İş sorularının çoğu tek tabloda cevaplanmıyor. "Geçen ay en çok satın alan müşterilerimizin il dağılımı" sorusu üç tabloyu birleştiriyor: Müşteriler, Siparişler, İl.

Dört JOIN tipi var, ama günlük kullanımda iki tanesi yetiyor:

  • INNER JOIN: İki tarafta eşleşen satırlar. Müşteri ID'si hem olay hem varlık tablosunda olmalı.
  • LEFT JOIN: Soldaki tablonun tüm satırları, sağdan eşleşen veya NULL. "Müşterisi olup sipariş vermeyenleri bul" tipi sorularda kullanılır.

RIGHT JOIN ve FULL OUTER JOIN nadiren kullanılır; LEFT JOIN ile tabloları ters çevirerek aynı sonuca ulaşılabilir.

Kanal bazında ciro ortalama ve adet metriklerini özetleyen Türkçe başlıklı agregasyon sonuç tablosu

Agregasyon: Veriyi Özetlemek

Tek tek satırlara bakmak yerine özetlenmiş bilgi istendiğinde GROUP BY ve aggregate fonksiyonlar devreye girer:

SELECT
 kanal,
 COUNT(*) AS siparis_sayisi,
 SUM(tutar) AS toplam_ciro,
 AVG(tutar) AS ortalama_sepet,
 MAX(tutar) AS en_yuksek_sipariş
FROM siparisler
WHERE durum = 'Tamamlandi'
GROUP BY kanal
ORDER BY toplam_ciro DESC;

Bu sorgu kanal bazında özet üretir. Her kanal için kaç sipariş, toplam ciro, ortalama sepet ve en yüksek tek sipariş. Bu konunun güncel ayrıntıları Wikipedia'nın SQL sayfasında yer alır. Tek bir sorguda dört farklı metrik. Excel'de bunlar dört ayrı pivot tablo olur; SQL'de tek query.

Doğru Soruyu Sormak

SQL öğrenmenin teknik kısmı kolay; zor olan iş sorusunu doğru sorgu cümlesine çevirmek. Yöneticinin "satışlar nasıl gidiyor" sorusu üç farklı sorguya yol açabilir:

  • Aylık satış trendi (zaman bazlı)
  • Kanal bazlı satış dağılımı (kategori bazlı)
  • Geçen yıla göre büyüme (kıyas bazlı)

Doğru cevap "hangisi sorulmuş" değil "hangisi cevap veriyor" sorusuna bağlı. Veri okuryazarlığı bu üç olası soruyu görebilmek, hangisinin gerçek ihtiyacı karşıladığını yakalamak.

NULL ve Veri Kalitesi

Gerçek hayat verisinde NULL değerler kaçınılmaz. Müşteri adresi eksik, sipariş notu boş, telefon numarası yazılmamış. SQL'de NULL'a dikkat etmek veri okuryazarlığının önemli kısmı.

İki kritik nokta:

  • NULL "boş" değildir, "bilinmeyen" değer. = NULL kullanılmaz; IS NULL kullanılır.
  • Aggregate fonksiyonlar NULL'u atlar. AVG sadece NULL olmayan değerlerin ortalamasını alır; sonuç gerçek ortalama olmayabilir.

"Ortalama sipariş tutarı 1500" rakamı, NULL tutarlar varsa yanıltıcı olabilir. Veri kalitesi kontrolü ayrı bir disiplin; ama temel bilinç (NULL nasıl davranıyor) her analistin sahip olması gereken bilgi.

Performans Bilinci

SQL öğrenmenin orta seviyesinde sorgu performansı kavramı geliyor. Aynı sonucu veren iki sorgu, biri saniyede, diğeri dakikalarda çalışıyor olabilir. Fark:

  • Index'ler kullanılıyor mu?
  • SELECT * yerine sadece ihtiyaç duyulan kolonlar mı seçildi?
  • JOIN sırası optimum mu?
  • Subquery yerine CTE veya direkt join kullanıldı mı?

Bu detaylar üretim sistemlerinde önemli. Veri ambarında saniyede dönen sorgu, üretim DB'sinde 5 dakika sürüp diğer kullanıcıları engelleyebilir. Performans bilinci ileri seviye veri okuryazarlığı işareti. Pratik SQL ve veri okuryazarlığını sistematik geliştirmek isteyenlere yönelik bir SQL öğrenme kaynağı, veri analizi öğrenme kaynağı ile birlikte kullanıldığında gerçek raporlama senaryolarıyla bu becerileri kazandırıyor.

Sıkça Sorulan Sorular

Programlama bilmeyen biri SQL öğrenebilir mi?

Evet, SQL programlama dili değil — bir tarif dili. 'Şu tablodan, şu koşulu sağlayan satırları, şu sırayla getir' diyen cümleler yazılıyor. Programlama bilgisi avantaj sağlar ama gerek değil. Pivot tablo bilen herkes 4-6 hafta içinde temel SQL'i öğreniyor; iş hayatında doğrudan kullanmaya başlıyor.

SQL öğrenmek için hangi veritabanı tercih edilmeli?

PostgreSQL ve SQLite başlangıç için ideal. PostgreSQL ücretsiz, güçlü, hayatta yaygın kullanılan tüm özellikleri var. SQLite tek dosya, kurulum gerektirmiyor — pratik için hızlı başlangıç. Pratik amaç şirkette hangi DB var ise onunla başlamak; SQL temel söz dizimi tüm sistemlerde benzer.

İş sorusunu sorguya çevirmek neden zor?

Yöneticilerin sorusu çoğu zaman muğlak: 'satışlar nasıl' veya 'müşteri durumu ne'. Bu sorular farklı SQL sorgularına dönüşebilir. Veri okuryazarlığının asıl beceri kısmı: önce 'ne öğrenmek istiyorsun' diye netleştirmek, sonra doğru filtre/gruplama ile sorguyu kurmak. Bu beceri pratikle gelişir, kitap okuyarak değil.

JOIN tiplerinden hangisini öğrenmek yeterli?

INNER JOIN ve LEFT JOIN günlük kullanımın %95'ini kapsıyor. RIGHT JOIN ve FULL OUTER JOIN nadiren gerekir; LEFT JOIN ile tabloları ters çevirip aynı sonuca ulaşmak mümkün. İki temel JOIN tipini iyi anlayan biri çoğu kurumsal raporu çözebilir. CROSS JOIN ise özel senaryolarda — kartezyen çarpım gerektiğinde — kullanılıyor.

WHERE ve HAVING arasındaki farkı nasıl anlamalı?

WHERE satır seviyesinde filtreleme yapar — gruplama öncesi. HAVING grup sonrasında filtre. 'Sipariş tutarı 100 TL üstü olanlar' WHERE; 'Toplam siparişi 10 binin üstündeki müşteriler' HAVING. Aggregate fonksiyon kullanan koşul HAVING'e gider; her satır için ayrı kontrol edilen koşul WHERE'a gider.

NULL ile çalışmak neden ekstra dikkat gerektirir?

NULL 'boş' değil 'bilinmeyen' anlamına gelir. = NULL ile karşılaştırma yapılmaz; IS NULL kullanılır. Aggregate fonksiyonlar NULL'u atlıyor; AVG hesabı NULL olan satırları yok sayıyor. Bu davranış raporlamada yanıltıcı sonuçlara yol açabilir; her metriğin NULL davranışı bilinçli düşünülmeli.

Veri okuryazarlığı için kaç ay yatırım yapmak gerekiyor?

3-4 ay düzenli pratik temel seviyeyi oluşturuyor. SELECT, WHERE, JOIN, GROUP BY öğrenilip iş raporlarına uygulanabiliyor. İleri seviye (window function, CTE, performans optimizasyonu) 6-12 ay arası pratikle geliyor. Sürekli kullanan bir analist için 1-2 yıl sonunda kurumsal seviyede sorgu yazabiliyor.