Оператор 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».
| 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 |
| 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 |
SQL оператор INSERT
В этом учебном материале вы узнаете, как использовать оператор INSERT в SQL с синтаксисом и примерами.
Описание
SQL оператор INSERT используется для вставки одной или нескольких записей в таблицу. Существует два синтаксиса для оператора INSERT в зависимости от того, вставляете ли вы одну запись или несколько записей.
Синтаксис
Синтаксис SQL оператора INSERT при вставке одной записи в таблицу:
INSERT INTO table
(column1, column2, . )
VALUES
(expression1, expression2, . );
Или синтаксис SQL оператора INSERT при вставке нескольких записей в таблицу:
INSERT INTO table
(column1, column2, . )
SELECT expression1, expression2, .
FROM source_tables
[WHERE conditions];
Параметры или аргументы
table Таблица, в которую нужно вставить записи. column1 , column2 Это столбцы в table для вставки значений. expression1 , expression2 Эти значения присваиваются столбцам в таблице. Поэтому column1 будет присвоено значение expression1 , column2 будет присвоено значение expression2 и т.д. , source_tables Используется при вставке записей из другой таблицы. Это исходная таблица при выполнении вставки. WHERE conditions Необязательный. Используется при вставке записей из другой таблицы. Это те условия, которые должны быть соблюдены для вставки записей.
Примечание
- При вставке записей в таблицу с помощью SQL оператора INSERT, необходимо указать значение для каждого столбца NOT NULL. Вы можете опустить столбец из оператора INSERT, только если столбец допускает значения NULL.
Пример — использование оператора INSERT для вставки одной записи
Самый простой способ использовать оператор INSERT — вставить одну запись в таблицу с помощью ключевого слова VALUES. Давайте рассмотрим пример того, как сделать это в SQL.
В этом примере у нас есть таблица с categories со следующими данными:
| category_id | category_name |
|---|---|
| 25 | Deli |
| 50 | Produce |
| 75 | Bakery |
| 100 | General Merchandise |
| 125 | Technology |
Давайте вставим новую запись в category . Введите следующий SQL оператор:
SQL INSERT INTO
Команда INSERT добавляет строки в таблицу или представление основной таблицы.
Синтаксис команды Sql INSERT INTO
Основные ключевые слова и параметры команды INSERT
- schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
- table view — имя таблицы, в которую строки должны быть вставлены; если указано представление, то строки вставляются в основную таблицу представления
- subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
- column — столбец таблицы или представления, в который для каждой вставленной строки вводится значение из фразы VALUES или подзапроса; если один из столбцов таблицы опускается из этого списка, значением столбца для вставленной строки является значение по умолчанию столбца, определенное при создании таблицы. Если полностью опускается список столбца, предложение VALUES или запрос должен определить значения для всех столбцов в таблице
- VALUES — определяет строку значений, которые будут вставлены в таблицу или представление; значение должно быть определено в предложении VALUES для каждого столбца в списке столбцов
- subquery_2 — подзапрос, который возвращает строки, вставляемые в таблицу; выборочный список этого подзапроса должен иметь такое же количество столбцов, как в списке столбцов утверждения INSERT
Утверждение INSERT с фразой VALUES добавляет одиночную строку к таблице. Эта строка содержит значения, определенные фразой VALUES. Утверждение INSERT с подзапросом вместо фразы VALUES добавляет к таблице все строки, возвращенные подзапросом. Сервер обрабатывает подзапрос и вставляет каждую возвращенную строку в таблицу. Если подзапрос не выбирает никакие строки, сервер не вставляет никакие строки в таблицу.
Подзапрос может обратиться к любой таблице или представлению, включая целевую таблицу утверждения INSERT. Сервер назначает значения полям в новых строках, основанных на внутренней позиции столбцов в таблице и порядке значений фразы VALUES или в списке выбора запроса. Если какие-либо столбцы пропущены в списке столбцов, сервер назначает им значения по умолчанию, определенные при создании таблицы.
Если любой из этих столбцов имеет NOT NULL ограничение то сервер возвращает ошибку, указывающую, что ограничение было нарушено и отменяет утверждение INSERT. При выдаче утверждения INSERT включается любой INSERT — триггер, определенный на таблице.
INSERT INTO
INSERT INTO. Пример 1
INSERT INTO dept VALUES (50, «ПРОДУКЦИЯ», «САН-ФРАНЦИСКО»);
INSERT INTO Customers (city, cname, cnum) VALUES (‘London’, ‘Hoffman’, 2001);
INSERT INTO. Пример 2
Нижеприведенная команда копирует данные сотрудников фирмы, комиссионные которых превышают 25% от дохода в таблицу bonus:
INSERT INTO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0.25 * sal;
INSERT INTO. Пример 3
Если нужно вставить NULL-значение, необходимо указать его как обычное значение следующим образом:
INSERT INTO Salespeople VALUES (1001,’Peel’,NULL,12);
INSERT INTO. Пример 4
Команду INSERT можно применить для того, чтобы извлечь значения из одной таблицы и разместить их в другой, воспользовавшись для этого запросом. Для этого достаточно заменить предложение VALUES на соответствующий запрос:
INSERT INTO Londonstaff SELECT * FROM Salespeople WHERE city = ‘London’;
MySQL INSERT
Для вставки новых строк в базу данных MySQL используется команда INSERT, примеры команды INSERT приведены ниже:
MySQL INSERT INTO. Пример 1
Вставка новой строки в таблицу table_name.
INSERT INTO table_name VALUES (‘1’, ‘165’, ‘0’, ‘name’);
MySQL INSERT INTO. Пример 2
Вставка новой строки в таблицу table_name с указанием вставки данных в нужные нам колонки.
INSERT INTO table_name VALUES (‘1’, ‘165’, ‘0’, ‘name’);
В базе данных MySQL имеется возможность вставлять множество новых строк, используя одну команду INSERT.
MySQL INSERT INTO Пример 3
Вставка несколько строк в таблицу table_name.
INSERT INTO table_name (tbl_id, chislo, chislotwo, name) VALUES (‘1’, ‘159’, ’34’, ‘name1’), (‘2′, ’14’, ’61’, ‘name2’), (‘3’, ‘356’, ‘8’, ‘name3’);
SQL INSERT INTO Statement
The INSERT INTO statement is used to insert new records in a table.
INSERT INTO Syntax
It is possible to write the INSERT INTO statement in two ways:
1. Specify both the column names and the values to be inserted:
2. If you are adding values for all the columns of the table, you do not need to specify the column names in the SQL query. However, make sure the order of the values is in the same order as the columns in the table. Here, the INSERT INTO syntax would be as follows:
INSERT INTO table_name
VALUES (value1, value2, value3, . );
Demo Database
Below is a selection from the Customers table used in the examples:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 — 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
| 90 |
INSERT INTO Example
The following SQL statement inserts a new record in the «Customers» table:
Example
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES (‘Cardinal’, ‘Tom B. Erichsen’, ‘Skagen 21’, ‘Stavanger’, ‘4006’, ‘Norway’);
The selection from the «Customers» table will now look like this:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 — 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
| 90 |
Did you notice that we did not insert any number into the CustomerID field?
The CustomerID column is an auto-increment field and will be generated automatically when a new record is inserted into the table.
Insert Data Only in Specified Columns
It is also possible to only insert data in specific columns.
The following SQL statement will insert a new record, but only insert data in the «CustomerName», «City», and «Country» columns (CustomerID will be updated automatically):
Example
INSERT INTO Customers (CustomerName, City, Country)
VALUES (‘Cardinal’, ‘Stavanger’, ‘Norway’);
The selection from the «Customers» table will now look like this:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 — 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
| 90 |
Insert Multiple Rows
It is also possible to insert multiple rows in one statement.
To insert multiple rows of data, we use the same INSERT INTO statement, but with multiple values:
Example
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES
(‘Cardinal’, ‘Tom B. Erichsen’, ‘Skagen 21’, ‘Stavanger’, ‘4006’, ‘Norway’),
(‘Greasy Burger’, ‘Per Olsen’, ‘Gateveien 15’, ‘Sandnes’, ‘4306’, ‘Norway’),
(‘Tasty Tee’, ‘Finn Egan’, ‘Streetroad 19B’, ‘Liverpool’, ‘L1 0AA’, ‘UK’);
Make sure you separate each set of values with a comma , .
The selection from the «Customers» table will now look like this:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 — 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
| 90 |
