Как форматировать SQL-запросы ради читаемости (и меньшего числа ошибок)
Почему единый стиль SQL важен, какие правила стоит принять и как привести запрос в порядок или минифицировать его одним кликом — бесплатно и прямо в браузере.
Первый вариант запроса почти никогда не совпадает с тем, который хочется перечитывать через полгода. Начинается всё с select * from users where active = 1, потом добавляется join, group by, подзапрос — и вот перед вами строка в 300 символов, где нужное условие спрятано где-то посередине. SQL-форматтер превращает это в текст, который реально можно прочитать, и делает всю работу в браузере, так что запрос не уходит с вашего компьютера.
Зачем вообще форматировать
Читаемый SQL ловит ошибки. Когда каждая клауза на своей строке, а все AND выстроены друг под другом, забытое условие join или случайное декартово произведение сразу бросается в глаза. Схлопните тот же запрос в одну строку — и та же ошибка спрячется на самом видном месте.
Есть и сторона код-ревью. Диффы отформатированного SQL меньше и понятнее: поменяли один столбец — и в пул-реквесте видно одну изменённую строку, а не перетасованный абзац. Кто хоть раз разбирал хранимую процедуру, записанную одной строкой на 2000 символов, знает, чем это оборачивается.
И ещё есть простая цена перечитывания собственного кода. Отформатированный запрос можно открыть и понять, не собирая его в голове заново строка за строкой.
Правила, которые действительно помогают
Основную работу делают несколько привычек:
- Ключевые слова в одном регистре. Заглавные
SELECT,FROM,WHEREвыбирают чаще всего: так каркас запроса сразу отделяется от ваших имён таблиц и столбцов. - По одному столбцу на строку в списке выборки. Десять столбцов в одну строку читать мучительно; разбитые построчно, они выглядят списком, каким и являются.
- Join и условия с отступом под своей клаузой:
ONдержится рядом со своимJOIN, а каждыйANDуходит на отдельную строку.
Всё это инструмент расставляет сам. Можно переключить ключевые слова в нижний регистр или оставить исходное написание, а для отступа выбрать два пробела, четыре или табуляцию.
Форматировать для чтения, минифицировать для отправки
Форматирование и минификация тянут в разные стороны, и обе штуки полезны. Форматирование — для людей: ревью, отладка, написание. Минификация убирает комментарии и собирает всё обратно в одну строку — это то, что нужно, когда запрос вставляют в конфиг, в строку лога или в одноразовый скрипт, где переносы только мешают.
SQL-форматтер умеет и то и другое и не спотыкается о диалекты. Обратные кавычки MySQL, квадратные скобки SQL Server и приведения :: из PostgreSQL проходят туда-обратно без изменений. Вставьте целый файл миграции с несколькими инструкциями — каждая ляжет отдельно, с пустой строкой между ними.
Ничего не уходит из браузера
Это важнее, чем кажется на первый взгляд. Запрос обычно несёт в себе форму вашей схемы: имена таблиц, столбцов, иногда конкретный ID или адрес почты прямо в WHERE. Вставьте это в случайный сайт «бесплатный SQL-форматтер» — и вы отдали незнакомцу набросок своей базы. Здесь форматирование идёт на JavaScript прямо на открытой странице. Отключите интернет после загрузки — всё продолжит работать.
Закиньте следующий запутанный запрос в SQL-форматтер и посмотрите, как он выстроится по полочкам — без регистрации, без загрузки, без ожидания.