Команда INSERT — вставка записей в базу данных
Команда INSERT вставляет записи в базу данных. Можно вставить или одну запись, или сразу несколько.
См. также команды SELECT, UPDATE, DELETE, которые отвечают за получение, редактирование и удаление записей.
См. также команду SELECT INTO, которая копирует данные из одной таблицы в другую.
Синтаксис
Первый синтаксис:
INSERT INTO имя_таблицы SET поле1=значение1, поле2=значение2, поле3=значение3...
Второй синтаксис:
INSERT INTO имя_таблицы (поле1, поле2...) VALUES (значение1, значение2...)
Одновременно много записей:
INSERT INTO имя_таблицы (поле1, поле2...) VALUES (значение1, значение2...), (значение1, значение2...)..."
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
Пример
Добавим с помощью первого синтаксиса нового работника Васю с возрастом 23 и зарплатой 500:
INSERT INTO workers SET name='Вася', age=23, salary=500
Таблица workers станет выглядеть так:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
Пример
Добавим с помощью второго синтаксиса нового работника Васю с возрастом 23 и зарплатой 500:
INSERT INTO workers (name, age, salary) VALUES ('Вася', 23, 500)
Таблица workers станет выглядеть так:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
Пример
Добавим одновременно нового работника Васю с возрастом 23 и зарплатой 500 и работника Колю с возрастом 30 и зарплатой 1000:
INSERT INTO workers (name, age, salary) VALUES ('Вася', 23, 500), ('Коля', 30, 1000)
Таблица workers станет выглядеть так:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
Пример
Давайте добавим нового работника Васю с возрастом 23, но не указав ему зарплату. Вместо нее вставится значение по умолчанию:
INSERT INTO workers (name, age) VALUES ('Вася', 23)
Таблица workers станет выглядеть так:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 0 |
← Предыдущая страница Следующая страница →
Использование оператора SELECT в команде INSERT
Использование оператора SELECT в команде INSERT
Оператор SELECT в команде INSERT позволяет взять данные из одной или нескольких таблиц и вставить их в другую таблицу. Если вы вставляете значения только для части столбцов, определить значения для других столбцов можно будет позднее с помощью оператора UPDATE.
Если вы вставляете строки из одной таблицы в другую, эти таблицы должны иметь совместимую структуру, т. е. соответствующие столбцы должны иметь одинаковый тип, или же система должна уметь автоматически выполнять нужное преобразование.
Если столбцы в обеих таблицах совместимы по типам и определены в одинаковом порядке в соответствующих операторах CREATE TABLE, перечислять их в команде INSERT необязательно.
Пример
Предположим, что в таблице sale_arhiiv содержатся строки с информацией о продажах в том же формате, что и в таблице tbl_sale.
Для добавления в таблицу sale_arhiiv строк из таблицы tbl_sale, содержащих данные о проджах за 2004 год в можно воспользоваться следующей командой:
SQL:
INSERT INTO sale_arhiiv
SELECT sale_id, client_id, prod_id, amount, saledate
FROM tbl_sale
WHERE YEAR(saledate)=2004
или
INSERT INTO sale_arhiiv
SELECT *
FROM tbl_sale
WHERE YEAR(saledate)=2004
Если столбцы в двух таблицах (таблица, в которую вы вставляете данные, и таблица, из которой вы берете данные) определены в разном порядке в соответствующих операторах CREATE TABLE, для установления соответствия между ними можно воспользоваться предложениями INSERT или SELECT.
Пример
Например, предположим, что в операторе CREATE TABLE для таблицы tbl_sale столбцы определены в следующем порядке — sale_id, client_id, prod_id, amount, saledate, a для таблицы sale_arviiv — sale_id, prod_id, client_id saledate и amount. Тогда установить соответствие между ними можно с помощью оператора INSERT. Для этого столбцы таблицы sale_arhiiv нужно перечислить в предложении INSERT:
SQL:
INSERT INTO sale_arhiiv
(sale_id, client_id, prod_id, amount, saledate)
SELECT *
FROM tbl_sale
WHERE YEAR(saledate)=2004
Такой же результат можно получить, перечислив в нужном порядке столбцы таблицы tbl_sale в предложении SELECT:
SQL:
INSERT INTO sale_arhiiv
SELECT sale_id,prod_id,
client_id,
saledate
amount
FROM tbl_sale
WHERE YEAR(saledate)=2004
Одним из преимуществ использования оператора SELECT в команде INSERT является возможность включения в него различных выражений (expression) — строк символов, математических формул и функций, позволяющих манипулировать вставляемыми данными.
Кроме того, с помощью оператора SELECT можно добавлять данные как во все сразу, так и в отдельные столбцы, по аналогии с предложением VALUE. Для этого нужно просто задать имена столбцов, в которые вы хотите добавить данные в предложении INSERT
Пример
Ниже приводится пример предложения SELECT, в котором над столбцом выполняются математические действия.
Предположим, что описываемая нами компания купила продукцию у другой фармацевттической компании. Причем, по счастливой случайности, для описания продукции эта компания использовала таблицу tbl_prod с той же структурой, что и таблица tbl_product. Однако при покупке стоимость продукции была увеличена на 10%. Кроме того, данные будут добавлены во все поля таблицы tbl_product, кроме поля tbl_group. Оператор, увеличивающий значения стоимости товаров вставляющий строки из таблицы tbl_prod в таблицу tbl_product, имеет следующий вид:
SQL:
INSERT INTO tbl_product(prod_id, pr_name,price)
SELECT prod_id, name, price * 1. 1 FROM tbl_prod
« Previous | Next »
sql — Вставить в … значения ( SELECT … FROM … )
Оба ответа, которые я вижу, отлично работают в Informix, и в основном являются стандартным SQL. То есть запись:
INSERT INTO target_table[()] SELECT ... FROM ...;
прекрасно работает с Informix и, как я ожидал, со всеми СУБД. (Когда-то 5 или более лет назад это было то, что MySQL не всегда поддерживал; теперь у него есть достойная поддержка такого стандартного синтаксиса SQL, и, насколько мне известно, он будет нормально работать с этой нотацией.) Список столбцов является необязательным, но указывает целевые столбцы в последовательности, поэтому первый столбец результата SELECT попадет в первый столбец в списке и т. д. При отсутствии списка столбцов первый столбец результата SELECT входит в список. первый столбец целевой таблицы.
Между системами может различаться нотация, используемая для идентификации таблиц в разных базах данных — стандарт ничего не говорит об операциях между базами данных (не говоря уже о межСУБД).
[dbase[@server]:][owner.]table
То есть вы можете указать базу данных, дополнительно указав сервер, на котором размещена эта база данных, если она не находится на текущем сервере, за которым следует необязательный владелец, точка и, наконец, фактическое имя таблицы. Стандарт SQL использует термин схема для того, что Informix называет владельцем. Таким образом, в Informix любая из следующих нотаций может идентифицировать таблицу:
таблица "владелец".таблица база данных: таблица база данных: владелец. таблица dbase@сервер: таблица dbase@сервер:владелец.таблица
Владелец вообще не нуждается в цитировании; однако, если вы используете кавычки, вам нужно правильно написать имя владельца — оно становится чувствительным к регистру. То есть:
кто-то.таблица "кто-то".таблица SOMEONE.table
все идентифицируют одну и ту же таблицу. С Informix есть небольшие сложности с базами данных MODE ANSI, где имена владельцев обычно преобразуются в верхний регистр (informix является исключением). То есть в базе данных MODE ANSI (обычно не используемой) вы можете написать:
СОЗДАТЬ ТАБЛИЦУ Someone.table ( ... )
, а имя владельца в системном каталоге будет «Кто-то», а не «кто-то». Если вы заключите имя владельца в двойные кавычки, оно действует как идентификатор с разделителями. В стандартном SQL идентификаторы с разделителями можно использовать во многих местах. С Informix вы можете использовать их только вокруг имен владельцев — в других контекстах Informix обрабатывает как строки в одинарных, так и в двойных кавычках как строки, а не разделяет строки в одинарных кавычках как строки, а строки в двойных кавычках — как идентификаторы с разделителями. (Конечно, для полноты картины существует переменная окружения DELIMIDENT, которой можно присвоить любое значение, но безопаснее Y, чтобы указать, что двойные кавычки всегда окружают идентификаторы с разделителями, а одинарные кавычки всегда окружают строки.)
Обратите внимание, что MS SQL Server может использовать [идентификаторы с разделителями], заключенные в квадратные скобки. Мне это кажется странным и уж точно не является частью стандарта SQL.
Вставка записей в таблицу с помощью SQL
12 февраля 2022 г.
Вот общий синтаксис, который можно использовать для вставки записей в таблицу с помощью SQL:
INSERT INTO имя_таблицы (столбец_1, столбец_2, столбец_3,...) ЦЕННОСТИ ('значение_1', 'значение_2', 'значение_3',...)
Теперь давайте рассмотрим пример, чтобы увидеть, как применять приведенный выше синтаксис на практике.
Пример
Let’s Предположим, что вы создали таблицу под названием « Product ‘ », в которой содержится 3 столбца: Product_id , Product_name , и Права :
, и Права :, и Цена :Create Create Product ( и . product_id int первичный ключ, product_name nvarchar(50), цена инт )Конечная цель — вставить в таблицу следующие 4 записи:
product_id | имя_продукта | цена |
1 | Компьютер | 800 |
2 | ТВ | 1200 |
3 | Принтер | 150 |
4 | Стол | 400 |
Вставка записей в таблицу с помощью SQL
Приведенный ниже запрос можно использовать для вставки 4 записей в таблицу «продукт» (обратите внимание, что вы не должны ставить запятую после закрывающей скобки последнего значения):
ВСТАВИТЬ В продукт (product_id, product_name, цена) ЦЕННОСТИ (1, «Компьютер», 800), (2,'ТВ',1200), (3, "Принтер", 150), (4, «Рабочий стол», 400)
После выполнения вышеуказанного запроса 4 записи будут вставлены в таблицу «продукт».
Чтобы убедиться, что записи были добавлены в таблицу, запустим следующий запрос SELECT:
SELECT * FROM product
Теперь вы увидите новые вставленные записи:
product_id | имя_продукта | цена |
1 | Компьютер | 800 |
2 | ТВ | 1200 |
3 | Принтер | 150 |
4 | Стол | 400 |
Вставка дополнительных записей в таблицу
Вы можете в любое время вставить в таблицу дополнительные записи, используя тот же метод, который рассмотрен выше.
Например, добавим две дополнительные записи в таблицу product:
INSERT INTO product (product_id, product_name, price) ЦЕННОСТИ (5, «Стул», 120), (6, «Планшет», 300)
После выполнения запроса две дополнительные записи будут вставлены в таблицу «продукт».