Sql insert into select: SQL INSERT INTO SELECT Statement

Помощник SQL Server

Заявление INSERT — часто задаваемые вопросы


 1.  Как вставить литеральные значения или константы в таблицу или представление?

Ответ:

Чтобы вставить только литеральные значения или константы в таблицу или представление, вы будете использовать
простейшая форма оператора INSERT, следующая:

 ВСТАВИТЬ В  |  [(  )]
ЗНАЧЕНИЯ ( <список_значений> ) 

Ключевое слово VALUES указывает значения одной строки таблицы. Ценности
задаются как разделенный запятыми список скалярных выражений, тип данных которых,
точность и масштаб должны быть такими же или неявно преобразуемыми в
соответствующий столбец в списке столбцов. Если список столбцов не
указаны, значения должны быть указаны в той же последовательности, что и столбцы в
таблица или представление.

Чтобы проиллюстрировать, как использовать INSERT INTO. .. VALUES для таблицы Customers:

 CREATE TABLE [dbo].[Клиенты] (
[ID] INT NOT NULL,
[Имя] VARCHAR(50) НЕ NULL,
[Фамилия] VARCHAR(50) НЕ NULL) 

Чтобы вставить строку в эту таблицу, используя литеральные значения, введите следующее:

 ВСТАВИТЬ В [dbo].[Клиенты] ([ID], [Имя], [Фамилия])
ЗНАЧЕНИЯ (1, 'Билл', 'Гейтс') 

Поскольку список столбцов является необязательным, вы также можете сделать следующее. Только
убедитесь, что последовательность вставляемых значений соответствует последовательности
столбцов в таблице.

 ВСТАВИТЬ В [dbo]. [Клиенты] ЗНАЧЕНИЯ (2, 'Ларри', 'Эллисон') 

Хотя список столбцов является необязательным, рекомендуется, чтобы он всегда
предоставляется при выполнении INSERT. Это делается для того, чтобы убедиться, что ваш INSERT
оператор будет по-прежнему работать, и каждый столбец получит правильное значение, даже
если новые столбцы добавляются или вставляются между другими столбцами в таблице.
Если в таблицу добавляется еще один столбец и выполняется та же самая команда INSERT
без списка столбцов будет обнаружена следующая ошибка:

 Сервер: сообщение 213, уровень 16, состояние 5, строка 1
Ошибка вставки: имя столбца или количество предоставленных значений не соответствует определению таблицы.  

 2.  Как вставить строки одной таблицы в другую таблицу?

Ответ:

Чтобы вставить значения в таблицу из одной или нескольких таблиц или представлений, вы будете использовать
Подзапрос SELECT в операторе INSERT следующим образом:

 ВСТАВИТЬ В  |  [ (  ) ]
SELECT  FROM  |  

Использование подзапроса SELECT позволяет вставлять более одной строки одновременно.
Список столбцов подзапроса SELECT должен соответствовать списку столбцов
ВСТАВИТЬ заявление. Если список столбцов не указан, список выбора должен
соответствовать столбцам в таблице или представлении, в которое вставляется. ВЫБЕРИТЕ
подзапрос может ссылаться на одну или несколько таблиц или представлений, используя соединения.

Чтобы проиллюстрировать, как использовать оператор INSERT с подзапросом SELECT,
предполагая, что у вас есть 2 таблицы с именами [dbo]. [Customers] и
[dbo].[NewCustomers] и вы хотите вставить в таблицу [dbo].[Customers].
все записи из таблицы [dbo].[NewCustomers]:

 ВСТАВИТЬ В [dbo].[Клиенты] ([ID], [Имя], [Фамилия])
ВЫБЕРИТЕ [ID], [Имя], [Фамилия]
ОТ [dbo].[НовыеКлиенты]
 

Поскольку список столбцов является необязательным, вы также можете сделать следующее. Только
убедитесь, что последовательность вставляемых значений соответствует последовательности
столбцов в таблице.

 ВСТАВИТЬ В [dbo].[Клиенты]
ВЫБЕРИТЕ [ID], [Имя], [Фамилия]
ОТ [dbo].[НовыеКлиенты] 

Хотя список столбцов является необязательным, рекомендуется, чтобы он всегда
предоставляется при выполнении INSERT. Это делается для того, чтобы убедиться, что ваш INSERT
оператор будет по-прежнему работать, и каждый столбец получит правильное значение, даже
если новые столбцы добавляются или вставляются между другими столбцами в таблице.
Если в таблицу добавляется еще один столбец и выполняется та же самая команда INSERT
без списка столбцов будет обнаружена следующая ошибка:

 Сервер: сообщение 213, уровень 16, состояние 5, строка 1
Ошибка вставки: имя столбца или количество предоставленных значений не соответствует определению таблицы.  

3. Как вставить в таблицу строки из другой таблицы и некоторые литеральные значения?

Ответ:

Чтобы вставить значения в таблицу из одной или нескольких таблиц или представлений и с некоторыми
литеральные значения для некоторых столбцов, вы будете использовать подзапрос SELECT в INSERT
утверждение следующим образом:

 ВСТАВИТЬ В  |  [ (  ) ] SELECT 
| <литеральное_значение> FROM  |  

Использование подзапроса SELECT позволяет вставлять более одной строки одновременно.
Список столбцов и литеральные значения подзапроса SELECT должны соответствовать
список столбцов оператора INSERT. Подзапрос SELECT может ссылаться
одну или несколько таблиц или представлений с помощью соединений.

Чтобы проиллюстрировать, как использовать оператор INSERT с подзапросом SELECT,
предполагая, что у вас есть 2 таблицы с именами [dbo].[Customers] и
[dbo].[NewCustomers] и вы хотите вставить в таблицу [dbo]. [Customers].
все записи из таблицы [dbo].[NewCustomers] и установив для параметра [StatusFlag] значение
значение «Новый», оператор INSERT будет выглядеть следующим образом:

 INSERT INTO [dbo].[Customers] ( [ID], [FirstName], [LastName], [StatusFlag])
ВЫБЕРИТЕ [ID], [Имя], [Фамилия], «Новый»
ОТ [dbo].[НовыеКлиенты]
 

Оператор SQL INSERT INTO SELECT

sql

Simran Koul11 сентября 2020 г. Последнее обновление: 7 ноября 2021 г.

Возможно, вы использовали оператор «выбрать» и оператор «вставить в» в SQL по отдельности. Оператор select используется для извлечения данных из базы данных, тогда как оператор «insert into» вставляет данные в таблицу. В этом конкретном примере мы изучим использование вставить в оператор select в SQL.

Оператор SQL Insert Into Select используется для копирования данных из одной таблицы (назовем ее исходной) в другую таблицу (назовем ее целевой).

Примечание:

  • Этот оператор работает только в том случае, если типы данных исходной и целевой таблиц совпадают.
  • Уже существующие данные в целевой таблице не изменятся после применения вставки в операторе select к целевой таблице.

2. INSERT INTO SELECT Синтаксис

Если вы хотите выбрать все столбцы из исходной таблицы и скопировать их в целевую таблицу, будет работать следующий синтаксис.

INSERT INTO имя_таблицы_назначения (имена_столбцов)
ВЫБИРАТЬ *
ИЗ имя_исходной_таблицы
ГДЕ условие
 

Если вы хотите выбрать определенные столбцы из целевой таблицы, будет работать следующий синтаксис. Обратите внимание, что columnNames будет списком столбцов, разделенных запятой.

INSERT INTO имя_таблицы_назначения (имена_столбцов)
ВЫБЕРИТЕ имена столбцов
ИЗ имя_исходной_таблицы
ГДЕ условие
 

3. INSERT INTO SELECT Пример

Мы будем использовать командную строку MySQL, чтобы показать, как используется оператор Insert Into Select. Вы также можете сделать то же самое, используя компилятор MySQL, доступный в Интернете, или MySQL Workbench. Используя оператор Insert Into Select, мы будем копировать данные из исходной таблицы в целевую.

3.1 Создание двух демонстрационных таблиц – исходной и целевой

В качестве примера были созданы две таблицы, а именно СТУДЕНТ и ДОБРОВОЛЬЦЕВ. Таблица STUDENT состоит из 3 столбцов, включающих идентификатор учащегося, имя учащегося и страну. Точно так же таблица VOLUNTEER также состоит из 3 столбцов, которые включают идентификатор волонтера, имя волонтера и страну. СТУДЕНТ и ДОБРОВОЛЬЦЕВ, используя вставить команду .

Примечание. Если в типах данных для соответствующих значений будет допущена ошибка, это приведет к ошибке, и вставка не будет успешной. Итак, убедитесь, что строка заключена в одинарные кавычки. Рис. 2. Данные, вставленные в студент и волонтер

Посмотрим, как выглядят данные после вставки строк в таблицы. Мы использовали команду select для получения данных в обеих таблицах. Вы можете видеть, что 3 строки успешно вставлены в таблицу студентов, а также 3 строки успешно вставлены в таблицу волонтеров. Рис. 3. Данные в таблицах – студент и волонтер

3.3 Использование оператора Insert Into Select

Теперь мы воспользуемся оператором Insert Into Select, чтобы скопировать сведения об индийских студентах из таблицы student в таблицу волонтеров.

Вы можете ясно видеть, что до использования вставки в операторе select таблица добровольцев имеет 3 строки. Когда используется оператор Insert Into select, добавляется 1 строка (которая является последней строкой в ​​обновленной таблице добровольцев).

Итак, вы видите, что это утверждение не влияет ни на существующие данные в таблица назначения и исходная таблица .

  • Реализация функциональности с использованием клиента командной строки MySQL.
  • 5. Загрузите сценарий SQL

    Загрузите сценарий SQL, содержащий команды, использованные в примере.