SELECT, DISTINCT ve Kolon Alias (AS) Mantığı
İlişkisel veritabanından veri çekmenin temel yapı taşları ve projeksiyon.
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.
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.
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.
1. FROM tablosu (customers) disktan belleğe alınır.
2. SELECT projeksiyon aşamasında yalnızca belirtilen kolonlar (first_name, email) süzülür.
3. DISTINCT varsa, seçilen tüm kolonların kombinasyonu sıralanarak mükerrer kayıtlar atılır.
4. AS ile belirtilen yeni takma isimler sonuç başlıklarına yazılır.
| Kriter | SELECT * | SELECT col1, col2 (Projeksiyon) |
|---|---|---|
| Ağ Trafiği | Tüm kolonlar taşınır (Yüksek maliyet) | Yalnızca istenen baytlar taşınır (Minimum maliyet) |
| İndeks Verimi | Index-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 |
✓ 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).
✗ Ü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.
• 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ı".
• 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)
Müşterilerin ad, soyad ve e-posta adreslerini anlamlı başlıklarla getirir.
Müşterilerin kayıtlı olduğu şehirlerdeki tekrarları temizleyerek tekil liste üretir.
Ürünlerin birim fiyatını ve %20 KDV eklenmiş satış fiyatını hesaplayıp alias verir.
Acemi geliştiriciler DISTINCT'in sadece yanındaki ilk kolona etki ettiğini sanır.
Aşağıdakilerden hangisi SELECT * kullanımının üretim sistemlerinde önerilmeme nedenlerinden biri DEĞİLDİR?