Оператор 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.

undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 2 лекция
Недоступна
Заполняем таблицу игроками
Давай попробуем создать лучшую команду в истории футбола. Добавь в таблицу team следующих 11 игроков
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 2 лекция
Недоступна
task0607
task0607
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 2 лекция
Недоступна
task0608
task0608
undefined
1
Задача
Модуль 4. Работа с БД, 6 уровень, 2 лекция
Недоступна
task0609
task0609