Прескочи към съдържанието

SQL форматиращ & валидиращ инструмент - Форматирайте SQL заявки онлайн безплатно

Безплатен SQL форматиращ и валидиращ инструмент. Автоматично форматирайте SQL със правилни отстъпи и главни букви. Проверявайте синтактични грешки мигновено. Работи с MySQL, PostgreSQL, SQL Server, Oracle.

SQL форматиране и валидация

Форматирайте и валидирайте SQL заявки с автоматично отстъпване, главни букви за ключови думи и откриване на синтактични грешки.

Въведете SQL заявка, за да видите форматирания резултат.
Калкулатор за зареждане...
📚

Документация

Какво представляват форматирането и валидирането на SQL?

Форматиращият инструмент за SQL пренаписва SQL заявка с последователни интервали, нови редове и изписани с главни букви ключови думи, за да се чете по-лесно. Валидаторът за SQL проверява същата заявка за структурни грешки, като незатворена кавичка или липсваща скоба, без да се свързва с база данни. Този инструмент прави и двете. Той работи изцяло в браузъра, така че текстът на заявката никога не се изпраща към сървър.

Как се форматира SQL заявка

  1. Поставете или въведете SQL заявка в полето за въвеждане.
  2. Форматираната версия се появява автоматично вдясно, без да е необходимо да натискате бутон.
  3. Всички грешки при валидирането се показват в списък под резултата.
  4. Бутонът за копиране изпраща форматираната заявка в клипборда.

Правила за форматиране на 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

Тази заявка поражда две грешки:

  1. "В един или повече оператори JOIN липсва условието ON." — JOIN users няма клауза ON или USING.
  2. "Условието 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 без условие. Не проверява имената на таблици или колони, типовете данни или производителността на заявката. За потвърждение, че заявката се изпълнява правилно, все още е необходима реална връзка с база данни.

Променя ли форматирането начина, по който се изпълнява заявката?

Не. Форматирането променя само празните места и изписването с главни букви на ключови думи извън кавички. Всичко в низ, идентификатор в кавички или коментар се копира без промяна, така че заявката означава точно същото като преди.

Източници