SQL Öğrenme Rehberi

Veri Tabanı Finalin İçin Kapsamlı Görsel Kılavuz

Veri Girişi İşlemleri - Bölüm 1 SQL temel kavramlar
Veri Girişi İşlemleri - Bölüm 2 İleri düzey konular
Veri Girişi İşlemleri - Bölüm 2 İleri düzey konular

SQL Nedir? - Temel Kavramlar

Veritabanı = Dijital Kütüphane

SQL, veritabanıyla konuşmak için kullandığımız dildir!

Öğrenciler Tablosu
ID
Ad
Soyad
Şehir
1
Ahmet
Yılmaz
Ankara
2
Ayşe
Kaya
İstanbul
Dersler Tablosu
ID
Ders Adı
Kredi
101
Veritabanı
3
102
Matematik
4

Önemli Analoji

Veritabanı = Kütüphane

Tablo = Kitap rafı

Satır = Bir kitap

Sütun = Kitabın bir özelliği (başlık, yazar, sayfa sayısı...)

CRUD İşlemleri - Veritabanı Temel Operasyonları

CREATE (Okuma)

SELECT komutu

"Bana şu bilgileri göster"

READ (Ekleme)

INSERT INTO komutu

"Yeni kayıt ekle"

UPDATE (Güncelleme)

UPDATE komutu

"Var olan kayıtları değiştir"

DELETE (Silme)

DELETE FROM komutu

"Kayıtları sil"

SÜPER ÖNEMLİ UYARI!

UPDATE ve DELETE komutlarını WHERE koşulu olmadan ASLA kullanma!

Tüm tabloyu etkileyebilir ve geri dönüşü olmayabilir!

İnteraktif SQL Çalışma Alanı

İnteraktif SQL Sorgu Oluşturucu

Aşağıdaki SQL komutlarına tıklayarak sorgunu oluştur! Tekrar tıklayarak kaldırabilirsin.

Sorgu yazmadan önce tabloları incele!

SQL Komutları - Tıklayarak Ekle/Çıkar

Temel Komutlar
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
DISTINCT
Sütunlar ve Veriler
* (Tümü)
Ad
Soyad
Ad, Soyad
Yas
Sehir
DersAdi
FinalNotu
Kredi
Tablolar
Ogrenciler
Dersler
Notlar
Bolumler
Koşullar ve Filtreler
Yas > 20
Yas < 25
Sehir = 'Ankara'
Sehir = 'İstanbul'
Ad LIKE 'A%'
FinalNotu > 70
AND
OR
JOIN İşlemleri
INNER JOIN
LEFT JOIN
RIGHT JOIN
ON Ogrenciler.ID = Notlar.OgrID
ON Dersler.DersID = Notlar.DersID
Aggregate Fonksiyonlar
COUNT(*)
COUNT(DISTINCT Ad)
AVG(FinalNotu)
AVG(Yas)
MAX(Yas)
MAX(FinalNotu)
MIN(FinalNotu)
MIN(Yas)
SUM(Kredi)
SUM(FinalNotu)
Özel Aggregate Fonksiyon Oluştur
Örnekler: "FinalNotu", "Yas", "Kredi", "*" (COUNT için), "Ad" (DISTINCT için)
Hızlı Ekle
📈 Sıralama ve Sınırlama
ASC
DESC
Ad ASC
Yas DESC
FinalNotu DESC
10
5

SQL Sorgu Alanı

Yukarıdaki komutlara tıklayarak SQL sorgunu oluştur!
İpucu: SELECT ve FROM ile başla

Sorgu başarıyla oluşturuldu ve çalıştırıldı!

📄 SQL Sorgu Önizlemesi

Sorgun burada görünecek...
⌨️ Klavye Kısayolları:
Ctrl+Enter Çalıştır
Esc Temizle
Home En Üste

Sorgu Sonuçları

Sorguyu çalıştır ve sonuçları gör!
SELECT ve FROM ekleyerek başla

SELECT Komutu ve Filtreleme

Temel SELECT Yapısı

SELECT sütun_adları
FROM tablo_adı
WHERE koşul
ORDER BY sıralama;

İnteraktif SQL Örnekleri

Basit Seçim İşlemleri:
SELECT * FROM Ogrenciler; -- Tüm öğrencileri göster
SELECT Ad, Soyad FROM Ogrenciler; -- Sadece ad ve soyadları göster
Filtreleme İşlemleri:
SELECT * FROM Ogrenciler WHERE Sehir = 'Ankara'; -- Sadece Ankara'daki öğrenciler
SELECT Ad, Soyad FROM Ogrenciler WHERE Yas > 20; -- 20 yaşından büyük öğrenciler

💡 WHERE Koşulları - Karşılaştırma Operatörleri

=
Eşittir
>
Büyüktür
<
Küçüktür
!=
Eşit değil
LIKE
Kalıp eşleştirme
IN
Listede var mı?

🔍 LIKE Operatörü - Kalıp Eşleştirme

% (Yüzde) İşareti:
'A%' → A ile başlayanlar
'%an%' → İçinde 'an' geçenler
'%er' → 'er' ile bitenler
_ (Alt çizgi) İşareti:
'A_met' → A ile başlayıp 5 karakter
'_hmet' → 2. harfi 'h' olan 5 karakter

Aggregate Fonksiyonlar ve Gruplama

🔢 COUNT()

Sayıları sayar

SELECT COUNT(*) FROM Ogrenciler;

📈 AVG()

Ortalama alır

SELECT AVG(Not) FROM Notlar;

⬆️ MAX()

En büyük değer

SELECT MAX(Yas) FROM Ogrenciler;

⬇️ MIN()

En küçük değer

SELECT MIN(Not) FROM Notlar;

➕ SUM()

Toplam alır

SELECT SUM(Kredi) FROM Dersler;

👥 GROUP BY - Gruplama İşlemi

Amaç: Verileri belirli kriterlere göre gruplamak ve her grup için ayrı hesaplama yapmak

SELECT Sehir, COUNT(*) AS OgrenciSayisi
FROM Ogrenciler
GROUP BY Sehir;
📋 Sonuç:
Şehir
Öğrenci Sayısı
Ankara
15
İstanbul
23
İzmir
8

⚠️ WHERE vs HAVING Farkı

🔍 WHERE

Gruplamadan ÖNCE satırları filtreler

WHERE Yas > 20
🎯 HAVING

Gruplamadan SONRA grupları filtreler

HAVING COUNT(*) > 5

JOIN İşlemleri - Tabloları Birleştirme

🔗 JOIN Nasıl Çalışır?

👥 Öğrenciler

ID | Ad | Soyad
1 | Ahmet | Yılmaz
2 | Ayşe | Kaya
🔗

📊 Notlar

OgrID | DersID | Not
1 | 101 | 85
2 | 101 | 92
➡️

🎯 Birleşmiş Sonuç

Ad | Soyad | Not
Ahmet | Yılmaz | 85
Ayşe | Kaya | 92

🔗 INNER JOIN Örneği

SELECT O.Ad, O.Soyad, N.FinalNotu
FROM Ogrenciler AS O
INNER JOIN Notlar AS N ON O.OgrenciID = N.OgrenciID;

Açıklama: Sadece her iki tabloda da bulunan (notu olan) öğrencileri listeler.

🎯 INNER JOIN

Her iki tabloda da eşleşen kayıtlar

⚪⚪

⬅️ LEFT JOIN

Sol tablodaki tüm kayıtlar + eşleşenler

🔵⚪

➡️ RIGHT JOIN

Sağ tablodaki tüm kayıtlar + eşleşenler

⚪🔵

🔄 FULL JOIN

Her iki tablodaki tüm kayıtlar

🔵🔵

💡 JOIN Kullanırken Dikkat Et!

  • ON koşulunu unutma: Hangi sütunların eşleşeceğini belirt
  • Takma ad kullan: AS ile tablolara kısa isimler ver (O, N gibi)
  • Sütun adlarını net belirt: O.Ad, N.FinalNotu gibi

İleri Seviye Konular

🔍 Alt Sorgular (Subqueries)

Bir sorgunun sonucunu başka bir sorguda kullanmak

-- Ortalamanın üzerinde not alan öğrenciler
SELECT Ad, Soyad, FinalNotu
FROM Ogrenciler O
INNER JOIN Notlar N ON O.OgrenciID = N.OgrenciID
WHERE N.FinalNotu > (
    SELECT AVG(FinalNotu) FROM Notlar
);
📝 Çalışma Sırası:
  1. Önce parantez içindeki sorgu çalışır → Ortalama bulunur
  2. Bu ortalama ana sorguda kullanılır
  3. Ortalamanın üzerindeki notlar listelenir

🎮 Yaygın Alt Sorgu Örnekleri

🥇 En yüksek notu alan öğrenci:
SELECT Ad, Soyad
FROM Ogrenciler O
INNER JOIN Notlar N ON O.OgrenciID = N.OgrenciID
WHERE N.FinalNotu = (SELECT MAX(FinalNotu) FROM Notlar);
🥈 İkinci en yüksek not:
SELECT MAX(FinalNotu)
FROM Notlar
WHERE FinalNotu < (SELECT MAX(FinalNotu) FROM Notlar);
📋 Belirli dersi alan öğrenciler:
SELECT Ad, Soyad
FROM Ogrenciler
WHERE OgrenciID IN (
    SELECT OgrenciID FROM Notlar N
    INNER JOIN Dersler D ON N.DersID = D.DersID
    WHERE D.DersAdi = 'Fizik'
);

🔢 Window Functions (İleri Seviye)

Gruplama yapmadan satırlar üzerinde hesaplama yapma

SELECT Ad, Soyad, FinalNotu,
    ROW_NUMBER() OVER (ORDER BY FinalNotu DESC) AS Siralama,
    AVG(FinalNotu) OVER () AS GenelOrtalama
FROM Ogrenciler O
INNER JOIN Notlar N ON O.OgrenciID = N.OgrenciID;
ROW_NUMBER()
Sıra numarası
RANK()
Sıralama (eşitlerde aynı)
DENSE_RANK()
Yoğun sıralama

Final Sınavı İçin Özel İpuçları

🎯 Strateji 1: Adım Adım Çözüm

  1. Soruyu iyi oku - Ne isteniyor?
  2. Hangi tablolar gerekli? - İlişkileri belirle
  3. Basit sorgulardan başla - Karmaşıklaştır
  4. WHERE koşullarını ekle - Filtreleme yap
  5. Sıralama ve gruplama - Son rötuşlar

⚠️ Yaygın Hatalar - Bunlara Dikkat!

  • WHERE vs HAVING karıştırma
  • JOIN'de ON koşulunu unutma
  • GROUP BY'da sütun eksik bırakma
  • UPDATE/DELETE'de WHERE unutma
  • Alt sorguların parantezini kapatmama

🏆 Sınavda Çıkabilecek Tipik Sorular

❓ Soru Tipi 1: En yüksek/düşük değer bulma
-- En yüksek notu alan öğrenci
SELECT TOP 1 Ad, Soyad, FinalNotu
FROM Ogrenciler O
INNER JOIN Notlar N ON O.OgrenciID = N.OgrenciID
ORDER BY FinalNotu DESC;
❓ Soru Tipi 2: Şehir/grup bazında sayım
-- Her şehirde kaç öğrenci var?
SELECT Sehir, COUNT(*) AS OgrenciSayisi
FROM Ogrenciler
GROUP BY Sehir
ORDER BY OgrenciSayisi DESC;
❓ Soru Tipi 3: Ortalama karşılaştırması
-- Ortalamanın üzerinde not alanlar
SELECT Ad, Soyad, FinalNotu
FROM Ogrenciler O
INNER JOIN Notlar N ON O.OgrenciID = N.OgrenciID
WHERE FinalNotu > (SELECT AVG(FinalNotu) FROM Notlar);
❓ Soru Tipi 4: İkinci/üçüncü en yüksek değer
-- İkinci en yüksek not
SELECT MAX(FinalNotu) AS IkinciEnYuksek
FROM Notlar
WHERE FinalNotu < (SELECT MAX(FinalNotu) FROM Notlar);

🎊 Final Öncesi Son Kontrol Listesi

✅ Temel Komutlar

SELECT, FROM, WHERE, INSERT, UPDATE, DELETE

✅ Filtreleme

WHERE, LIKE, IN, BETWEEN koşulları

✅ Gruplama

GROUP BY, HAVING, Aggregate fonksiyonlar

✅ Birleştirme

INNER JOIN, LEFT JOIN, Alt sorgular

Sen Yaparsın! Başarılar!

Hızlı Referans Kılavuzu

🔍 Temel SELECT Sözdizimi

SELECT sütun1, sütun2
FROM tablo_adı
WHERE koşul
GROUP BY sütun
HAVING grup_koşulu
ORDER BY sütun ASC/DESC
LIMIT sayı;

✏️ Veri Değiştirme

INSERT INTO tablo VALUES (...);

UPDATE tablo SET sütun=değer
WHERE koşul;

DELETE FROM tablo
WHERE koşul;

🔗 JOIN Sözdizimi

SELECT a.sütun, b.sütun
FROM tablo1 a
INNER JOIN tablo2 b
ON a.id = b.id
WHERE koşul;

📊 Aggregate Fonksiyonlar

COUNT(*) - Satır sayısı
AVG(sütun) - Ortalama
MAX(sütun) - En büyük
MIN(sütun) - En küçük
SUM(sütun) - Toplam

Veritabanı Şeması ve Örnek Veriler

Ogrenciler Tablosu
OgrenciID INT PRIMARY KEY
Ad VARCHAR(50)
Soyad VARCHAR(50)
Yas INT
Sehir VARCHAR(30)
BolumID INT FOREIGN KEY
📋 Örnek Veriler:
1, Ahmet, Yılmaz, 22, Ankara, 1
2, Ayşe, Kaya, 21, İstanbul, 2
3, Mehmet, Demir, 23, İzmir, 1
4, Fatma, Çelik, 20, Ankara, 3
5, Ali, Şahin, 24, Bursa, 2
Dersler Tablosu
DersID INT PRIMARY KEY
DersAdi VARCHAR(100)
Kredi INT
BolumID INT FOREIGN KEY
📋 Örnek Veriler:
101, Veritabanı Yönetimi, 3, 1
102, Matematik, 4, 1
103, Fizik, 3, 2
104, Kimya, 4, 2
105, Tarih, 2, 3
Notlar Tablosu
NotID INT PRIMARY KEY
OgrenciID INT FOREIGN KEY
DersID INT FOREIGN KEY
FinalNotu DECIMAL(5,2)
VizeNotu DECIMAL(5,2)
📋 Örnek Veriler:
1, 1, 101, 85.50, 78.00
2, 1, 102, 92.00, 88.50
3, 2, 101, 76.00, 82.00
4, 3, 103, 89.50, 85.00
5, 4, 104, 95.00, 90.00
Bolumler Tablosu
BolumID INT PRIMARY KEY
BolumAdi VARCHAR(100)
FakulteAdi VARCHAR(100)
📋 Örnek Veriler:
1, Bilgisayar Mühendisliği, Mühendislik
2, Endüstri Mühendisliği, Mühendislik
3, Tarih, Edebiyat
4, Matematik, Fen Edebiyat
Bu tablolar arasındaki ilişkileri kullanarak JOIN sorguları yazabilirsin!
Primary Key (Birincil Anahtar) ve Foreign Key (Yabancı Anahtar) sütunları tablolar arasında bağlantı kurar.
OgrenciID, DersID, BolumID sütunları ile tabloları birleştirebilirsin.