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

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

[Открыть инструмент](https://demindev.ru/tools/sql-prettify/). Бесплатно, без регистрации. Для работы интерфейса нужен JavaScript.

Что учитывать: Запрос не выполняется и не проверяется по структуре базы данных.

## Для чего нужен SQL-форматтер

SQL-форматтер расставляет переносы и отступы в запросе, а также меняет регистр ключевых слов по выбранной настройке. Он помогает читать длинные `SELECT`, условия соединения и вложенные запросы при разработке и ревью.

## Почему нужно выбирать диалект SQL

SQL используется для описания запросов к реляционным данным. Разные СУБД добавляют собственные операторы, способы цитирования имен и конструкции. Запрос PostgreSQL, MySQL или Transact-SQL нельзя всегда корректно разобрать по одним общим правилам.

Выберите «Диалект» до оценки результата. Ошибка форматирования может означать несовместимый диалект, а не ошибку, которую обязательно выдаст ваша база данных.

## Ключевое слово, идентификатор и строковый литерал

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

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

## Читаемость условий соединения и фильтрации

При ревью полезно отдельно проверить связи `JOIN`, условия `ON` и фильтр `WHERE`. Например, условие для правой таблицы после `LEFT JOIN` может дать иной набор строк в `WHERE`, чем при помещении в `ON`. Выравнивание делает эти места заметнее, но не подтверждает эквивалентность двух запросов.

Также не заменяйте параметры запроса строковой склейкой только ради удобного отображения. Подстановка значений и защита от SQL-инъекций относятся к способу выполнения запроса приложением. Эта страница не подключается к базе и не создает параметризованный вызов вместо вашего кода.

## Как настроить оформление запроса

Вставьте SQL в «Исходный текст». Выберите сохранение регистра, прописные или строчные ключевые слова, стиль отступов и число пробелов. Результат пересчитывается автоматически; файл скачивается с расширением `.sql`.

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

## Форматирование не заменяет выполнение и анализ плана

Запрос не отправляется в СУБД. Инструмент не знает, существуют ли таблицы и поля, выданы ли права и сколько строк изменит оператор. Он не определяет стоимость запроса и не создает индексы.

Для поиска причины медленной работы проверяйте план выполнения в целевой базе на подходящих данных. Для `UPDATE` и `DELETE` отдельно проверяйте условие отбора: аккуратные отступы не подтверждают безопасность операции.
