Menu
Русский

Форматировщик SQL

Красиво оформляйте SQL-запросы с умными отступами.

Последнее обновление

Ключевые слова
Отступ
ВводВставьте SQL, чтобы начать
Вывод
Отформатированный SQL появится здесь — переформатируйте, выровняйте и скопируйте в один клик.

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

SQL-форматтер берёт плотный, однострочный или сгенерированный ORM-ом SQL и переписывает его с понятными отступами и переносами строк. Разработчики и аналитики обращаются к нему, когда разбирают джойны, ловят баги в фильтрах, причёсывают вывод ORM, прикладывают запросы к тикетам и документации или разбирают план выполнения.

Форматирование не меняет *того, что делает* запрос — оно меняет лишь то, насколько легко его прочитать человеку. Когда раскладка единообразная, связь между SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING и ORDER BY становится гораздо нагляднее, особенно в запросах с подзапросами и CTE.

У SQL много *диалектов*: PostgreSQL, MySQL, SQLite, T-SQL (Microsoft SQL Server), Oracle, BigQuery — каждый расширяет стандарт собственным синтаксисом. Хороший форматтер понимает выбранный диалект и не ломает специфичные для СУБД конструкции.

Что вы поймёте, форматируя SQL

  • У каждой клаузы своя роль: SELECT выбирает столбцы, FROM — таблицы, WHERE фильтрует строки, GROUP BY агрегирует, ORDER BY сортирует.
  • Аккуратные отступы делают видимыми вложенные запросы, джойны и условия, которые в одну строку просто незаметны.
  • Диалект имеет значение — RETURNING, LIMIT, TOP и идентификаторы в кавычках/скобках ([col] против "col") между СУБД не переносимы.

Как отформатировать SQL-запрос по шагам

  1. Вставьте запрос

    Закиньте SQL в поле ввода. Подойдёт однострочный, сгенерированный ORM-ом или частично оформленный код.

  2. Выберите диалект

    Укажите PostgreSQL, MySQL, SQLite или T-SQL — тогда форматтер корректно обработает специфичные ключевые слова вроде LIMIT, TOP или RETURNING.

  3. Настройте стиль

    Выберите регистр ключевых слов (стандарт — UPPERCASE) и ширину отступа (2 или 4 пробела). Большинство команд берут UPPERCASE + 2 пробела.

  4. Прочитайте результат

    Каждая клауза — на своей строке, джойны выровнены, подзапросы с отступом. Комментарии сохраняются.

  5. Скопируйте обратно в проект

    Вставьте отформатированный запрос в миграцию, raw-запрос ORM или BI-инструмент. Всё происходит в браузере.

Шпаргалка по клаузам SQL

Клаузы, которые встречаются в 95% SELECT-запросов, в порядке их концептуальной обработки. Ссылки на доки: PostgreSQL SELECT, MySQL SELECT.

КлаузаНазначениеПример
SELECTКакие столбцы или выражения вернутьSELECT id, name
FROMИз какой таблицы (или таблиц) брать данныеFROM users
JOIN ... ONСоединить строки с другой таблицейJOIN orders ON orders.user_id = users.id
WHEREФильтрация строк до группировкиWHERE active = true
GROUP BYГруппировка строк с одинаковыми значениямиGROUP BY country
HAVINGФильтрация уже сгруппированных данныхHAVING COUNT(*) > 10
ORDER BYСортировка результатаORDER BY created_at DESC
LIMIT / OFFSETПагинация результатаLIMIT 20 OFFSET 40
WITH ... ASCommon Table Expression (CTE) — именованный подзапросWITH active AS (...)

Примеры SQL для практики

Форматирование простого запроса

Вход
select id,name from users where active=true order by created_at desc limit 10
После форматирования
SELECT  id,  nameFROM usersWHERE active = trueORDER BY created_at DESCLIMIT 10;

Теперь каждая клауза — на своей строке, а список столбцов с отступом. Code review такого запроса станет в 10 раз приятнее.

Разбираем джойн

Вход
select u.name,o.total from users u join orders o on o.user_id=u.id where o.total>100
После форматирования
SELECT  u.name,  o.totalFROM users uJOIN orders o ON o.user_id = u.idWHERE o.total > 100;

Алиасы таблиц (users u, orders o) делают список столбцов короче. Строка JOIN ... ON явно показывает связь между таблицами.

Читаем вложенный подзапрос

Вход
select * from users where id in (select user_id from enrollments where course_id=5)
После форматирования
SELECT *FROM usersWHERE id IN (  SELECT user_id  FROM enrollments  WHERE course_id = 5);

Отступ внутреннего запроса наглядно показывает зависимость. Когда структура видна, многие подзапросы легко переписать через JOIN или CTE.

Типичные ошибки при форматировании SQL

  • Считать отформатированный SQL *правильным* SQL. Форматирование меняет вёрстку, а не смысл — красивый запрос всё ещё может возвращать не то.
  • Поправить запрос «заодно с форматированием» и забыть перепроверить результат.
  • Не учитывать диалект: LIMIT 10 в PostgreSQL, TOP 10 в T-SQL и FETCH FIRST 10 ROWS ONLY в стандартном SQL делают одно и то же.

FAQ по SQL-форматтеру

Меняет ли форматирование результат запроса?
Нет. Меняются только пробелы и регистр. СУБД распарсит оба варианта в один и тот же план запроса, и набор строк на выходе будет одинаковый.
Зачем вообще форматировать SQL?
Читабельный SQL проще отлаживать, проверять на ревью, объяснять и поддерживать — особенно когда в запросе много джойнов, подзапросов, CTE или оконных функций.
Что такое диалект SQL?
Диалект — это специфичное для конкретной СУБД расширение стандартного SQL. У PostgreSQL, MySQL, SQLite, T-SQL (SQL Server), Oracle и BigQuery есть свой синтаксис поверх стандарта.
Может ли форматтер починить сломанный запрос?
Форматтер может подсветить проблемы с синтаксисом, переписав запрос в структурированном виде, но он не знает вашу схему и не гарантирует логическую корректность запроса.
Стоит ли писать ключевые слова SQL заглавными?
Большинство стайл-гайдов рекомендуют именно так: ключевые слова (SELECT, FROM, WHERE) — заглавными, идентификаторы — строчными. Контраст помогает увидеть структуру запроса. Главное — выбрать стиль и придерживаться его.

Узнать больше

Другие инструменты разработчика

Учитесь программировать с Coddy

НАЧАТЬ