Modül 1 · Container & Temel Altyapı · ⏱ 7 dk

SQL'in ABC'si: SELECT, WHERE, GROUP BY

SQL ABCs

Bu derste neler öğreneceksin

  • SELECT ile sütun seçer
  • WHERE ile filtreler
  • GROUP BY ile gruplar

SQL’in ABC’si: SELECT, WHERE, GROUP BY, ORDER BY

Veritabanı bir dosya dolabı değil. Ona sadece “şu kaydı getir” demezsin, soru sorarsın. SQL bu soruların dilidir. Bir veri mühendisi olarak SQL senin en çok kullandığın beceri — günde 50-100 sorgu yazmak normal. O yüzden temelleri şimdiden sağlam at.

Bugün dört temel cümle öğreneceğiz: SELECT, WHERE, GROUP BY, ORDER BY. Bunlar veri analizinin %80’idir.

SELECT: Neyi Görüyorum?

En basit sorgu: hepsini getir.

SELECT * FROM musteriler;

* “tüm sütunlar” demek. Ama production’da * kullanma. Neden? Çünkü yarın biri tabloya 50 sütun eklerse senin sorgun patlar ya da gereksiz veri çeker. Açıkça iste:

SELECT id, isim, icecek, fiyat FROM musteriler;

Sütunlara alias verebilirsin:

SELECT
  isim          AS musteri_adi,
  fiyat         AS birim_fiyat,
  fiyat * 1.20  AS kdv_dahil
FROM musteriler;

Hesaplanmış sütunlar bu şekilde yazılır. fiyat * 1.20 KDV dahil fiyat verir.

WHERE: Filtrele

Veri azsa hepsini görmek sorun değil, ama milyon satır gelince filtrelemek zorunlu.

SELECT isim, icecek, fiyat
FROM musteriler
WHERE fiyat > 25.00;

Operatörler:

OperatörAnlam
=Eşit
<> veya !=Eşit değil
>, <, >=, <=Karşılaştırma
IN (...)Liste içinde
BETWEEN x AND yAralık
LIKE '...'Desen eşleşme
IS NULL / IS NOT NULLBoş kontrolü

Örnek:

-- 25 ile 35 arası fiyat
SELECT * FROM musteriler WHERE fiyat BETWEEN 25 AND 35;

-- "Limonata" ile başlayan içecekler
SELECT * FROM musteriler WHERE icecek LIKE 'Limonata%';

-- Birkaç isimden biri
SELECT * FROM musteriler WHERE isim IN ('Ayşe', 'Mehmet');

Birden fazla koşul:

SELECT *
FROM musteriler
WHERE fiyat > 25 AND icecek LIKE '%Limonata%';

AND kesişim, OR birleşim. Karmaşık koşullarda parantez kullan:

WHERE (fiyat > 30 OR icecek = 'Limonata') AND tarih >= '2026-01-01';

GROUP BY: Gruplayarak Hesapla

Bu SQL’in en güçlü ve en çok yanlış anlaşılan kısmı. Mantığı şu: aynı değere sahip satırları bir satıra indir, o satırda hesaplama yap.

SELECT
  icecek,
  COUNT(*)             AS adet,
  SUM(fiyat)           AS toplam_ciro,
  AVG(fiyat)           AS ortalama_fiyat,
  MIN(fiyat)           AS en_dusuk,
  MAX(fiyat)           AS en_yuksek
FROM musteriler
GROUP BY icecek
ORDER BY toplam_ciro DESC;

Bu sorgu şunu yapar: her içecek için kaç satır var, toplam kaç TL, ortalama, en düşük ve en yüksek fiyat. Sonra ciroya göre azalan sırada dizer.

Altın kural: SELECT içinde GROUP BY’da olmayan bir sütun kullanırsan hata alırsın. Sebebi: gruptan tek bir değer döndüremez, hangisini seçeceğini bilemez. Aggregation fonksiyonları (COUNT, SUM, AVG, MIN, MAX) istisnadır — onlar grubu temsil eden tek bir değer üretir.

HAVING: Grupları Filtrele

WHERE satırları gruplamadan önce filtreler. Grupladıktan sonra filtrelemek istersen HAVING:

SELECT icecek, COUNT(*) AS adet
FROM musteriler
GROUP BY icecek
HAVING COUNT(*) >= 2;

Bu, “2 veya daha fazla satıra sahip içecekleri göster” demek. Eğer WHERE kullansaydık satır bazlı filtrelerdik, bu sorguyu yazamazdık.

Sıralama şöyle çalışır:

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

ORDER BY ve LIMIT

Sonuçları sırala ve kısıtla:

SELECT isim, fiyat
FROM musteriler
ORDER BY fiyat DESC, isim ASC
LIMIT 5;

Birden fazla sütuna göre sıralayabilirsin: önce fiyata göre azalan, eşit fiyatlarda isme göre artan.

Sorgu Anatomisi

Tipik bir analitik sorgu:

SELECT                              -- 5) ne gösterilecek
  icecek,
  COUNT(*) AS adet
FROM musteriler                     -- 1) hangi tablo
WHERE tarih >= '2026-01-01'         -- 2) hangi satırlar
GROUP BY icecek                     -- 3) nasıl gruplanacak
HAVING COUNT(*) >= 1                -- 4) hangi gruplar
ORDER BY adet DESC                  -- 6) hangi sırada
LIMIT 10;                           -- 7) kaç tanesi

Her parçanın sırası sabit. Bu kalıbı içselleştir, her sorguda işini görür.

Alıştırma

  1. SELECT COUNT(DISTINCT icecek) FROM musteriler; — kaç farklı içecek var?
  2. En yüksek 3 fiyatı getir (ORDER BY ... LIMIT).
  3. İsmi ‘A’ ile başlayan müşterileri getir (LIKE).

Sıradaki

Tek tabloda soru sormayı öğrendin. Şimdi iki tabloyu birleştiriyoruz →