Красиво оформляйте 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 ... AS
Common Table Expression (CTE) — именованный подзапрос
WITH active AS (...)
Примеры SQL для практики
Форматирование простого запроса
Вход
select id,name from users where active=trueorderby created_at desclimit10
После форматирования
SELECT id, nameFROM usersWHERE active =trueORDERBY created_at DESCLIMIT10;
Теперь каждая клауза — на своей строке, а список столбцов с отступом. 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_idFROM enrollmentsWHERE 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) — заглавными, идентификаторы — строчными. Контраст помогает увидеть структуру запроса. Главное — выбрать стиль и придерживаться его.