Kod bir kez yazılır, çok kez okunur
SQL motoru biçimlendirmeyi umursamaz ama ekibin umursar. Yaygın kabul gören kurallar:
- Anahtar kelimeleri büyük, tablo ve sütun adlarını küçük yaz.
- Her ana bölüm (SELECT, FROM, WHERE, GROUP BY…) yeni satırda başlasın.
- Anlamlı takma adlar kullan:
o(orders),c(customers);a,b,t1değil. - JOIN'lerde her zaman
ONkoşulu ve tablo öneki yaz:o.customer_id. - İç içe alt sorgular yerine CTE kullan; her CTE tek bir iş yapsın.
- Hesaplanan sütunlara açıklayıcı takma ad ver:
AS net_ciro. - Neden yapıldığı belli olmayan kısımlara yorum ekle.
- Adlandırmada tek bir kuralı izle:
snake_case(order_date) yaygındır; SQL Server ekiplerindePascalCase(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.