SQL форматер и валидатор - Бесплатно форматирајте SQL упите на мрежи
Бесплатни SQL форматер и валидатор. Аутоматски форматирајте SQL са правилним увлачењем и великим словима. Тренутно проверите синтаксне грешке. Ради са MySQL, PostgreSQL, SQL Server, Oracle.
SQL форматер и валидатор
Форматирајте и валидирајте SQL упите са аутоматским увлачењем, великим словима кључних речи и детекцијом синтаксних грешака.
Dokumentacija
Шта су форматер и валидатор SQL-а?
Форматер SQL-а је алат који преписује SQL упит са уједначеним размацима, преломима редова и кључним речима написаним великим словима, како би био лакши за читање. Валидатор SQL-а проверава тај упит на структурне грешке, као што су незатворени наводници или заграде које недостају, без повезивања са базом података. Овај алат ради и једно и друго. У потпуности се извршава у прегледачу, па се текст упита никада не шаље серверу.
Како форматирати SQL упит
- Налепите или унесите SQL упит у поље за унос.
- Форматирана верзија се аутоматски појављује с десне стране, без потребе да притиснете дугме.
- Све грешке при валидацији појављују се на списку испод излаза.
- Дугме за копирање шаље форматирани упит у клипборд.
Правила за форматирање SQL-а
Писање кључних речи великим словима
Форматер пише великим словима фиксни списак кључних речи SQL-а свуда где се појављују изван ниске или идентификатора под наводницима. Списак обухвата главне клаузуле (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), речи за спајање (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, CROSS, NATURAL, ON, USING), операторе скупова (UNION, INTERSECT, EXCEPT), типове наредби (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP) и уобичајене операторе и повезнике (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, ALL, DISTINCT, VALUES, SET и још неколико).
Неке речи које личе на кључне речи остављају се онако како су унете. Агрегатне функције као што су COUNT, SUM и AVG нису на списку, па count(*) остаје написано малим словима ако је тако унето. Речи које означавају смер сортирања, ASC и DESC, као и литерали TRUE, FALSE и NULL када се појављују самостално, такође се не мењају. Текст унутар литерала ниске ('...'), идентификатора под наводницима ("...", `...` или [...]) или коментара никада се не мења, без обзира на његов садржај.
Преломи редова и увлачење
Свака главна клауза почиње у новом реду на левој маргини: SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT и OFFSET. Спајање почиње у новом реду као једна целина, па LEFT JOIN, FULL OUTER JOIN и CROSS JOIN остају заједно, уместо да се деле у два реда. Испред и иза UNION и UNION ALL оставља се празан ред, чиме се раздвајају упити које они спајају. CASE и END почињу у новом реду, а WHEN, THEN и ELSE почињу у увученом реду. Сваки зарез такође почиње нови ред, па се списак колона у SELECT или GROUP BY приказује са једном колоном по реду.
Увлачење се појављује само унутар заграда. Садржај подупита или груписаног израза увучен је за два размака на сваком нивоу угнежђености. Упит без заграда — што је случај са већином свакодневних упита — форматира се тако да је свака клауза поравната с левом маргином и да нема увлачења.
Пример: пре и после форматирања
Пре:
1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2После:
1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9Свака кључна реч написана је великим словима, а свака клауза и колона налазе се у сопственом реду. Пошто упит нема заграде, ниједан ред није увучен.
Заграде то мењају. Форматирање (select count(*) from employees e where e.department_id = d.id) у оквиру већег упита увлачи унутрашње SELECT, FROM и WHERE за два размака, а count остаје написано малим словима јер је назив функције, а не кључна реч са списка.
Шта валидатор SQL-а проверава
Валидатор тражи структурне проблеме без повезивања са базом података:
- Незатворене наводнике, заграде и коментаре. Једноструки наводник (
'), двоструки наводник ("), обрнути наводник (`), угласта заграда ([) или блок-коментар (/*) који су отворени, али никада нису затворени. - Неусклађене заграде. Број знакова
(и)изван ниски и коментара мора бити исти. - Подупити без заграда. Други
SELECTкоји се налази изван свих заграда, као уSELECT * FROM SELECT id FROM t. Два упита спојена оператором скупа (UNION,UNION ALL,INTERSECT,EXCEPT) не означавају се као грешка, јер њихови операнди не захтевају заграде. Исто важи и за две наредбе раздвојене тачком и зарезом. WHEREкоји почиње саANDилиOR. Повезник на почетку, без ичега испред њега.JOINбез одговарајућег услова. ЗаJOINје потребна клаузаONилиUSING.CROSS JOINиNATURAL JOINсу изузети, јер не прихватају такву клаузу.- Празан
GROUP BYилиORDER BY. Кључна реч клаузуле без колона после ње, на крају упита. - Непотпун услов
WHERE. Поређење без десне стране, као што јеWHERE status =без вредности, или самосталниWHEREбез ичега после њега, на крају упита. SELECTбезFROM. Означава се као грешка само када списак за избор садржи обичне називе колона. Израз, позив функције, литерал или функција која враћа вредност написана без заграда, као што јеCURRENT_DATE, важе сами за себе, па сеSELECT 1 + 1иSELECT CURRENT_DATEне означавају као грешке.- Редослед клаузула. Проверавају се два одређена услова:
GROUP BYне сме да буде испредWHERE, аORDER BYне сме да буде испредGROUP BY. Ово се проверава на највишем нивоу упита, занемарујући све што се налази унутар подупита.
Шта не проверава
Валидатор не зна да ли табеле или колоне заиста постоје, да ли спојене колоне имају компатибилне типове или како ће се упит извршавати. Такође не означава као грешку свако правило које стварна база података примењује. Два примера: HAVING без GROUP BY прихвата се јер је груписање целог резултата у једну подразумевану групу дозвољено у SQL-у, па валидатор не пријављује грешку. Исто тако, не проверава да ли се свака неагрегирана колона у списку SELECT појављује и у GROUP BY — то правило постоји у већини база података, али га овај алат не проверава. Недостајућа завршна тачка и зарез такође се не означава као грешка, јер је тачка и зарез раздвајач наредби, а не део једног упита.
Пример: грешке које валидатор открива
1SELECT id FROM orders
2JOIN users
3WHERE status =
4Овај упит производи две грешке:
- У једној или више наредби JOIN недостаје услов ON. — У делу
JOIN usersнема клаузеONилиUSING. - Услов WHERE је непотпун. — После знака једнакости у делу
status =нема вредности.
Најчешће постављана питања
Да ли овај алат ради са MySQL-ом, PostgreSQL-ом, SQL Server-ом и Oracle-ом?
Обрађује основну синтаксу SQL-а заједничку тим базама података: SELECT, JOIN, WHERE, GROUP BY и сличне клаузуле. Синтакса специфична за појединачне базе података, као што су литерали низова у PostgreSQL-у или процедурални блокови у T-SQL-у, неће покварити форматирање, али можда неће добити посебну обраду.
Да ли се SQL упит шаље серверу?
Не. Форматирање и валидација извршавају се у прегледачу. Текст упита се нигде не преноси.
Да ли пише називе функција као што су COUNT, SUM и AVG великим словима?
Не. Великим словима пишу се само кључне речи клаузула, речи за спајање и фиксни списак оператора. Називи функција као што су count, sum и avg, као и речи asc, desc, true, false и null, остају потпуно онакве какве су унете.
Да ли валидатор означава као грешку HAVING без GROUP BY?
Не. Клауза HAVING без GROUP BY групише цео резултат у једну групу, што је важећи SQL према стандарду ISO/IEC 9075, па валидатор то не третира као грешку.
Може ли валидатор да открије сваку грешку у SQL-у?
Не. Проверава структуру — заграде, наводнике, неколико правила о редоследу клаузула и неке уобичајене логичке пропусте, као што је JOIN без услова. Не проверава називе табела или колона, типове података нити перформансе упита. За потврду да се упит исправно извршава и даље је потребна стварна веза са базом података.
Да ли форматирање мења начин извршавања упита?
Не. Форматирање мења само размаке и писање незаштићених кључних речи великим словима. Све унутар ниске, идентификатора под наводницима или коментара копира се без измена, па упит има потпуно исто значење као и пре.