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.
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
- Wklej lub wpisz zapytanie SQL w polu wejściowym.
- Sformatowana wersja pojawia się automatycznie po prawej stronie, bez konieczności naciskania przycisku.
- Wszelkie błędy walidacji pojawiają się na liście poniżej wyniku.
- 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;
2Po:
1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9Każ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
SELECTznajdujące się poza dowolnymi nawiasami, na przykładSELECT * 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. WHEREzaczynające się odANDlubOR. Spójnik występujący na początku, bez żadnego wcześniejszego elementu.JOINbez odpowiadającego warunku.JOINwymaga klauzuliONlubUSING.CROSS JOINiNATURAL JOINsą wyjątkami, ponieważ nie przyjmują takiej klauzuli.- Puste
GROUP BYlubORDER 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 jakWHERE status =bez wartości, albo samodzielneWHEREbez dalszej treści, na końcu zapytania. SELECTbezFROM. 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 jakCURRENT_DATE, jest samodzielnie prawidłowa, więcSELECT 1 + 1iSELECT CURRENT_DATEnie są oznaczane jako błędne.- Kolejność klauzul. Wykonywane są dwa konkretne sprawdzenia:
GROUP BYnie może występować przedWHERE, aORDER BYnie może występować przedGROUP 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 =
4To zapytanie powoduje dwa błędy:
- "Brakuje warunku ON w co najmniej jednym poleceniu JOIN." —
JOIN usersnie ma klauzuliONaniUSING. - "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.