Форматирование SQL
ФорматированиеФорматируйте SQL во многих диалектах (MySQL, PostgreSQL, T-SQL и др.) через sql-formatter или минифицируйте.
На этой странице
Что такое форматтер 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. Вы выбираете тот, на котором реально говорит ваша база, и форматтер разбирает запрос соответственно.
Как пользоваться#
- Вставьте запрос в панель SQL слева или нажмите Пример, чтобы загрузить короткий пример.
- Выберите Диалект на панели инструментов — диалект вашей базы. Стандартный
sqlпо умолчанию — безопасный обобщённый вариант; переключайтесь наpostgresql,mysql,tsqlи т. д., когда запрос использует специфичный для диалекта синтаксис. - Выберите Отступ: 2 пробела, 4 пробела или Табуляция. Четыре пробела распространены в SQL, потому что длинные списки столбцов так лучше читаются.
- Нажмите действие:
- Форматировать — переформатирует отступы, разбивает запрос по логическим строкам и по умолчанию переводит ключевые слова в верхний регистр, чтобы
SELECT,FROMиWHEREвыделялись на фоне идентификаторов. - Сжать — удаляет строчные комментарии
--и блочные/* */, затем схлопывает каждую последовательность пробелов в один пробел. Переводы строк становятся пробелами, что безопасно для SQL, потому что операторы заканчиваются точкой с запятой, а не переводом строки.
- Форматировать — переформатирует отступы, разбивает запрос по логическим строкам и по умолчанию переводит ключевые слова в верхний регистр, чтобы
- Прочитайте результат в панели Вывод. Возьмите его через Копировать; Очистить сбрасывает обе панели.
Ключевые возможности#
- Двенадцать диалектов. 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 — ни имена таблиц, ни литералы — не покидает вкладку.