# Язык SQL (DML: INSERT, UPDATE, DELETE). Варианты синтаксиса для множественного обновления данных.

#### DDL и DML — подмножество языка SQL

**DDL (Data Definition Language, язык описания данных)** служит для создания и модификации структуры БД, т.е. для создания/изменения/удаления таблиц и связей.
  
**DML (Data Manipulation Language, язык манипулирования данными)** позволяет осуществлять манипуляции с данными таблиц, т.е. с ее строками. Он позволяет делать выборку данных из таблиц, добавлять новые данные в таблицы, а также обновлять и удалять существующие данные.

⸻

#### INSERT
Оператор используется для добавления данных в таблицу.

Добавление одной строки:

```sql
INSERT INTO Employees (Name, Department, Salary)
VALUES ('Ivan', 'IT', 1000);
```

Добавление нескольких строк (множественная вставка):

```sql
INSERT INTO Employees (Name, Department, Salary)
VALUES
  ('Ivan', 'IT', 1000),
  ('Anna', 'HR', 900),
  ('Petr', 'IT', 1100);
```

Вставка данных из другой таблицы:

```sql
INSERT INTO Employees (Name, Department, Salary)
SELECT Name, Department, Salary
FROM NewEmployees;
```

⸻

#### UPDATE
Оператор используется для изменения существующих данных.

Обновление нескольких строк по условию:

```sql
UPDATE Employees
SET Salary = Salary * 1.1
WHERE Department = 'IT';
```

> В SQL нет отдельного оператора для обновления «одной» или «нескольких» строк —
количество обновляемых строк определяется условием WHERE.

Множественное обновление нескольких столбцов:

```sql
UPDATE Employees
SET
  Salary = 1200,
  Department = 'Finance'
WHERE Name = 'Ivan';
```

Обновление с использованием подзапроса:

```sql
UPDATE Employees
SET Salary = (
    SELECT AVG(Salary)
    FROM Employees
)
WHERE Department = 'HR';
```

Обновление с JOIN (диалектозависимо, например MySQL / PostgreSQL):

```sql
UPDATE Employees e
SET Salary = s.NewSalary
FROM SalaryChanges s
WHERE e.EmployeeID = s.EmployeeID;
```

⸻

#### DELETE
Оператор используется для удаления данных.

Удаление строк по условию:

```sql
DELETE FROM Employees
WHERE Department = 'HR';
```

Удаление всех строк таблицы:

```sql
DELETE FROM Employees;
```

Удаление с использованием подзапроса:

```sql
DELETE FROM Employees
WHERE Salary < (
    SELECT AVG(Salary)
    FROM Employees
);
```

⸻

Summary:

- **INSERT** — добавляет одну или несколько строк
- **UPDATE** — изменяет одну или несколько строк (множественное обновление задаётся через WHERE)
- **DELETE** — удаляет одну или несколько строк

Множественное обновление данных в SQL достигается:
- обновлением всех строк, подходящих под WHERE
- обновлением нескольких столбцов за один запрос
- использованием подзапросов и JOIN