Оператор 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’);
Оператор 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 есть значение по умолчанию. Мы просто не будем указывать level, и SQL установит значение по умолчанию.
Допустим, нас не устраивает значение по умолчанию, и мы хотим, чтобы level был 99, а user.created_time заменить на сегодняшнюю дату, тогда можно написать так:
INSERT INTO user (name, level, created_time)
SELECT employee.name, 99, CURDATE()
FROM employee;
Можно наворотить еще кучу всего интересного, но, думаю, хватит пока и этого. Подробнее можно почитать на официальный странице MySQL.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ