Что такое DML (Data Manipulation Language) в SQL?

«Что такое DML (Data Manipulation Language) в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DML (Data Manipulation Language — Язык Манипулирования Данными) — это подмножество команд SQL, предназначенное для работы с данными внутри существующих таблиц базы данных. В отличие от DDL (Data Definition Language), который определяет структуру БД (создание таблиц, индексов), DML оперирует содержимым этих таблиц.

Основные команды DML:

Команда Назначение Ключевые особенности
SELECT Извлечение данных из одной или нескольких таблиц. Самая часто используемая команда. Может включать фильтрацию (WHERE), сортировку (ORDER BY), группировку (GROUP BY), объединения (JOIN).
INSERT Добавление новых строк (записей) в таблицу. Можно вставлять одну строку, несколько строк или результат подзапроса.
UPDATE Изменение существующих данных в строках таблицы. Всегда используйте WHERE, иначе будут обновлены все строки в таблице.
DELETE Удаление строк из таблицы. Всегда используйте WHERE, иначе будут удалены все строки. Не удаляет структуру таблицы.
MERGE (UPSERT) Комбинированная операция: вставка, если строки нет, или обновление, если есть. Доступна не во всех СУБД (в PostgreSQL — INSERT ... ON CONFLICT, в MySQL — INSERT ... ON DUPLICATE KEY UPDATE).

Примеры команд DML:

-- 1. SELECT (выборка данных)
SELECT id, name, email FROM users WHERE active = TRUE ORDER BY name;

-- 2. INSERT (добавление данных)
-- Вставка одной строки
INSERT INTO products (name, price, category_id) 
VALUES ('Монитор', 25000, 3);

-- Вставка нескольких строк
INSERT INTO products (name, price) 
VALUES ('Клавиатура', 4000), ('Мышь', 2000);

-- 3. UPDATE (обновление данных)
-- Обновление конкретной строки
UPDATE users SET password_hash = 'new_hash', updated_at = NOW() 
WHERE id = 42;

-- 4. DELETE (удаление данных)
-- Удаление устаревших записей
DELETE FROM session_logs WHERE created_at < NOW() - INTERVAL '30 days';

-- 5. MERGE (пример для SQL Server / Oracle)
MERGE INTO user_settings AS target
USING (VALUES ('user123', 'dark')) AS source (user_id, theme)
ON target.user_id = source.user_id
WHEN MATCHED THEN 
    UPDATE SET target.theme = source.theme
WHEN NOT MATCHED THEN 
    INSERT (user_id, theme) VALUES (source.user_id, source.theme);

Важное замечание: Команды DML (INSERT, UPDATE, DELETE) внутри транзакции могут быть отменены командой ROLLBACK до выполнения COMMIT. Это обеспечивает целостность данных.