Lajiverta Academy Satın Al — 499₺

Academy 🗄️ SQL & Veritabanı Veri ve Tablolar

🧪 Uygulama: Piksel Market'i tanı

🗄️ Veri ve Tablolar bölümü · Code Quest SQL & Veritabanı parkuru

Bölümü kapatmadan önce mağazanın beş tablosunu tek tek gezelim. Bu tur, parkurun geri kalanında sürekli kullanacağın haritanı zihnine yerleştirecek.

1) turler — en küçük tablo. Sadece bir kimlik ve bir ad. Böyle küçük yardımcı tablolara "referans tablosu" ya da "lookup tablosu" denir.

SQL
SELECT * FROM turler;
▸ SONUÇ
id | ad
───┼─────────
 1 | Aksiyon
 2 | Bulmaca
 3 | Yarış
 4 | Strateji
 5 | Macera

2) oyunlar — mağazanın kalbi. 12 oyun; her birinin türü (tur_id), fiyatı, oyuncu puanı, çıkış yılı ve stok adedi var.

SQL
SELECT id, ad, fiyat, stok
FROM oyunlar;
▸ SONUÇ
id | ad             | fiyat | stok
───┼────────────────┼───────┼─────
 1 | Neon Drift     | 199.9 |   12
 2 | Piksel Kale    |  89.5 |   40
 3 | Gölge Avcısı   |   249 |    7
 4 | Kelime Kulesi  |  49.9 |    0
 5 | Yıldız Sürüsü  |   149 |   25
 6 | Zaman Kapısı   | 179.5 |    9
 7 | Robot Bahçesi  |    79 |   33
 8 | Kara Yörünge   |   299 |    5
 9 | Buz Vadisi     | 129.9 |   18
10 | Kule Savunması |  59.9 |   60
11 | Derin Mavi     |   219 |    3
12 | Sessiz Ada     |    99 |   11

Kelime Kulesi'nin stoğu 0 — yani tükenmiş. NULL değil, sıfır: "kaç tane olduğunu biliyoruz, hiç yok".

3) oyuncular — 10 üye. Ad, şehir, yaş ve kayıt tarihi. Tarihleri SQLite'ta 'YYYY-AA-GG' biçiminde metin olarak tutmak standarttır; bu biçim alfabetik sıralandığında kronolojik de sıralanır — çok kullanışlı bir numara.

SQL
SELECT ad, sehir, yas, kayit
FROM oyuncular;
▸ SONUÇ
ad     | sehir    | yas | kayit
───────┼──────────┼─────┼───────────
Ada    | İstanbul |  17 | 2023-02-11
Deniz  | Ankara   |  22 | 2022-09-05
Kerem  | İzmir    |  19 | 2024-01-20
Zeynep | İstanbul |  25 | 2021-06-30
Mert   | Bursa    |  16 | 2024-07-14
Elif   | Ankara   |  31 | 2020-11-02
Baran  | NULL     |  20 | 2025-03-08
Sena   | İzmir    |  28 | 2023-12-25
Tuna   | Adana    |  15 | 2025-05-19
Nil    | İstanbul |  24 | 2022-04-17

4) satislar — 24 satın alma kaydı. Bu tablo ilginç: neredeyse tamamı numaralardan oluşuyor. oyuncu_id kimin aldığını, oyun_id neyi aldığını söyler. Böyle "iki tarafı da bağlayan" tablolara ilişki tablosu denir; 8. bölümde JOIN ile bunları çözeceksin.

SQL
SELECT id, oyuncu_id, oyun_id, adet, tutar
FROM satislar;
▸ SONUÇ
id | oyuncu_id | oyun_id | adet | tutar
───┼───────────┼─────────┼──────┼──────
 1 |         1 |       1 |    1 | 199.9
 2 |         1 |       4 |    2 |  99.8
 3 |         2 |       3 |    1 |   249
 4 |         3 |       1 |    1 | 199.9
 5 |         4 |       6 |    1 | 179.5
 6 |         2 |       2 |    3 | 268.5
 7 |         5 |      10 |    1 |  59.9
 8 |         6 |      11 |    1 |   219
 9 |         1 |       5 |    1 |   149
10 |         8 |       3 |    1 |   249
11 |         4 |       1 |    2 | 399.8
12 |         7 |       7 |    1 |    79
13 |         3 |       9 |    1 | 129.9
14 |        10 |       6 |    1 | 179.5
15 |         2 |      11 |    1 |   219
16 |         6 |       2 |    1 |  89.5
17 |         8 |      12 |    2 |   198
18 |         1 |       6 |    1 | 179.5
19 |         5 |       4 |    1 |  49.9
20 |         4 |      11 |    1 |   219
21 |        10 |       1 |    1 | 199.9
22 |         3 |       5 |    2 |   298
23 |         7 |      10 |    3 | 179.7
24 |         2 |       1 |    1 | 199.9

1 numaralı satışı okuyalım: oyuncu 1 (Ada), oyun 1'i (Neon Drift) 1 adet, 199.9 TL'ye almış. Numaraları isimlere çevirmek JOIN'in işi — ama şimdiden tablonun hikâyeyi nasıl anlattığını görüyorsun.

5) yorumlar — 12 yorum. Oyuncuların oyunlara verdiği 1-5 arası puanlar ve kısa metinler.

SQL
SELECT oyuncu_id, oyun_id, puan, metin
FROM yorumlar;
▸ SONUÇ
oyuncu_id | oyun_id | puan | metin
──────────┼─────────┼──────┼───────────────────────────────
        1 |       1 |    5 | Sürüşler inanılmaz akıcı.
        2 |       3 |    5 | Atmosfer efsane.
        1 |       4 |    3 | Fena değil ama kısa.
        4 |       6 |    4 | Bulmacalar zekice.
        3 |       1 |    4 | Müzikler harika.
        6 |      11 |    5 | Yılın oyunu bence.
        5 |      10 |    4 | Basit ama bağımlılık yapıyor.
        8 |       3 |    5 | Tekrar tekrar oynanır.
        2 |       2 |    2 | Çok tekrara düşüyor.
       10 |       6 |    4 | Sonu şaşırttı.
        7 |       7 |    3 | Çocuğum için aldım, sevdi.
        3 |       9 |    2 | Kontroller eski hissettiriyor.
💡 Beş tablo, beş görev: turler sınıflandırır, oyunlar ürünü tutar, oyuncular müşteriyi tutar, satislar parayı takip eder, yorumlar memnuniyeti ölçer. Gerçek şirketlerin veritabanları da tam olarak böyle düşünülerek kurulur.

Bu bölümde SELECT ile sütun seçmeyi, tabloların anatomisini ve NULL'ı öğrendin. Ama şu ana kadar hep bütün satırları getirdik. Sırada asıl güç var: sonucu şekillendirmek, hesaplamak ve istemediğin satırları elemek.

Kendini test et

Bu kodun çıktısı ne olur?

SELECT 50 + NULL;
Cevabı gör

Çıktı:

NULL

Bilinmeyenle yapılan her hesabın sonucu da bilinmeyendir. NULL, aritmetiğe bulaşınca her şeyi NULL yapar.

oyunlar tablosundaki tur_id sütunu ne işe yarar?

  • Oyunun türünün adını saklar
  • turler tablosundaki bir satırı işaret eder (yabancı anahtar)
  • Oyunun kaç tür içerdiğini sayar
Cevabı gör

Cevap: turler tablosundaki bir satırı işaret eder (yabancı anahtar)

tur_id bir yabancı anahtardır: turler.id değerini işaret ederek iki tabloyu birbirine bağlar.