Оператор SQL INSERT


Оператор SQL INSERT позволяет вносить изменения в структуру таблиц: добавлять записи (строки) и заполнять их значениями.

Оператор SQL INSERT имеет следующий синтаксис:

INSERT INTO table_name ([column_name, ... ]) VALUES (expressions, ...)

Так же, значения могут быть записаны и без указания столбцов:

INSERT INTO table_name VALUES (expressions, ...)

Запись значений может производиться и с помощью оператора SQL SELECT:

INSERT INTO table_name SELECT column_name,... FROM table_name

Используя оператор SQL SELECT можно вставить более одной записи. В случае, если если для каких-либо полей таблицы не указаны значения, они будут заменены значением по умолчанию null.


Примеры оператора SQL INSERT. Имеется следующая таблица Planets:

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
1 Mars 3396 687 1659 No Christiaan Huygens
2 Saturn 60268 10759.22 Yes
3 Neptune 24764 60190 1846 Yes John Couch Adams

Пример 1. С помощью оператора SQL INSERT добавить запись, присвоив полям таблицы следующие значения — ID: 4; PlanetName: Venus; Radius: 6051; SunSeason: 243; OpeningYear: 1610; HavingRings: No; Opener: Galileo Galilei;

INSERT INTO Planets (ID, PlanetName, Radius, SunSeason, OpeningYear, HavingRings, Opener)
VALUES (4, "Venus", 6051, 243, 160, "No", "Galileo Galilei")

Результат: После выполнения команды вывода всей таблицы:

SELECT * FROM Planets

Будет выведена таблица Planets с добавленной записью:

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
1 Mars 3396 687 1659 No Christiaan Huygens
2 Saturn 60268 10759.22 Yes
3 Neptune 24764 60190 1846 Yes John Couch Adams
4 Venus 6051 243 1610 No Galileo Galilei

Пример 2. Имеется 2 таблицы — PlanetWithoutRings(Планеты без колец) и PlanetsWithRings (Планеты с кольцами). Как понятно из названия, они отличаются полем HavingRings. В первой таблице все значения в нем «No», во второй «Yes».

PlanetWithoutRings:

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
1 Mars 3396 687 1659 No Christiaan Huygens
2 Mercury 2439 115.88 1631 No Nicolaus Copernicus
3 Venus 6051 243 1610 No Galileo Galilei

PlanetsWithRings:

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
1 Saturn 60268 10759.22 Yes
2 Neptune 24764 60190 1846 Yes John Couch Adams

Задача: С помощью оператора SQL INSERT вставить записи из таблицы PlanetsWithRings в таблицу PlanetsWithoutRings.

Данную задачу можно решить двумя запросами SQL INSERT, как было показано в Примере 1. Однако, мы воспользуемся вставкой строк с помощью оператора SQL SELECT:

INSERT INTO PlanetsWithoutRings
SELECT ID, PlanetName, Radius, SunSeason, OpeningYear, HavingRings, Opener
FROM PlanetsWithRings

Так как названия столбцов в обоих таблицах совпадает, то указывать их в операторе SQL INSERT необязательно. Вышеописанный запрос возьмет все данные из указанных столбцов из одной таблицы и вставит в другую. Посмотреть результат можно запросом:

SELECT * FROM PlanetsWithoutRings

Результат:

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
1 Mars 3396 687 1659 No Christiaan Huygens
2 Mercury 2439 115.88 1631 No Nicolaus Copernicus
3 Venus 6051 243 1610 No Galileo Galilei
1 Saturn 60268 10759.22 Yes
2 Neptune 24764 60190 1846 Yes John Couch Adams