Przejdź do treści

Formatowacz i Walidator SQL - Formatuj Zapytania SQL Online Bezpłatnie

Bezpłatny formatowacz i walidator SQL. Automatycznie formatuj SQL z odpowiednim wcięciem i kapitalizacją. Natychmiastowo sprawdzaj błędy składni. Działa z MySQL, PostgreSQL, SQL Server, Oracle.

Formatowanie i Walidacja SQL

Formatuj i sprawdzaj poprawność zapytań SQL z automatycznym wcięciem, kapitalizacją słów kluczowych i wykrywaniem błędów składni.

Wprowadź zapytanie SQL, aby zobaczyć sformatowany wynik.
Kalkulator załadunku...
📚

Dokumentacja

Czym jest formater i walidator SQL?

Formater SQL to narzędzie, które przepisuje zapytanie SQL z zachowaniem spójnych odstępów, podziałów wierszy i wielkich liter w słowach kluczowych, dzięki czemu łatwiej je czytać. Walidator SQL sprawdza to samo zapytanie pod kątem błędów strukturalnych, takich jak niezamknięty cudzysłów lub brakujący nawias, bez łączenia się z bazą danych. To narzędzie wykonuje obie te czynności. Działa w całości w przeglądarce, więc tekst zapytania nigdy nie jest wysyłany na serwer.

Jak formatować zapytanie SQL

  1. Wklej lub wpisz zapytanie SQL w polu wejściowym.
  2. Sformatowana wersja pojawia się automatycznie po prawej stronie, bez konieczności naciskania przycisku.
  3. Wszelkie błędy walidacji pojawiają się na liście poniżej wyniku.
  4. Przycisk kopiowania wysyła sformatowane zapytanie do schowka.

Reguły formatowania SQL

Wielkie litery w słowach kluczowych

Formater zapisuje wielkimi literami ustaloną listę słów kluczowych SQL, gdy występują one poza literałem tekstowym lub identyfikatorem ujętym w cudzysłów. Lista obejmuje główne klauzule (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), słowa związane z łączeniem tabel (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, CROSS, NATURAL, ON, USING), operatory zbiorów (UNION, INTERSECT, EXCEPT), typy instrukcji (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP) oraz typowe operatory i spójniki (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, ALL, DISTINCT, VALUES, SET oraz kilka innych).

Niektóre słowa przypominające słowa kluczowe pozostają w zapisanej postaci. Funkcje agregujące, takie jak COUNT, SUM i AVG, nie znajdują się na liście, więc count(*) pozostaje zapisane małymi literami, jeśli tak je wpisano. Słowa określające kierunek sortowania ASC i DESC oraz występujące samodzielnie literały TRUE, FALSE i NULL również pozostają bez zmian. Tekst wewnątrz literału tekstowego ('...'), identyfikatora ujętego w cudzysłów ("...", `...` lub [...]) albo komentarza nigdy nie jest zmieniany, niezależnie od tego, co zawiera.

Podziały wierszy i wcięcia

Każda główna klauzula zaczyna się w nowym wierszu przy lewym marginesie: SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT i OFFSET. Złączenie tabel zaczyna się w nowym wierszu jako jedna całość, więc LEFT JOIN, FULL OUTER JOIN i CROSS JOIN pozostają razem, zamiast być dzielone na dwa wiersze. Przed i po UNION oraz UNION ALL pojawia się pusty wiersz, który oddziela łączone zapytania. CASE i END zaczynają się w nowym wierszu, a WHEN, THEN i ELSE zaczynają wiersz z wcięciem. Każdy przecinek również rozpoczyna nowy wiersz, więc lista kolumn w SELECT lub GROUP BY zawiera jedną kolumnę w każdym wierszu.

Wcięcia pojawiają się wyłącznie wewnątrz nawiasów. Zawartość podzapytania lub wyrażenia grupowanego jest przesunięta o dwa odstępy dla każdego poziomu zagnieżdżenia. Zapytanie bez nawiasów — czyli większość codziennych zapytań — jest formatowane tak, że każda klauzula przylega do lewego marginesu i nie ma żadnych wcięć.

Przykład: przed i po formatowaniu

Przed:

1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2

Po:

1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9

Każde słowo kluczowe jest zapisane wielkimi literami, a każda klauzula i kolumna znajduje się w osobnym wierszu. Ponieważ zapytanie nie zawiera nawiasów, żaden wiersz nie jest wcięty.

Nawiasy to zmieniają. Sformatowanie (select count(*) from employees e where e.department_id = d.id) jako części większego zapytania powoduje wcięcie wewnętrznych SELECT, FROM i WHERE o dwa odstępy, a count pozostaje zapisane małymi literami, ponieważ jest nazwą funkcji, a nie słowem kluczowym z listy.

Co sprawdza walidator SQL

Walidator wyszukuje problemy strukturalne bez łączenia się z bazą danych:

  • Niezamknięte cudzysłowy, nawiasy i komentarze. Pojedynczy cudzysłów ('), cudzysłów podwójny ("), grawis (`), nawias kwadratowy ([) lub komentarz blokowy (/*), który został otwarty, ale nigdy nie został zamknięty.
  • Niezrównoważone nawiasy. Liczba ( i ) poza tekstami i komentarzami musi być taka sama.
  • Podzapytania bez nawiasów. Drugie SELECT znajdujące się poza dowolnymi nawiasami, na przykład SELECT * FROM SELECT id FROM t. Dwa zapytania połączone operatorem zbiorów (UNION, UNION ALL, INTERSECT, EXCEPT) nie są oznaczane jako błędne, ponieważ ich argumenty nie wymagają nawiasów. Nie są również oznaczane dwa polecenia oddzielone średnikiem.
  • WHERE zaczynające się od AND lub OR. Spójnik występujący na początku, bez żadnego wcześniejszego elementu.
  • JOIN bez odpowiadającego warunku. JOIN wymaga klauzuli ON lub USING. CROSS JOIN i NATURAL JOIN są wyjątkami, ponieważ nie przyjmują takiej klauzuli.
  • Puste GROUP BY lub ORDER BY. Słowo kluczowe klauzuli bez następujących po nim kolumn, na końcu zapytania.
  • Niepełny warunek WHERE. Niedokończone porównanie, takie jak WHERE status = bez wartości, albo samodzielne WHERE bez dalszej treści, na końcu zapytania.
  • SELECT bez FROM. Błąd jest zgłaszany tylko wtedy, gdy lista wyboru zawiera zwykłe nazwy kolumn. Wyrażenie, wywołanie funkcji, literał lub funkcja zwracająca wartość zapisana bez nawiasów, taka jak CURRENT_DATE, jest samodzielnie prawidłowa, więc SELECT 1 + 1 i SELECT CURRENT_DATE nie są oznaczane jako błędne.
  • Kolejność klauzul. Wykonywane są dwa konkretne sprawdzenia: GROUP BY nie może występować przed WHERE, a ORDER BY nie może występować przed GROUP BY. Sprawdzenia dotyczą najwyższego poziomu zapytania i pomijają zawartość podzapytań.

Czego nie sprawdza

Walidator nie wie, czy tabele lub kolumny rzeczywiście istnieją, czy typy łączonych kolumn są zgodne ani jak wykona się zapytanie. Nie zgłasza też każdego naruszenia reguł egzekwowanych przez rzeczywistą bazę danych. Dwa przykłady: użycie HAVING bez GROUP BY jest akceptowane, ponieważ zgrupowanie całego wyniku w jedną niejawną grupę jest dozwolone w SQL, więc walidator nie zgłasza w tym przypadku błędu. Podobnie nie sprawdza, czy każda nieagregowana kolumna na liście SELECT występuje również w GROUP BY — taka reguła obowiązuje w większości baz danych, ale to narzędzie jej nie testuje. Brak końcowego średnika również nie jest zgłaszany, ponieważ średnik jest separatorem poleceń, a nie częścią pojedynczego zapytania.

Przykład: błędy wykrywane przez walidator

1SELECT id FROM orders
2JOIN users
3WHERE status =
4

To zapytanie powoduje dwa błędy:

  1. "Brakuje warunku ON w co najmniej jednym poleceniu JOIN." — JOIN users nie ma klauzuli ON ani USING.
  2. "Warunek WHERE jest niepełny." — status = nie ma wartości po znaku równości.

Najczęściej zadawane pytania

Czy to narzędzie działa z MySQL, PostgreSQL, SQL Server i Oracle?

Obsługuje podstawową składnię SQL wspólną dla tych baz danych: SELECT, JOIN, WHERE, GROUP BY i podobne klauzule. Składnia specyficzna dla danej bazy, taka jak literały tablicowe PostgreSQL lub bloki proceduralne T-SQL, nie spowoduje błędu formatowania, ale może nie zostać specjalnie obsłużona.

Czy zapytanie SQL jest wysyłane na serwer?

Nie. Formatowanie i walidacja odbywają się w przeglądarce. Tekst zapytania nie jest nigdzie przesyłany.

Czy nazwy funkcji, takie jak COUNT, SUM i AVG, są zapisywane wielkimi literami?

Nie. Wielkimi literami zapisywane są tylko słowa kluczowe klauzul, słowa związane z łączeniem tabel oraz ustalona lista operatorów. Nazwy funkcji, takie jak count, sum i avg, a także słowa asc, desc, true, false i null pozostają dokładnie w zapisanej postaci.

Czy walidator zgłasza użycie HAVING bez GROUP BY?

Nie. Klauzula HAVING bez GROUP BY grupuje cały wynik w jedną grupę, co jest prawidłowe w SQL zgodnie ze standardem ISO/IEC 9075, więc walidator nie traktuje tego jako błędu.

Czy walidator może wykryć każdy błąd SQL?

Nie. Sprawdza strukturę — nawiasy, cudzysłowy, kilka reguł kolejności klauzul oraz pewne typowe braki logiczne, takie jak JOIN bez warunku. Nie sprawdza nazw tabel ani kolumn, typów danych czy wydajności zapytania. Do potwierdzenia, że zapytanie działa prawidłowo, nadal potrzebne jest rzeczywiste połączenie z bazą danych.

Czy formatowanie zmienia sposób wykonywania zapytania?

Nie. Formatowanie zmienia tylko białe znaki i wielkość liter w nieujętych w cudzysłów słowach kluczowych. Wszystko wewnątrz tekstu, identyfikatora ujętego w cudzysłów lub komentarza jest kopiowane bez zmian, więc zapytanie ma dokładnie takie samo znaczenie jak wcześniej.

Piśmiennictwo