Инструменты
Руководства

Форматирование SQL

Форматирование

Форматируйте SQL во многих диалектах (MySQL, PostgreSQL, T-SQL и др.) через sql-formatter или минифицируйте.

100 % на клиенте Без бэкенда
SQL
Вывод
На этой странице

Что такое форматтер SQL?#

Форматтер SQL превращает запрос, написанный для движка, — часто утрамбованный в одну строку или вытащленный из лога со случайными отступами, — в запрос, написанный для человека. Ключевые слова уходят на отдельные строки, столбцы выстраиваются, подзапросы шагают на уровень внутрь, а WHERE с пятью условиями AND перестаёт быть стеной текста. Обратная операция, минификация, схлопывает все эти пробелы обратно в одну строку — на случай, когда запрос должен проехать через конфиг-файл или параметр API.

Что делает форматирование SQL занятным, — у каждой СУБД свой диалект. Запрос Postgres с RETURNING, запрос MySQL с идентификаторами в обратных апострофах, запрос SQL Server с TOP (n) и запрос BigQuery со структурами и массивами выглядят по-разному, а форматтер, делающий вид, что универсальный SQL один, в краевых случаях ошибётся незаметно. Эта страница решает это через sql-formatter с явным выбором диалекта: стандартный SQL, MySQL, MariaDB, PostgreSQL, SQLite, T-SQL, PL/SQL, BigQuery, Redshift, Snowflake, DB2 и Trino. Вы выбираете тот, на котором реально говорит ваша база, и форматтер разбирает запрос соответственно.

Как пользоваться#

  1. Вставьте запрос в панель SQL слева или нажмите Пример, чтобы загрузить короткий пример.
  2. Выберите Диалект на панели инструментов — диалект вашей базы. Стандартный sql по умолчанию — безопасный обобщённый вариант; переключайтесь на postgresql, mysql, tsql и т. д., когда запрос использует специфичный для диалекта синтаксис.
  3. Выберите Отступ: 2 пробела, 4 пробела или Табуляция. Четыре пробела распространены в SQL, потому что длинные списки столбцов так лучше читаются.
  4. Нажмите действие:
    • Форматировать — переформатирует отступы, разбивает запрос по логическим строкам и по умолчанию переводит ключевые слова в верхний регистр, чтобы SELECT, FROM и WHERE выделялись на фоне идентификаторов.
    • Сжать — удаляет строчные комментарии -- и блочные /* */, затем схлопывает каждую последовательность пробелов в один пробел. Переводы строк становятся пробелами, что безопасно для SQL, потому что операторы заканчиваются точкой с запятой, а не переводом строки.
  5. Прочитайте результат в панели Вывод. Возьмите его через Копировать; Очистить сбрасывает обе панели.

Ключевые возможности#

  • Двенадцать диалектов. MySQL, MariaDB, PostgreSQL, SQLite, T-SQL, PL/SQL, BigQuery, Redshift, Snowflake, DB2, Trino плюс обобщённый стандартный SQL. Грамматика форматтера меняется соответственно, поэтому специфичные для диалекта ключевые слова расставляются правильно.
  • Регистр ключевых слов. «Форматировать» по умолчанию переводит ключевые слова в верхний регистр (select становится SELECT) и не трогает ваши идентификаторы. Это чисто косметика, никогда не меняющая того, что делает запрос.
  • Безопасная минификация. Пробелы схлопываются до одиночных; SQL завершается точкой с запятой, поэтому слияние строк не может склеить два оператора так, как это бывает в языках, чувствительных к переводам строк.
  • Удаление комментариев при минификации. При сжатии убираются и --, и /* */, уплотняя payload.
  • Две панели, готово к копированию, полностью на стороне клиента. Форматтер работает в вашем браузере; запрос никуда не отправляется.

Разбор примера#

Отчётный запрос, сваленный в одну строку, с комментарием, соединением и GROUP BY:

Ввод:

select u.id,u.name,count(o.id) as orders from users u join orders o on o.user_id=u.id where u.status='active' and o.created_at >= '2026-01-01' group by u.id,u.name order by orders desc

Выберите postgresql как диалект, затем нажмите Форматировать с отступом 2 пробела:

SELECT
  u.id,
  u.name,
  count(o.id) AS orders
FROM
  users u
  JOIN orders o ON o.user_id = u.id
WHERE
  u.status = 'active'
  AND o.created_at >= '2026-01-01'
GROUP BY
  u.id,
  u.name
ORDER BY
  orders DESC

У каждого предложения теперь своя строка, условие соединения видно, а два предиката WHERE разбиты, поэтому вы с первого взгляда понимаете, что фильтр по дате — >=, а не >. Регистр ключевых слов стал верхним, а имена столбцов остались как написаны. Нажмите Сжать на том же входе — и вы получите однострочник обратно, готовый для вставки в конфиг или параметр ?query=:

select u.id,u.name,count(o.id) as orders from users u join orders o on o.user_id=u.id where u.status='active' and o.created_at >= '2026-01-01' group by u.id,u.name order by orders desc

FAQ#

Какой диалект выбрать?#

Под вашу базу. Если не уверены, обобщённый sql — разумная отправная точка, корректно обрабатывающая распространённые предложения. Переключайтесь на конкретный диалект, когда запрос использует синтаксис, которого обобщённая грамматика не ждёт, — RETURNING (Postgres), идентификаторы в обратных апострофах (MySQL), TOP (n) (T-SQL) или литералы структур/массивов (BigQuery). Неверный диалект обычно всё равно форматирует, но может поставить экзотическое ключевое слово не туда.

Почему «Форматировать» переводит ключевые слова в верхний регистр, а имена столбцов — нет?#

Потому что верхний регистр ключевых слов — это соглашение читаемости, никогда не меняющее смысл (SELECT и select для движка идентичны), тогда как ваши идентификаторы могут быть чувствительны к регистру (Postgres «сворачивает» незакавыченные идентификаторы в нижний регистр; MySQL на некоторых платформах чувствителен к регистру). Не трогать идентификаторы — безопасное значение по умолчанию. Если предпочитаете ключевые слова в нижнем регистре, отформатируйте запрос, а затем пройдитесь вручную.

Сохраняет ли минификация многооператорные скрипты?#

Она схлопывает каждую последовательность пробелов в один пробел, включая переводы строк, но точки с запятой оставляет ровно там, где они были. Поэтому SELECT 1; SELECT 2; остаётся двумя операторами, разделёнными ;. Тем не менее для длинного миграционного скрипта со множеством операторов однострочный минифицированный вид тяжело читать и тяжело отлаживать — минификация подходит для одиночного запроса или короткой пачки.

Мой запрос куда-то отправляется?#

Нет. Форматтер встроен в страницу и работает локально в вашем браузере. Никакая часть вашего SQL — ни имена таблиц, ни литералы — не покидает вкладку.