JavaRush /Курсы /Модуль 4. Работа с БД /Вставка данных в таблицу

Вставка данных в таблицу

Модуль 4. Работа с БД
6 уровень , 2 лекция
Открыта

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

1
Задача
Модуль 4. Работа с БД, 6 уровень, 2 лекция
Недоступна
Заполняем таблицу игроками
Заполняем таблицу игроками
1
Задача
Модуль 4. Работа с БД, 6 уровень, 2 лекция
Недоступна
Заполняем таблицу машинами
Заполняем таблицу машинами
1
Задача
Модуль 4. Работа с БД, 6 уровень, 2 лекция
Недоступна
Добавляем поставщиков к покупателям
Добавляем поставщиков к покупателям
1
Задача
Модуль 4. Работа с БД, 6 уровень, 2 лекция
Недоступна
Добавляем адреса
Добавляем адреса
Комментарии (12)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Илья Езугбая Уровень 87
18 мая 2026
По второй задаче (чисто что бы в ручную не заполнять) VALUES ('Lexus', 'IS', 2017, 'petrol', 7.5), ('Volvo', 'XC90', 2019, 'diesel', 8.5), ('Volkswagen', 'Golf', 2020, 'petrol', 8), ('Toyota', 'Corolla', 2015, 'petrol', 10), ('BMW', '5', 2005, 'petrol', 15.5), ('Ford', 'Transit', 2010, 'diesel', 9); ❤
Илья Езугбая Уровень 87
18 мая 2026
По первой задаче (чисто что бы в ручную не заполнять) VALUES ('Goalkeeper','Gianluigi Buffon','1'), ('Right-back','Cafu','2'), ('Centre-back','Franz Beckenbauer','3'), ('Centre-back','Bobby Moore','4'), ('Left-back','Paolo Maldini','5'), ('Midfield','Johan Cruyff','6'), ('Midfield','Zinedine Zidane','7'), ('Midfield','Andrea Pirlo','8'), ('Midfield','Lothar Matthaus','9'), ('Striker','Pele','10'), ('Forward','Marco van Basten','11'); ❤
Артём Васенин Уровень 1
1 июня 2025
И как бы я угадал в task0607 что поле должно быть model_year а не year из постановки задачи?
Артём Уровень 112
26 июня 2025
А ещё, если решаешь в ИДЕА, и в решении пишешь код для создания таблицы, то валидатор решение не принимает. Надо только инсерт оставить, тогда примет.
Rabbit2004 Уровень 37
25 марта 2023
А где можно найти задачи по sql ? Какая подписка требуется для этого ?
Зепп Бранниган Уровень 41 Moderator
27 марта 2023
Задачи доступны для наших студентов.
Саша И. Уровень 101 Expert
20 февраля 2023
В 0608 валидатор не пустит без точки с запятой в конце запроса
Сергей Уровень 111 Expert
15 декабря 2022
В первой задаче молодцы, сделали форматирование, а со второй проблема...

 Lexus IS 2017 petrol 7.5 
 Volvo XC90 2019 diesel 8.5 
 Volkswagen Golf 2020 petrol 8 
 Toyota Corolla 2015 petrol 10 
 BMW 5 2005 petrol 15.5 
 Ford Transit 2010 diesel 9 
Эдуард Уровень 1 Expert
26 октября 2022
В задаче 0607 вместо year надо указать model_year
Роман (protasenaroman@gmail.com) Уровень 100 Expert
13 ноября 2022
Необходимо указать (brand, model, model_year, engine, consumption)
Артём Васенин Уровень 1
1 июня 2025
Но судя по тому что нынче 2025 год а этот коммент оставлен в 2022-м никто поправлять условия задач не собирается
Александр Уровень 61
18 июня 2025
Смотри, поправили таки)