Ana içeriğe geç
Kesit SQL
Temel · Özetleme

Okunabilir SQL yazmak

Ekip içinde kabul gören yazım kuralları.

Uygulamada aç, 7 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Kod bir kez yazılır, çok kez okunur

SQL motoru biçimlendirmeyi umursamaz ama ekibin umursar. Yaygın kabul gören kurallar:

  1. Anahtar kelimeleri büyük, tablo ve sütun adlarını küçük yaz.
  2. Her ana bölüm (SELECT, FROM, WHERE, GROUP BY…) yeni satırda başlasın.
  3. Anlamlı takma adlar kullan: o (orders), c (customers); a, b, t1 değil.
  4. JOIN'lerde her zaman ON koşulu ve tablo öneki yaz: o.customer_id.
  5. İç içe alt sorgular yerine CTE kullan; her CTE tek bir iş yapsın.
  6. Hesaplanan sütunlara açıklayıcı takma ad ver: AS net_ciro.
  7. Neden yapıldığı belli olmayan kısımlara yorum ekle.
  8. Adlandırmada tek bir kuralı izle: snake_case (order_date) yaygındır; SQL Server ekiplerinde PascalCase (OrderDate) da sık görülür.
-- Teslim edilen siparişlerden kanal bazında net ciro
WITH teslim AS (
    SELECT o.order_id, o.channel
    FROM orders AS o
    WHERE o.status = 'delivered'
)
SELECT t.channel,
       ROUND(SUM(oi.quantity * oi.unit_price * (1 - oi.discount)), 2) AS net_ciro
FROM teslim AS t
JOIN order_items AS oi ON oi.order_id = t.order_id
GROUP BY t.channel
ORDER BY net_ciro DESC;

Derinleş: aynı sorgu, iki yazım

Okunabilir yazım hataları da görünür kılar. Karşılaştır:

select r.name,count(*) from lk_orders o,lk_restaurants r where o.restaurant_id=r.restaurant_id and o.status='teslim' group by r.name order by 2 desc
SELECT r.name   AS restoran,
       COUNT(*) AS teslim
FROM lk_orders o
JOIN lk_restaurants r
  ON r.restaurant_id = o.restaurant_id
WHERE o.status = 'teslim'
GROUP BY r.name
ORDER BY teslim DESC;

İkincisinde birleştirme koşulu ile filtre ayrıdır, çıktı sütunlarının adı vardır ve sıralama sütun numarası yerine adla yapılır. Aynı adlı iki restoran olursa GROUP BY r.name onları birleştirir; restoran numarasını da gruplamaya eklemek daha güvenlidir.

Alıştırmalara geç (7)