Какие основные группы SQL-операторов вы знаете? Опишите их назначение.

Ответ

Все SQL-операторы принято делить на несколько групп в зависимости от их назначения:

  1. DDL (Data Definition Language) — язык определения данных. Эти операторы управляют структурой (схемой) базы данных.

    • CREATE — создаёт объекты БД (таблицы, индексы, представления).
    • ALTER — изменяет структуру существующего объекта.
    • DROP — удаляет объект.
    • TRUNCATE — быстро удаляет все записи из таблицы, не логируя каждую строку.
  2. DML (Data Manipulation Language) — язык манипулирования данными. Используются для работы с данными внутри таблиц.

    • SELECT — выбирает данные из таблиц.
    • INSERT — добавляет новые строки в таблицу.
    • UPDATE — изменяет существующие данные.
    • DELETE — удаляет строки.
  3. DQL (Data Query Language) — язык запросов данных. Формально, к нему относится только SELECT, но его часто рассматривают как часть DML. Ключевые операторы, используемые с SELECT:

    • FROM — указывает таблицу для выборки.
    • WHERE — фильтрует записи.
    • GROUP BY — группирует строки с одинаковыми значениями.
    • HAVING — фильтрует сгруппированные данные (в отличие от WHERE, работает после агрегации).
    • ORDER BY — сортирует результат.
    • JOIN (INNER, LEFT, RIGHT, FULL) — объединяет строки из двух или более таблиц.
  4. TCL (Transaction Control Language) — язык управления транзакциями.

    • BEGIN / START TRANSACTION — начинает новую транзакцию.
    • COMMIT — сохраняет все изменения, сделанные в рамках транзакции.
    • ROLLBACK — отменяет все изменения в транзакции.
  5. DCL (Data Control Language) — язык управления доступом к данным.

    • GRANT — предоставляет пользователю права на выполнение определённых операций.
    • REVOKE — отзывает ранее выданные права.

Пример сложного запроса с JOIN и агрегацией:

SELECT 
    d.name AS department_name,
    COUNT(e.id) AS number_of_employees
FROM departments d
JOIN employees e ON d.id = e.department_id
WHERE e.salary > 50000
GROUP BY d.name
HAVING COUNT(e.id) > 5
ORDER BY number_of_employees DESC;