SQL_DETECTIVE
Interactive Forensics Engine
Modül 1: Temel DQL & Veri Alma • BÖLÜM 1Fundamentals
5 Dakika Okuma

SELECT, DISTINCT ve Kolon Alias (AS) Mantığı

İlişkisel veritabanından veri çekmenin temel yapı taşları ve projeksiyon.

Ne İşe Yarar ve Neden Var?

Veritabanı tablosundaki milyonlarca dikey veriden sadece işinize yarayan sütunları seçip filtreler. DISTINCT satır tekrarlarını süzer, AS (Alias) ise teknik kolon adlarını (örn: created_at) insan dostu etiketlere (Kayıt Tarihi) dönüştürür.

İnteraktif Görsel Mantık & Simülasyon:
SQL Sorgusunun Anatomisi & Renk Kodlu Parçaları
Temel Yapı Taşları
SELECT name, price, stock_quantity -- 1. Projeksiyon (Hangi kolonlar gelsin?)
FROM products -- 2. Veri Kaynağı (Hangi tablodan?)
WHERE price >= 5000 AND is_active = true -- 3. Satır Filtresi (Kimler geçsin?)
ORDER BY price DESC -- 4. Sıralama (Pahalıdan ucuza)
LIMIT 5; -- 5. Kesme (İlk 5 ürünü getir)

SQL (Structured Query Language), ilişkisel veritabanlarındaki tablolarla konuşma dilidir. Veri çekmek için kullanılan en temel komut SELECT'tir. SELECT ile tablonun tamamı (* ile) veya yalnızca ihtiyaç duyulan belirli kolonları çekilebilir.

Zihinsel Model (Nasıl Düşünmeliyiz?)

Bir Excel tablosunu gözünüzün önüne getirin. SELECT komutu, tablonun hangi dikey sütunlarını (kolonlarını) kesip önünüze getireceğinizi seçmektir. FROM ise bu sütunların hangi sayfadan (tablodan) alınacağını belirtir.

Veritabanı Motorunun Adım Adım Çalışma Mekanizması:
1

1. FROM tablosu (customers) disktan belleğe alınır.

2

2. SELECT projeksiyon aşamasında yalnızca belirtilen kolonlar (first_name, email) süzülür.

3

3. DISTINCT varsa, seçilen tüm kolonların kombinasyonu sıralanarak mükerrer kayıtlar atılır.

4

4. AS ile belirtilen yeni takma isimler sonuç başlıklarına yazılır.

Karşılaştırmalı Fark Matrisi
KriterSELECT *SELECT col1, col2 (Projeksiyon)
Ağ TrafiğiTüm kolonlar taşınır (Yüksek maliyet)Yalnızca istenen baytlar taşınır (Minimum maliyet)
İndeks VerimiIndex-Only Scan yapılamazİndeks üzerinden disk okumadan dönebilir
Kod DayanıklılığıTabloya yeni kolon eklenirse API bozulabilirŞema değişikliklerinden etkilenmez
Ne Zaman Kesinlikle Kullanılmalı?

Bir kullanıcı arayüzü veya rapor için belirli kolonlara ihtiyaç duyulduğunda.

Müşterilerin yaşadığı tekil şehirleri veya benzersiz kategorileri tespit etmek istediğinizde (DISTINCT).

Frontend veya API'ye gönderilecek JSON çıktısında kolon isimlerini standartlaştırmak için (AS).

Ne Zaman Kaçınılmalı? (Antipatterns)

Üretim ortamlarında doğrudan 'SELECT *' kullanmaktan kaçının; şema değiştikçe uygulama kodunuz patlayabilir.

Tüm kolonları DISTINCT yapmaya çalışmayın; DISTINCT arka planda ağır bir sıralama (SORT) algoritması çalıştırır.

Sözdizimi Şablonu (Syntax):
SELECT [DISTINCT] column1 AS alias_name, column2 FROM table_name;
Kıdemli Mühendis İpuçları

Canlı üretim ortamlarında (Production) ASLA 'SELECT *' kullanmayın; yalnızca ihtiyacınız olan kolonları açıkça belirtin. Bu durum bellek kullanımını ve network I/O maliyetini ciddi oranda düşürür.

Kolon alias'larında boşluk veya özel karakter varsa çift tırnak kullanabilirsiniz: SELECT first_name AS "Müşteri Adı".

Sık Yapılan Acemi Hataları

DISTINCT tek bir kolona değil, SELECT listesindeki TÜM kolonların kombinasyonuna uygulanır.

SQL anahtar sözcükleri büyük/küçük harfe duyarsızdır fakat standart olarak büyük harfle yazılması okunabilirliği artırır.

CANLI SQL DENEY ALANI (4 Kademeli Örnek)

Tarayıcı İçi WASM PostgreSQL • Doğrudan Düzenlenebilir
Temel (Giriş)Seviye 1: Temel Projeksiyon ve İsimlendirme (AS)
ecommerce dbPlayground

Müşterilerin ad, soyad ve e-posta adreslerini anlamlı başlıklarla getirir.

SQL Editörü (Düzenleyip çalıştırabilirsiniz):
Açıklama: AS sözcüğü ile kolon başlıkları 'ad', 'soyad' ve 'iletisim' olarak Türkçeleştirilmiştir. LIMIT 5 sadece ilk 5 satırı alır.
İş SenaryosuSeviye 2: Benzersiz Şehirleri Çekme (DISTINCT)
ecommerce dbPlayground

Müşterilerin kayıtlı olduğu şehirlerdeki tekrarları temizleyerek tekil liste üretir.

SQL Editörü (Düzenleyip çalıştırabilirsiniz):
Açıklama: İstanbul veya Ankara'da birden çok müşteri olsa dahi DISTINCT her şehri yalnızca 1 kez listeler.
İleri SeviyeSeviye 3: Dinamik Hesaplama Kolonu ile Alias
ecommerce dbPlayground

Ürünlerin birim fiyatını ve %20 KDV eklenmiş satış fiyatını hesaplayıp alias verir.

SQL Editörü (Düzenleyip çalıştırabilirsiniz):
Açıklama: Matematiksel bir formül (price * 1.20) yeni bir sanal kolon olarak çıktıda adlandırılmıştır.
Hata AvcısıSeviye 4: Hata Avcısı — Çoklu Kolonda DISTINCT Yanılgısı
ecommerce dbPlayground

Acemi geliştiriciler DISTINCT'in sadece yanındaki ilk kolona etki ettiğini sanır.

SQL Editörü (Düzenleyip çalıştırabilirsiniz):
Açıklama: DISTINCT tek bir kolona değil; (city + first_name) ikilisinin tamamına uygulanır. Aynı şehirde iki farklı Ahmet varsa ikisi de listelenir!
Bilgi Pekiştirme (Quick Check)

Aşağıdakilerden hangisi SELECT * kullanımının üretim sistemlerinde önerilmeme nedenlerinden biri DEĞİLDİR?

Bu Konudaki Adli Soruşturmaya Geç: İlk Dedektiflik Görevi: Müşteri ListesiÖğrendiklerinizi gerçek adli soruşturma ve dedektiflik vakası üzerinde uygulayın.
Soruşturmaya Başla