Форматувати та робити відступи у SQL-запиті
- Панель керування
- Документація
- API
Навіщо форматування SQL?
Форматування SQL дозволяє зробити SQL-запити більш читабельними та зрозумілими для розробників та адміністраторів баз даних. Це полегшує відлагодження, перегляд коду та оптимізацію запитів. Добре відформатований SQL є суттєвим для підтримки якості коду та ефективної співпраці в команді розробників.
Підтримувані типи SQL-запитів
Цей інструмент підтримує всі типи SQL-запитів, включаючи інструкції SELECT, INSERT, UPDATE, DELETE, а також інструкції створення та зміни таблиць (CREATE, ALTER, DROP).
Як форматувати SQL-запити
На сторінці форматування ви можете відформатувати ваш SQL-запит, вставивши його у відведене текстове поле.
Після подачі SQL-запиту він буде відформатований і відображений в зоні результату. Якщо запит недійсний, буде показано помилку із зазначенням характеру проблеми.
Використання відформатованого SQL
Ви можете скопіювати відформатований SQL за допомогою відповідної кнопки копіювання. Це полегшить інтеграцію SQL-запитів у ваші проекти або звіти.
Ваш SQL-код повинен виглядати приблизно так:
SELECT u.id, u.name, u.email,
p.product_name, p.price,
o.order_date, o.quantity,
(SELECT SUM(p2.price * o2.quantity)
FROM orders o2
JOIN products p2 ON o2.product_id = p2.id
WHERE o2.user_id = u.id) as total_spent
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id
WHERE u.id IN (
SELECT user_id
FROM orders
WHERE order_date >= '2023-01-01' AND order_date <= '2023-12-31'
GROUP BY user_id
HAVING COUNT(*) > 5
)
AND p.price > 50
ORDER BY u.name ASC, o.order_date DESC
LIMIT 10;
Часті запитання
Які діалекти SQL підтримуються: MySQL, PostgreSQL, SQL Server?
Форматер розпізнає стандартний SQL (ANSI), а також основні розширення MySQL, PostgreSQL, SQL Server (T-SQL), Oracle (PL/SQL) і SQLite. Специфічні ключові слова для кожного рушія (LIMIT для MySQL і PostgreSQL, TOP для SQL Server, RETURNING для PostgreSQL, MERGE) правильно виділяються відступами. Власні функції, специфічні для рушія, зберігаються як є без валідації.
Чи обробляє форматер CTE та рекурсивні запити?
Так. CTE (Common Table Expressions), оголошені з WITH ... AS (...), виділяються відступами у власному блоці, а рекурсивні CTE (WITH RECURSIVE) розпізнаються. Це робить складні запити значно читабельнішими, зокрема ієрархії (дерева, графи) та ковзні вікна. Корельовані підзапити також вирівнюються зі своєю батьківською областю.
В чому різниця між форматером SQL та оптимізатором запитів?
Форматер SQL не змінює семантику запиту: він лише візуально реорганізує код (переноси рядків, відступи, регістр ключових слів). Оптимізатор натомість переписує запит або пропонує зміни (відсутні індекси, joinи для реорганізації, підзапити для перетворення у join) для покращення продуктивності. Для аналізу плану виконання використовуйте EXPLAIN або EXPLAIN ANALYZE залежно від рушія.
Чи зберігаються SQL-коментарі?
Так. Рядкові коментарі -- коментар та багаторядкові коментарі /* ... */ зберігаються на своєму оригінальному місці. Це суттєво для документування складного запиту або маркування розділів (TODO, підказка для оптимізатора, версія міграції). Якщо ви передаєте запит рушію, що інтерпретує коментовані підказки (/*+ INDEX(...) */ на Oracle), вони також зберігаються.
Чому SQL-ключові слова пишуться великими літерами?
Написання ключових слів (SELECT, FROM, WHERE, JOIN) великими літерами є традиційною угодою, яка візуально відрізняє їх від ідентифікаторів (назви таблиць, стовпців). Ця практика полегшує читання, особливо у довгих запитах. Назви таблиць і стовпців, навпаки, зберігаються у оригінальному регістрі для дотримання угод схеми (особливо у PostgreSQL, де регістр чутливий для котованих ідентифікаторів).
Чи перевіряє форматер синтаксис SQL?
Форматер виконує легкий синтаксичний аналіз, що виявляє грубі помилки (незбалансовані дужки, відсутня крапка з комою в кінці інструкції, непослідовні ключові слова). Він не перевіряє ні існування таблиць і стовпців, ні відповідності конкретній схемі. Для цього виконайте запит у режимі EXPLAIN на вашій базі або використовуйте спеціальний лінтер, такий як sqlfluff.
Приклад запиту
curl -X POST https://cdrn.fr/api/v1/tools/sql-formatter/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Схема вхідних даних
| Поле | Тип | Обов'язкове | За замовчуванням |
|---|---|---|---|
input |
text | ✓ | – |
Точки доступу
GET https://cdrn.fr/api/v1/tools- перелічує всі доступні інструментиGET https://cdrn.fr/api/v1/tools/sql-formatter- отримує схему цього інструментуPOST https://cdrn.fr/api/v1/tools/sql-formatter/execute- виконує цей інструмент з JSON-payload