Ana Sayfa/Blog/SQL Temel Komutları: SELECT, JOIN, GROUP BY Rehberi

SQL Temel Komutları: SELECT, JOIN, GROUP BY Rehberi

SQL (Structured Query Language), ilişkisel veritabanlarıyla iletişim kurmak için kullanılan standart dildir. MySQL, PostgreSQL, SQLite, SQL Server gibi tüm ilişkisel veritabanı yönetim sistemleri SQL'i destekler. Bu rehberde en sık kullanılan SQL komutlarını örneklerle inceleyeceğiz.

SELECT: Veri Sorgulama

SQL'in en temel komutu SELECT ifadesidir. Veritabanından veri çekmek için kullanılır.

-- Tüm sütunları getir
SELECT * FROM kullanicilar;

-- Belirli sütunları getir
SELECT ad, soyad, email FROM kullanicilar;

-- Takma ad (alias) kullanımı
SELECT ad AS "Kullanıcı Adı", email AS "E-posta" FROM kullanicilar;

WHERE: Koşullu Filtreleme

WHERE ifadesi, sonuçları belirli koşullara göre filtrelemenizi sağlar.

-- Basit koşul
SELECT * FROM urunler WHERE fiyat > 100;

-- Birden fazla koşul
SELECT * FROM urunler WHERE kategori = 'Elektronik' AND fiyat < 5000;

-- OR operatörü
SELECT * FROM urunler WHERE kategori = 'Kitap' OR kategori = 'Müzik';

-- IN operatörü
SELECT * FROM urunler WHERE kategori IN ('Kitap', 'Müzik', 'Film');

-- LIKE ile desen eşleştirme
SELECT * FROM kullanicilar WHERE email LIKE '%@gmail.com';

-- NULL kontrolü
SELECT * FROM siparisler WHERE teslim_tarihi IS NULL;

ORDER BY ve LIMIT

Sonuçları sıralamak ve sayısını sınırlamak için bu ifadeler kullanılır:

-- Artan sıralama (varsayılan)
SELECT * FROM urunler ORDER BY fiyat ASC;

-- Azalan sıralama
SELECT * FROM urunler ORDER BY olusturma_tarihi DESC;

-- Birden fazla sıralama kriteri
SELECT * FROM urunler ORDER BY kategori ASC, fiyat DESC;

-- İlk 10 sonuç
SELECT * FROM urunler ORDER BY fiyat DESC LIMIT 10;

-- Sayfalama: 20. kayıttan itibaren 10 kayıt
SELECT * FROM urunler LIMIT 10 OFFSET 20;

JOIN: Tabloları Birleştirme

JOIN ifadeleri, birden fazla tabloyu ortak bir sütun üzerinden birleştirmenizi sağlar. İlişkisel veritabanlarının gücü büyük ölçüde JOIN'lerde yatar.

INNER JOIN

Her iki tabloda da eşleşen kayıtları getirir. En yaygın JOIN türüdür.

SELECT s.siparis_id, k.ad, k.soyad, s.toplam_tutar
FROM siparisler s
INNER JOIN kullanicilar k ON s.kullanici_id = k.id;

LEFT JOIN

Sol tablodaki tüm kayıtları ve sağ tablodaki eşleşenleri getirir. Eşleşme yoksa NULL döner.

-- Siparişi olmayan kullanıcıları da listele
SELECT k.ad, k.soyad, s.siparis_id
FROM kullanicilar k
LEFT JOIN siparisler s ON k.id = s.kullanici_id;

RIGHT JOIN ve FULL OUTER JOIN

RIGHT JOIN sağ tablodaki tüm kayıtları, FULL OUTER JOIN ise her iki tablodaki tüm kayıtları getirir.

GROUP BY ve Toplama Fonksiyonları

GROUP BY, verileri gruplandırarak toplama fonksiyonlarıyla özet bilgi çıkarmamızı sağlar.

-- Her kategorideki ürün sayısı
SELECT kategori, COUNT(*) AS urun_sayisi
FROM urunler
GROUP BY kategori;

-- Her kategorinin ortalama fiyatı
SELECT kategori, AVG(fiyat) AS ortalama_fiyat, MAX(fiyat) AS en_yuksek
FROM urunler
GROUP BY kategori;

-- HAVING: Grupları filtrele
SELECT kategori, COUNT(*) AS urun_sayisi
FROM urunler
GROUP BY kategori
HAVING COUNT(*) > 5
ORDER BY urun_sayisi DESC;

Yaygın toplama fonksiyonları: COUNT(), SUM(), AVG(), MIN(), MAX()

Not: WHERE gruplamadan önce, HAVING gruplamadan sonra filtreler.

Alt Sorgular (Subqueries)

Bir sorgunun içinde başka bir sorgu çalıştırabilirsiniz:

-- Ortalama fiyatın üzerindeki ürünler
SELECT * FROM urunler
WHERE fiyat > (SELECT AVG(fiyat) FROM urunler);

-- En çok sipariş veren kullanıcının bilgileri
SELECT * FROM kullanicilar
WHERE id = (
  SELECT kullanici_id FROM siparisler
  GROUP BY kullanici_id
  ORDER BY COUNT(*) DESC
  LIMIT 1
);

-- IN ile alt sorgu
SELECT * FROM urunler
WHERE kategori_id IN (
  SELECT id FROM kategoriler WHERE aktif = true
);

İndeksler (Indexes)

İndeksler, sorgu performansını önemli ölçüde artıran veritabanı nesneleridir. Sık sorgulanan sütunlara indeks eklemek sorgu süresini dramatik şekilde azaltır.

-- Tekli indeks
CREATE INDEX idx_urunler_kategori ON urunler(kategori);

-- Bileşik indeks
CREATE INDEX idx_siparisler_tarih_durum ON siparisler(siparis_tarihi, durum);

-- Benzersiz indeks
CREATE UNIQUE INDEX idx_kullanicilar_email ON kullanicilar(email);

İpucu: İndeksler okuma hızını artırırken yazma işlemlerini yavaşlatır. Her sütuna indeks eklemeyin; yalnızca WHERE, JOIN ve ORDER BY ifadelerinde sıkça kullanılan sütunları indeksleyin.

SQL Yazım Sırası

Bir SQL sorgusunun doğru yazım sırası şöyledir:

SELECT sütunlar
FROM tablo
JOIN diğer_tablo ON koşul
WHERE filtre
GROUP BY gruplama
HAVING grup_filtresi
ORDER BY sıralama
LIMIT sayı;

SQL sorgularınızı düzenli ve okunabilir hale getirmek mi istiyorsunuz? SiteScripti'nin SQL Formatter aracıyla karmaşık sorgularınızı otomatik olarak biçimlendirebilirsiniz.

Bu konuyla ilgili araçlarımızı da deneyin: JSON Formatter, Regex Test Aracı, ENV Generator

← Tüm Yazılar