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