Форматтер SQL

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

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

Редактор запросовОбработка в браузере · без выполнения SQL
Загрузить пример
213 / 50 000 символов

02 Результат форматирования

Исходный запрос остаётся без изменений

Подготовьте запрос из лога к разбору

SQL из ORM или журнала приложения нередко занимает одну длинную строку. Форматтер SQL добавляет переносы и отступы, чтобы было проще найти список столбцов, условие JOIN или вложенный запрос. Это удобно при разборе чужого кода и подготовке к ревью.

Вставьте запрос, укажите диалект и выберите два пробела, четыре пробела либо табуляцию. Настройте регистр ключевых слов и запустите форматирование. Исходник останется рядом с результатом. При изменении текста или параметров старый результат очищается — перед копированием его нужно создать заново.

Выбирайте диалект исходного запроса

Доступны стандартный SQL, PostgreSQL, MySQL, MariaDB, SQLite, SQL Server (T-SQL), Oracle SQL, BigQuery и Snowflake. Диалект определяет, как распознаются специфические ключевые слова и обозначения идентификаторов, например обратные кавычки или квадратные скобки.

Переключатель не переносит запрос в другую СУБД. Он не заменяет функции и не адаптирует схему данных. Поддержка Oracle SQL также не означает, что можно форматировать любые хранимые процедуры.

Читаемость помогает проверке, но не заменяет её

Отдельные блоки WHERE и HAVING помогают сопоставить фильтрацию строк и групп. Отступы показывают уровни CTE и подзапросов. Однако по аккуратному оформлению нельзя определить, правильно ли запрос реализует нужное условие.

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

Примеры форматирования SQL

В примерах используются вымышленные данные, ключевые слова в верхнем регистре и отступ в два пробела. Загрузка примера в редактор также выбирает нужный диалект.

JOIN и агрегирование

Оплаченные заказы группируются по клиенту, затем отбираются по сумме. Условия соединения и фильтры видны отдельно.

SELECT
  c.id,
  c.name,
  count(o.id) AS order_count,
  sum(o.total) AS revenue
FROM
  customers c
  JOIN orders o ON o.customer_id = c.id
WHERE
  o.status = 'paid'
GROUP BY
  c.id,
  c.name
HAVING
  sum(o.total) > 1000
ORDER BY
  revenue DESC;
Вернуться к форматтеру

CTE и оконная функция

CTE в PostgreSQL с ROW_NUMBER нумерует заказы каждого клиента. Отступы показывают вложенный SELECT.

WITH
  ranked_orders AS (
    SELECT
      id,
      customer_id,
      total,
      row_number() OVER (
        PARTITION BY
          customer_id
        ORDER BY
          created_at DESC
      ) AS position
    FROM
      orders
    WHERE
      created_at >= date '2024-01-01'
  )
SELECT
  customer_id,
  id,
  total
FROM
  ranked_orders
WHERE
  position = 1
ORDER BY
  customer_id;
Вернуться к форматтеру

INSERT и комментарии

Пример MySQL с обратными кавычками, комментарием и точкой с запятой внутри строки. Содержимое строки остаётся данными.

-- Fictional seed data
INSERT INTO
  `products` (`sku`, `name`, `price`)
VALUES
  ('DEMO-01', 'Desk lamp; warm light', 29.95),
  ('DEMO-02', 'Reader''s notebook', 8.50);
Вернуться к форматтеру

Частые вопросы

Как сохранить результат?

Скопируйте его кнопкой или скачайте файл formatted.sql. Форматирование также запускается сочетанием Ctrl+Enter либо Command+Enter в macOS.

Запрос отправляется на сервер?

Обработка идёт в Web Worker внутри браузера. Инструмент не отправляет SQL в API форматирования, не подключается к базе, не сохраняет ввод на постоянной основе и не добавляет его в URL.

Форматтер проверяет ошибки и ускоряет запрос?

Нет. Он упорядочивает пробелы, переносы и регистр ключевых слов. Таблицы, столбцы, типы, права доступа и планы выполнения не проверяются. Для валидации и анализа производительности нужны инструменты СУБД.

Можно вставить несколько операторов?

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

Почему форматирование завершается ошибкой?

Проверьте диалект, парность кавычек и скобок. Шаблоны и вставки из кода приложения могут не распознаваться. Лимит ввода — 50 000 символов; через десять секунд задача останавливается. Длинные скрипты лучше разбить на части.

Что будет с комментариями и параметрами?

Комментарии сохраняются, но их оформление может измениться. Поддерживаемые параметры выбранного диалекта не заменяются значениями. Комментарии, отключающие форматтер, могут оставить отдельные участки без обработки.

SQL Formatter · GitHub

Вернуться к форматтеру