Форматувати та робити відступи у SQL-запиті

форматує ваші SQL-запити для зручного читання та розуміння, полегшуючи розробку та обслуговування

Навіщо форматування 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