SQL / CSS / HTML Formatter

SQL Sorgusunu Biçimlendir: Online SQL Güzelleştirici

Dağınık SQL sorgularını doğru anahtar kelime hizalamasıyla biçimlendirin ve girintileyin. SELECT, JOIN, alt sorgular, CTE'ler ve pencere fonksiyonlarını destekler.

Verileriniz tarayıcınızdan çıkmaz.

Editör yükleniyor...

Editör yükleniyor...

Biçimlendirilmiş Sorgu

Biçimlendirici yukarıdaki girdiye uygulandığında şunu üretir:

SELECT
  u.id,
  u.name,
  u.email,
  o.total,
  o.created_at
FROM users u
INNER JOIN orders o
  ON u.id = o.user_id
WHERE
  o.created_at >= '2024-01-01'
  AND o.status = 'completed'
GROUP BY
  u.id,
  u.name,
  u.email,
  o.total,
  o.created_at
HAVING COUNT(o.id) > 5
ORDER BY o.total DESC
LIMIT 100;

Her yan tümce kendi satırında başlar. Sütun listeleri satır başına bir öğe olacak şekilde düzenlenir. ON koşulu JOIN anahtar kelimesinin altında hizalanır. Bu düzen, her yan tümceyi bir bakışta taranabilir kılar.

SQL Biçimlendirme Neden Önemlidir

Tek satırlık bir sorgu, yazdığınızda iyi çalışır. Ancak başka birinin okuması gerektiğinde veya üç ay sonra hata ayıklamak için geri döndüğünüzde bakım sorunu haline gelir.

Biçimlendirilmiş SQL birkaç şeyi hızlandırır:

SQL Biçimlendirme Kuralları

Çoğu SQL stil kılavuzunda görünen kurallar:

Anahtar kelimeler büyük harf: SELECT, FROM, WHERE, JOIN, ON, GROUP BY, HAVING, ORDER BY, LIMIT. Bu, SQL yapısını tanımlayıcılardan ayırır.

SELECT listelerinde sütun başına bir satır. Bu, sorgu sürüm kontrolüne gönderiliyorsa kısa sorgular için bile geçerlidir, çünkü SELECT listesine gelecekte yapılacak eklemeler yeniden biçimlendirme gerektirmez.

JOIN koşulları yeni bir satırda, JOIN anahtar kelimesinin altında girintili olarak. ON yan tümcesi görsel olarak JOIN’e aittir, WHERE yan tümcesine değil.

WHERE koşullarının her biri kendi satırında, AND veya OR devam satırının başında (sonunda değil). Devam satırlarına AND ile başlamak, bitişik satırları düzenlemeden bir koşulu yorumlamayı kolaylaştırır.

CTE Biçimlendirme

CTE’ler, aynı türetilmiş veri kümesine birden çok kez referans veren sorgularda veya ara sonuçları adlandırmanın okunabilirliği artırdığı durumlarda alt sorguların yerini alır. Standart biçimlendirme deseni:

WITH
  active_users AS (
    SELECT id, name, email
    FROM users
    WHERE status = 'active'
  ),
  recent_orders AS (
    SELECT user_id, SUM(total) AS total_spend
    FROM orders
    WHERE created_at >= '2024-01-01'
    GROUP BY user_id
  )
SELECT
  u.name,
  u.email,
  r.total_spend
FROM active_users u
INNER JOIN recent_orders r
  ON u.id = r.user_id
ORDER BY r.total_spend DESC;

Her CTE, WITH bloğu içinde bir seviye girintilenir. Son SELECT, iç içe alt sorgu duvarı yerine adlandırılmış veri kümelerine karşı normal bir sorgu olarak okunur.

Pencere Fonksiyonları

Pencere fonksiyonları, OVER yan tümceleri uzun olabileceğinden kendi biçimlendirme işlemlerini gerektirir:

SELECT
  user_id,
  order_date,
  total,
  SUM(total) OVER (
    PARTITION BY user_id
    ORDER BY order_date
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS running_total,
  RANK() OVER (
    PARTITION BY user_id
    ORDER BY total DESC
  ) AS order_rank
FROM orders;

OVER yan tümcesi fonksiyonla aynı satırda açılır. PARTITION BY, ORDER BY ve çerçeve yan tümceleri parantez içinde girintili olarak ayrı satırlara gider.

Komut Satırı ve IDE Alternatifleri

CI boru hatlarında otomatik biçimlendirme için SQLFluff en yetenekli seçenektir. SQL dosyalarını lint’ler ve düzeltir, birden çok lehçeyi destekler ve pre-commit hooks ile entegre olur:

pip install sqlfluff
sqlfluff fix --dialect postgres query.sql

PostgreSQL’e özel olarak pg_format, SQL’i PostgreSQL sözdizimi bilinciyle biçimlendirir:

brew install pgformatter
pg_format query.sql

IDE entegrasyonu için VS Code’daki SQL Tools uzantısı ve DataGrip’in yerleşik biçimlendiricisi standart SQL’i iyi işler. Pratik denge: IDE biçimlendiricileri geçici sorgular için kullanışlıdır, ancak bir CI linter’ı ekip genelinde tutarlı biçimlendirmeyi uygulamanın tek yoludur. İkisini de kullanın: yazarken yerel olarak biçimlendirin, kaçanları yakalamak için CI’da uygulayın.