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.