Читаемый SQL на вашем диалекте
Этот SQL форматер принимает запрос любой длины, даже несколько операторов сразу, и единообразно расставляет отступы: одно предложение на строку, столбцы и условия выровнены, ключевые слова в нужном вам регистре. Он понимает синтаксис более пятнадцати диалектов, от PostgreSQL, MySQL и SQL Server до BigQuery, Snowflake и Oracle PL/SQL, поэтому операторы, кавычки и плейсхолдеры каждого диалекта сохраняются. Переключитесь на «Сжать», чтобы снова собрать запрос в одну строку для конфигурационного файла или строки в коде. Всё работает в вашем браузере; запросы никуда не загружаются.
Как отформатировать SQL-запрос
- 1Вставьте SQL в левую панель или начните с примера запроса.
- 2Выберите диалект, на котором написан запрос. Standard SQL подходит для большинства простых запросов; правильный диалект важен для таких вещей, как приведения
::в PostgreSQL, идентификаторы в обратных кавычках в MySQL или[brackets]в SQL Server. - 3Задайте регистр ключевых слов и отступы, а в разделе Дополнительные параметры — регистр типов данных и функций, табличные отступы, положение
AND/ORи пустые строки между операторами. - 4Отформатированный запрос появляется справа по мере ввода. Если запрос не удаётся разобрать, показываются строка и столбец с ошибкой.
- 5Скопируйте результат, скачайте его как файл
.sqlили выберите Сжать, чтобы свернуть его в одну строку.
Зачем форматировать SQL?
SQL пишут один раз, а читают много раз: на code review, в логе медленных запросов, в миграции, которую кому-то придётся отлаживать в 2 часа ночи. Запрос, сгенерированный ORM или скопированный из лога, обычно приходит одной огромной строкой. Если каждое предложение стоит на своей строке, а подзапросы выделены отступом, структура становится видна: какие таблицы соединяются, по чему и какие условия где действуют.
Единое форматирование также уменьшает диффы. Когда вся команда форматирует запросы одинаково, изменённое условие видно как одна изменённая строка, а не как перестроенный абзац.
Параметры форматирования
- Регистр ключевых слов
- UPPER выделяет SELECT, FROM и WHERE на фоне имён таблиц и столбцов — самое распространённое соглашение. lower подойдёт командам, которым заглавные буквы кажутся шумными. «Как есть» оставляет ключевые слова в том виде, в каком вы их набрали.
- Отступы
- Два или четыре пробела либо табуляция. Табличные стили вместо этого дополняют ключевые слова до столбца фиксированной ширины, чтобы выражения после них были выровнены.
- Положение AND / OR
- «В начале строки» ставит каждый логический оператор в начало строки, так что одно условие легко закомментировать; «в конце строки» оставляет его в конце предыдущей строки.
- Ширина выражения
- Выражения в скобках короче этого числа символов остаются на одной строке; более длинные разбиваются.
- Плотные операторы
- Пишет a+b вместо a + b. Компактно, но читается хуже.
Как выбрать диалект
Диалекты SQL различаются сильнее, чем кажется: как экранируются идентификаторы ("name", `name` или [name]), как выглядит плейсхолдер (?, $1, :name, @param) и какие слова зарезервированы. Форматер использует отдельную грамматику для каждого диалекта, поэтому не примет тело функции $$ в PostgreSQL или комментарий # в MySQL за что-то другое.
Если вы видите ошибку разбора для запроса, который точно корректен, первым делом проверьте диалект. Standard SQL намеренно строг и знает не все расширения производителей.
Сжатие SQL
Сжатие — противоположность форматирования: комментарии удаляются, а все пробельные символы сводятся к одиночным пробелам, и получается одна строка, которую можно вставить в YAML-файл, переменную окружения или строковый литерал. Строковые литералы, идентификаторы в кавычках и тела в долларовых кавычках копируются без изменений, поэтому значение вроде 'two spaces' сохраняет оба пробела. Подсказки оптимизатора вида /*+ … */ и исполняемые комментарии MySQL /*! … */ сохраняются, потому что влияют на выполнение запроса.
Работаете с JSON? JSON Formatter делает то же самое для JSON-документов, а минификатор кода обрабатывает CSS, JavaScript и HTML.
Часто задаваемые вопросы
- Отправляется ли мой SQL на сервер?
- Нет. Форматирование и сжатие полностью выполняются в вашем браузере, поэтому запросы с именами таблиц, данными клиентов или учётными данными не покидают ваше устройство.
- Какие диалекты SQL поддерживаются?
- Standard SQL, PostgreSQL, MySQL, MariaDB, SQLite, SQL Server (T-SQL), Oracle PL/SQL, BigQuery, Snowflake, Amazon Redshift, Spark SQL, Hive, Trino и Presto, DuckDB, ClickHouse, IBM Db2 и Db2 for IBM i, SingleStoreDB, TiDB и Couchbase N1QL.
- Меняет ли форматирование то, что делает запрос?
- Нет. Меняются только пробелы и, если вы выберете, регистр ключевых слов, типов данных и функций. Идентификаторы в кавычках и строковые литералы никогда не изменяются. Менять регистр идентификаторов без кавычек безопасно в большинстве СУБД, но оставьте «Как есть», если ваша база данных чувствительна к их регистру.
- Почему возникает ошибка разбора?
- Либо в запросе есть синтаксическая ошибка, например незакрытая скобка или кавычка, либо он использует синтаксис, которого нет в выбранном диалекте. В сообщении указаны строка и столбец, где остановился разбор; попробуйте диалект, который реально использует ваша СУБД.
- Можно ли отформатировать несколько операторов сразу?
- Да. Разделите их точкой с запятой — каждый будет отформатирован по очереди, с выбранным вами числом пустых строк между ними.
- Сохраняются ли комментарии?
- При форматировании — да: строчные и блочные комментарии остаются на месте. Сжатие удаляет их, кроме подсказок оптимизатора и исполняемых комментариев MySQL.
- Как сжать SQL-запрос в одну строку?
- Выберите «Сжать» вверху инструмента. Комментарии удаляются, пробелы сводятся, а строковые литералы и идентификаторы в кавычках остаются точно такими, как написаны.