SQL Sorgusu Biçimlendirme
SQL sorgusunu lehçesine göre okunur girintiye sokun ya da tek satıra indirin
Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.
Bu araç işinizi gördü mü?
Teşekkürler, geri bildiriminiz alındı.
Nasıl çalışır?
Sorguyu sol panele yapıştırın; biçimlenmiş hali sağ panelde anında görünür. Araç SELECT, FROM, WHERE, GROUP BY, ORDER BY ve JOIN gibi ana anahtar kelimeleri satır başına alır, SELECT listesindeki her sütunu ayrı satıra koyar, WHERE içindeki AND ve OR koşullarını bir içeri girintiler; WITH ile açtığınız geçici tablolar (CTE), CASE WHEN dalları ve ROW_NUMBER() OVER (PARTITION BY ...) gibi pencere fonksiyonları da kendi kademelerine oturur. Örneğin log kaydından kopyaladığınız 340 karakterlik tek satırlık bir sorgu, yapıştırdığınız anda hangi tabloların birleştiğini ve hangi koşulların uygulandığını satır satır gösteren bir düzene oturur. Sorgunun hangi veritabanına ait olduğunu seçerseniz sonuç daha doğru olur: PostgreSQL'de deger::int dönüşümü, SQL Server'da TOP 10 ve [köşeli parantez]li adlar, MySQL'de ters tırnaklı adlar o lehçenin kuralıyla okunur. Bilmiyorsanız Genel SQL seçeneğini bırakın. Tek tırnak içindeki metin değerlerine, çift tırnaklı ve köşeli paranteze alınmış ad ve yorum satırlarına dokunulmaz. Sonuç satırı kaç satırın kaça açıldığını ve hangi kuralların uygulandığını söyler; çıktıyı kopyalayabilir veya .sql dosyası olarak indirebilirsiniz. Tek satıra indir seçeneği tam tersini yapar: fazla boşluklar ve satır sonları temizlenir, sorgu tek satır olur — kodun içine gömmek, tek satır bekleyen bir alana yapıştırmak veya bir log kaydıyla karşılaştırmak için. O modda da tek tırnak içindeki değerlere dokunulmaz; -- ile başlayan satır yorumları ise /* ... */ biçimine çevrilir, çünkü tek satırda -- kendinden sonraki her şeyi yorum yapar ve sorguyu çalışmaz hale getirirdi.
Bu araç sql formatter, sql formatlama, sql beautifier, sql pretty print, postgresql sql formatter aramalarıyla da biliniyor.
SQL nedir?
SQL (Structured Query Language), ilişkisel veritabanlarına soru sormanın ve veri işlemenin standart dilidir; MySQL, PostgreSQL, SQL Server, Oracle ve SQLite hep bu dilin lehçelerini konuşur. Dilin çekirdeği bildirimseldir: ne istediğinizi yazarsınız (hangi sütunlar, hangi tablodan, hangi koşulla), nasıl bulunacağını veritabanı planlar. Boşluk ve satır sonları SQL için anlam taşımaz — tek satıra sıkışmış sorgu ile özenle girintilenmiş sorgu birebir aynı çalışır; fark yalnızca okuyan insan içindir. Bu araç da o farkı üretir.
Alt sorgu (subquery) nedir?
Alt sorgu, bir sorgunun içine parantezle gömülmüş ikinci bir SELECT ifadesidir; dış sorgu onun sonucunu bir tablo ya da tek bir değer gibi kullanır. Örneğin ortalamanın üstünde maaş alanları bulmak için WHERE koşulunun sağına, ortalamayı hesaplayan ayrı bir SELECT yazılır. Alt sorgular iç içe geçebildiği için okumayı en çok zorlaştıran yapıdır: tek satırda hangi parantezin nerede kapandığı kaybolur. Biçimlendirici her alt sorguyu bir kademe içeri alarak bu katmanları merdiven gibi gösterir.
Anahtar kelime (keyword) nedir?
Anahtar kelimeler SQL'in kendi sözcükleridir: SELECT, FROM, WHERE, JOIN, GROUP BY, ORDER BY gibi. Dilin gramerini bunlar kurar; geri kalan her şey sizin verdiğiniz adlardır — tablo, sütun ve takma adlar. SQL büyük-küçük harf ayrımı yapmadığı için anahtar kelimeler nasıl yazılırsa yazılsın çalışır; büyük harfle yazmak, komutları adlardan gözle ayırmaya yarayan bir okunabilirlik geleneğidir. Bu araç dönüşümü yalnız anahtar kelimelere uygular; sizin verdiğiniz adların yazımı olduğu gibi kalır.
Tek satır mı, girintili mi?
İki yön de gerçek bir ihtiyaca karşılık gelir. Girintili biçim okumak içindir: SSMS, DBeaver veya pgAdmin gibi bir editörde açtığınız uzun bir sorguda hangi tablonun nereye bağlandığını satır satır görürsünüz. Tek satır ise taşımak içindir — sorguyu kodun içindeki bir dizgeye gömmek, tek satır bekleyen bir yapılandırma alanına yapıştırmak ya da iki sorgunun aynı olup olmadığını gözle karşılaştırmak istediğinizde satır sonları yalnızca engel olur.
Tek satıra indirirken tek tehlike satır yorumlarıdır. -- ile başlayan bir yorum, satırın sonuna kadar her şeyi kapsar; sorgu tek satıra inince arkasındaki bütün ifadeler de yorumun içine düşer ve sorgu sessizce çalışmaz hale gelir. Bu araç yorumu silmez, /* ... */ blok yorumuna çevirir: notunuz kaybolmaz, sorgu da çalışır durumda kalır. Yorumun içinde */ dizisi geçiyorsa yorum erken kapanmasın diye o dizi ayrılır.
Biçimlendirme, doğrulama değildir
Bu araç sorguyu çalıştırmaz ve söz dizimini veritabanı gibi denetlemez: var olmayan bir sütun adı, yanlış yazılmış bir tablo veya eksik bir JOIN koşulu biçimlenmiş çıktıda da aynen durur. Biçimlendirmenin katkısı başkadır — sorgu satırlara açılınca fazladan parantez, yanlış yere yazılmış koşul ve unutulmuş virgül gözle görünür hale gelir.
Kapsamı da bilerek dardır: araç tek tek SQL ifadeleri için tasarlandı. Noktalı virgülle ayrılmış birden çok ifadeyi arasına boş satır koyarak ayırır; ama saklı yordam gövdeleri, BEGIN…END blokları ve veritabanına özgü yordamsal diller (PL/SQL, T-SQL akış komutları) bu aracın işi değildir — bu tür metinlerde satırlama beklediğiniz gibi çıkmayabilir.
Anahtar kelimeler BÜYÜK mü, küçük mü yazılmalı?
SQL büyük-küçük harfe duyarlı değildir; select ile SELECT aynı çalışır. Büyük harf, dilin komutlarını tablo ve sütun adlarından gözle ayırmak için yerleşmiş bir gelenektir ve ders kitaplarıyla resmi belgelerin çoğu bu kuralı izler; okuyacak kişiyi tanımıyorsanız güvenli seçim budur.
Küçük harf ise son yıllarda özellikle kod tabanlarında yaygınlaştı: editörler anahtar kelimeleri zaten renklendirdiği için büyük harfin ayırt etme görevi kalmadı ve küçük harf gözü daha az yorar diye tercih edilir. Önemli olan seçtiğiniz kuralı proje boyunca tutarlı uygulamaktır; Dokunma seçeneği de var olan yazımı bozmadan yalnız satırlamayı düzeltmek isteyenler içindir.
Lehçe seçmek neyi değiştirir?
SQL tek bir dil değil, birbirine çok benzeyen bir diller ailesidir. Ortak çekirdek her yerde aynıdır, ama her veritabanının kendine ait yazımları vardır: PostgreSQL'de deger::int diye tür dönüştürülür, SQL Server'da satır sınırı TOP 10 ile konur ve adlar [köşeli parantez] içine alınır, MySQL'de ters tırnak kullanılır, BigQuery'de tablo adı `proje.veri.tablo` biçiminde üç parçalıdır.
Doğru lehçeyi seçmek, bu yazımların ad mı komut mu olduğunun doğru anlaşılmasını sağlar; yanlış seçim çoğu sorguda fark yaratmaz ama böyle bir yazım geçtiğinde satırlama beklenmedik olabilir. Hangisi olduğunu bilmiyorsanız Genel SQL bırakın: ortak çekirdeği bilir ve gündelik sorguların neredeyse tamamını doğru biçimlendirir. Sorgu seçtiğiniz lehçeye göre ayrıştırılamazsa araç sessizce kendi yerleşik biçimlendiricisine geçer ve sonuç satırında bunu söyler — çıktısız kalmazsınız.
Sık sorulanlar
SQL sorgusu nasıl biçimlendirilir?
Sorguyu sol panele yapıştırın; anahtar kelimeler satır başına alınmış, alt sorgular girintilenmiş hali sağ panelde anında oluşur. Kopyalayabilir veya .sql dosyası olarak indirebilirsiniz.
Sorgum sunucuya gönderiliyor mu?
Hayır. Biçimlendirme tamamen tarayıcınızda çalışır; sorgunuz, tablo adlarınız ve içindeki değerler hiçbir sunucuya gitmez. Gerçek müşteri verisi içeren WHERE koşullarını da gönül rahatlığıyla yapıştırabilirsiniz.
Sorgudaki metin değerleri ve yorumlar değişir mi?
Değişmez. Tek tırnak içindeki değerler, çift tırnak ve köşeli parantez içindeki adlar ile -- ve /* */ yorumları olduğu gibi korunur; büyük-küçük harf dönüşümü yalnız anahtar kelimelere uygulanır.
Sorguyu tek satıra nasıl indiririm?
Üstteki listeden Tek satıra indir seçeneğini seçin; fazla boşluklar ve satır sonları temizlenir, sorgu tek satır olarak sağ panelde belirir. Tek tırnak içindeki değerler aynen kalır, -- ile başlayan satır yorumları ise /* ... */ biçimine çevrilir; tek satırda -- arkasındaki her şeyi yorum yapacağı için bu çevrim sorgunun çalışır kalmasını sağlar.
Saklı yordam (stored procedure) biçimlendirilebilir mi?
Bu aracın kapsamı tek tek sorgulardır. BEGIN…END blokları ve yordamsal komutlar özel olarak tanınmaz; böyle bir metin yapıştırırsanız çıktı çalışır durumda kalır ama satırlama beklediğiniz gibi olmayabilir.
WITH ile başlayan sorgum (CTE) neden düzgün girintilenmiyordu?
Artık girintileniyor. Araç WITH ile açtığınız geçici tabloların her birini kendi kademesinde gösterir; iç içe iki CTE'de ikinci blok bir kademe daha içeri girer. Aynı şekilde CASE WHEN dallarının her biri ayrı satıra iner ve ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) gibi pencere fonksiyonlarının içi de açılır.
Hangi lehçeyi seçeceğimi bilmiyorum, ne olur?
Hiçbir şey olmaz: Genel SQL seçeneği varsayılandır ve gündelik sorguların neredeyse tamamını doğru biçimlendirir. Lehçe yalnızca o veritabanına özgü bir yazım geçtiğinde fark eder — PostgreSQL'in :: tür dönüşümü, SQL Server'ın TOP ve [köşeli parantez]i gibi. Sorguyu nereden aldığınızı biliyorsanız listeden onu seçin; bilmiyorsanız çıktıya bakın, beklediğiniz gibi değilse lehçeyi değiştirip tekrar deneyin.