Загрузка...
Загрузка...
Как форматировать SQL запросы, зачем нужен SQL Formatter, правила написания читаемого SQL и онлайн-инструменты.
Как и зачем конвертировать регистр текста: camelCase, snake_case, kebab-case, PascalCase, UPPER CASE. Правила, примеры и онлайн-инструмент.
РазработкаВсё о UUID v4: формат, версии, генерация в JavaScript, Python, SQL. Когда использовать UUID вместо автоинкремента в базах данных.
РазработкаРуководство по сравнению текстов, кода и конфигураций: diff-алгоритмы, инструменты, форматы вывода и практические сценарии для разработчиков.
РазработкаИсчерпывающее руководство по синтаксису Markdown: заголовки, списки, таблицы, код, ссылки. Справочник для разработчиков и авторов документации.
Поделитесь с коллегами или изучите другие материалы блога
SQL Formatter — инструмент для автоматического форматирования SQL запросов: расстановки отступов, переноса клауз на новые строки и приведения ключевых слов к UPPERCASE. Читаемый SQL проще отлаживать, проверять в code review и передавать коллегам.
Для быстрого форматирования используйте SQL Formatter на reChecker.
Неотформатированный запрос:
select u.id,u.name,o.total from users u inner join orders o on u.id=o.user_id where o.status='completed' and o.total>100 order by o.total desc limit 10
Тот же запрос после форматирования:
SELECT
u.id,
u.name,
o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE o.status = 'completed'
AND o.total > 100
ORDER BY o.total DESC
LIMIT 10;
Разница очевидна: структура видна с первого взгляда, условия WHERE читаются как список, JOIN легко найти в длинном запросе.
Стандарт SQL не требует верхнего регистра, но это общепринятое соглашение. Ключевые слова SELECT, FROM, WHERE, JOIN, AND, OR — всегда в верхнем регистре. Имена таблиц, колонок, псевдонимы — в нижнем или camelCase по соглашению проекта.
-- Плохо
select id, name from users where active = 1
-- Хорошо
SELECT id, name FROM users WHERE active = 1
Начинайте SELECT, FROM, WHERE, JOIN, GROUP BY, ORDER BY, HAVING, LIMIT с новой строки:
SELECT
id,
name,
email
FROM users
WHERE active = 1
ORDER BY created_at DESC
LIMIT 20;
При выборе нескольких колонок каждая идёт с отдельной строкой и отступом. Запятая — в конце или в начале строки (в конце удобнее):
SELECT
user_id,
product_id,
quantity,
price,
created_at
FROM order_items;
Каждый AND / OR — на новой строке с отступом:
WHERE
status = 'active'
AND created_at > '2026-01-01'
AND (category = 'SEO' OR category = 'Dev')
Каждый JOIN и его условие ON — на отдельных строках:
FROM orders o
INNER JOIN users u ON o.user_id = u.id
LEFT JOIN products p ON o.product_id = p.id
SELECT
id,
name,
(
SELECT COUNT(*)
FROM orders
WHERE orders.user_id = users.id
) AS order_count
FROM users;
Явное AS делает запрос читаемее, хотя синтаксически необязательно:
-- Хорошо
SELECT u.name AS user_name, COUNT(o.id) AS order_count
FROM users AS u
LEFT JOIN orders AS o ON u.id = o.user_id
Завершайте запросы ;. Это обязательно для выполнения нескольких запросов подряд и хорошая привычка в целом.
Стандарта нет, но 2 или 4 пробела — наиболее распространённые варианты. Табуляция используется реже. Главное — единообразие внутри проекта.
Минифицированный SQL — это запрос без лишних пробелов и переносов. Используется:
-- Оригинал (4 строки)
SELECT id, name
FROM users
WHERE active = 1
LIMIT 10;
-- Минифицированный (1 строка)
SELECT id,name FROM users WHERE active=1 LIMIT 10;
SQL Formatter на reChecker — форматирует и минифицирует SQL в браузере. Данные не отправляются на сервер.
Расширения SQL Formatter (по поиску в Extensions) форматируют SQL при сохранении файла или по горячей клавише Shift+Alt+F.
Встроенное форматирование SQL: Ctrl+Shift+F (DBeaver) или Ctrl+Alt+L (DataGrip).
import { format } from 'sql-formatter';
const formatted = format(
`select id,name from users where active=1`,
{ language: 'postgresql', tabWidth: 2 }
);
console.log(formatted);
Синтаксис отличается между:
| Диалект | СУБД | Особенности |
|---|---|---|
| MySQL | MySQL, MariaDB | Обратные кавычки для имён, LIMIT/OFFSET |
| PostgreSQL | PostgreSQL | ILIKE, оконные функции, :: для кастинга |
| T-SQL | SQL Server | TOP n, GETDATE(), NOLOCK |
| PL/SQL | Oracle | ROWNUM, CONNECT BY, NVL |
| SQLite | SQLite | Простой диалект, без RIGHT JOIN до 2021 |
Стандартный форматтер работает с универсальным SQL. Диалектные расширения форматируются как обычный текст.
SELECT
category,
COUNT(*) AS product_count,
AVG(price) AS avg_price
FROM products
WHERE active = 1
GROUP BY category
HAVING COUNT(*) > 10
ORDER BY avg_price DESC;
WITH active_users AS (
SELECT id, name, email
FROM users
WHERE status = 'active'
AND last_login > NOW() - INTERVAL '30 days'
),
user_orders AS (
SELECT
user_id,
COUNT(*) AS order_count,
SUM(total) AS total_spent
FROM orders
GROUP BY user_id
)
SELECT
u.name,
u.email,
COALESCE(o.order_count, 0) AS orders,
COALESCE(o.total_spent, 0) AS spent
FROM active_users u
LEFT JOIN user_orders o ON u.id = o.user_id
ORDER BY spent DESC
LIMIT 100;
SELECT
id,
name,
CASE
WHEN score >= 90 THEN 'Отлично'
WHEN score >= 70 THEN 'Хорошо'
WHEN score >= 50 THEN 'Удовлетворительно'
ELSE 'Неудовлетворительно'
END AS grade
FROM students
ORDER BY score DESC;
.editorconfig.-- Запрос получает активных пользователей с заказами за последние 30 дней.AS u, AS o.Форматированный SQL — признак профессионализма. Он облегчает отладку, code review и совместную работу. Используйте SQL Formatter для быстрого форматирования без установки инструментов.