1. Оператор INSERT INTO VALUES()

Ми розібралися, як створювати таблиці, а тепер давай детально розглянемо, як додавати дані до таблиці за допомогою SQL-запиту.

Насправді це робити дуже просто, але є кілька нюансів. Найпростіший варіант вставки даних до таблиці вимагає зазначення двох речей:

  • імена колонок
  • значення колонок (дані)

Імена колонок потрібно вказувати обов'язково, тому що дуже часто колонки мають значення за замовчуванням, які не вказують під час вставлення даних. І зазвичай у кожній таблиці є хоча б одна така колонка, наприклад, id рядки.

Загальний вигляд запиту про вставлення даних до таблиці виглядає так:

INSERT INTO таблиця (колонка1, колонка2, колонка3) VALUES 
    (значення1, значення2, значення3),
    (значення1, значення2, значення3),
    (значення1, значення2, значення3); 

Припустимо, ти хочеш вставити до таблиці user новий запис. Ссь як виглядатиме такий запит:

INSERT INTO user (name, level, created_time) VALUES 
('Рабінович', 5, '2022-06- 06');

2. Оператор INSERT INTO SELECT

Ще один частий сценарій вставлення даних до таблиці — це взяти їх із іншої таблиці, схеми і навіть СУБД.

Для цього є інший формат запиту INSERT INTO, у якого замість частини VALUES можна вказати запит на вибірку даних.

Загальний вигляд такого запиту має вигляд:

INSERT INTO таблиця (колонка1, колонка2, колонка3)
SELECT-запит;

Давай напишемо запит, за допомогою якого додамо всіх користувачів з таблиці employee до таблиці user:

INSERT INTO user (name, created_time)
   SELECT employee.name, employee.join_date
   FROM employee;

У нас у таблиці employee є різні дані, але з них ми вибираємо лише два поля — ім'я та час приходу до компанії.

Також таблиця user вимагає вказати їй рівень користувача — level. У таблиці employee у співробітників немає рівня, тому ми скористаємося тим, що таблиця user у поля level є значення за замовчуванням. Ми просто не будемо вказувати рівень, і SQL встановить значення за замовчуванням.

Припустимо, нас не влаштовує значення за замовчуванням, і ми хочемо, щоб рівень був 99, а user.created_time замінити на сьогоднішню дату. Тоді можна написати так:

INSERT INTO user (name, level, created_time)
   SELECT employee.name, 99, CURDATE()
   FROM employee;

Можна наробити ще купу всього цікавого, але, гадаю, вистачить поки що й цього. Докладніше про все ти можеш почитати на офіційній сторінці MySQL.