Sql select from insert into: SQL INSERT INTO SELECT Statement

5 Демонстрация SQL INSERT INTO SELECT для копирования данных в таблицы

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

В этом уроке мы узнаем, как объединить эти два оператора для копирования данных таблицы из одной таблицы в другую.

Комбинация простая; оператор SELECT извлекает записи из одной или нескольких таблиц, а команда INSERT INTO вводит эти записи в целевую таблицу. Простой пример использования этих двух утверждений:

INSERT INTO target_table

 

SELECT * FROM source_table;

Этот единственный оператор SQL скопирует полные данные из исходной таблицы (в команде SELECT) в целевую таблицу (указанную в INSERT INTO).

Однако при использовании этой комбинации для копирования данных следует помнить о некоторых вещах:

  • Типы данных целевой таблицы должны совпадать с типами данных исходной таблицы.
  • Если вы используете оператор SELECT без предложения WHERE, полные данные таблицы копируются в целевую таблицу.
  • Вы также можете указать несколько столбцов для копирования данных из одной таблицы в другую.

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

Пример копирования полных данных таблицы

Для демонстрации демонстрации операторов INSERT INTO и SELECT я буду использовать sto_employees в качестве исходной таблицы и sto_employees_sub в качестве целевой таблицы.

В этом примере мы полностью скопируем данные таблицы из исходной таблицы в целевую; поэтому в операторе SELECT не используется предложение WHERE :

1

2

3

4

5

6

7

8

10

11

ВЫБРАТЬ * ОТ sto_employees_sub;

 

 

 

ВСТАВИТЬ В sto_employees_sub

 

SELECT * FROM sto_employees;

 

 

 

SELECT * FROM sto_employees_sub;

На рисунке видно, что первый запрос не вернул ни одной записи из таблицы. Затем следует использование операторов INSERT INTO/SELECT для копирования данных.

После этого выполняется еще один запрос SELECT для извлечения данных из таблицы sto_employees_sub, и он показывает все записи, скопированные из исходной таблицы.

Пример копирования конкретных строк

В этом примере в таблицу sto_employees_sub копируются только те записи, для которых emp_salary больше или равно 4000 из таблицы sto_employees. Перед выполнением этого запроса я очистил таблицу, заполненную указанным выше запросом:

Запрос INSERT INTO/SELECT для копирования определенных строк:

ВСТАВИТЬ В sto_employees_sub

 

SELECT * FROM sto_employees

 

ГДЕ emp_salary >= 4000;

Набор результатов:

Вы можете увидеть столбец зарплаты, где его значение больше или равно 4000.

Пример INSERT INTO/SELECT для определенных столбцов

Вы также можете вставлять строки для определенных столбцов из одной таблицы в другую. Для этого заключите имена столбцов в круглые скобки в операторе INSERT INTO и используйте соответствующие имена столбцов в операторе SELECT.

Обратите внимание, что , если вы опустите столбец NOT NULL, это вызовет ошибку.

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

ВСТАВИТЬ В sto_employees_sub

 

(id, emp_name, emp_age, emp_salary)

 

SELECT id, emp_name, emp_age, emp_salary FROM sto_employees;

Целевая таблица, полученная до и после выполнения этого запроса, и посмотрите результат:

Столбцы с ограничением NULL отображают значения как NULL.

Запрос на копирование данных из одной таблицы базы данных в другую

Во всех приведенных выше примерах обе таблицы существовали в одной и той же базе данных с одним и тем же именем пользователя, поэтому мы не требовали специального упоминания БД и имен пользователей.

Копирование данных обычно требуется из одной таблицы базы данных в другую в сценариях реального времени. Следующий запрос показывает, как копировать данные из одной базы данных (store_db) в другую базу данных (test_db) на том же сервере баз данных:

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

ВСТАВИТЬ В [test_db].[dbo].[sto_employees_sub]

 

ВЫБРАТЬ * ИЗ [store_db].[dbo].[sto_employees]

 

ГДЕ emp_salary МЕЖДУ 50 И 5 3

Где test_db и store_db — имена баз данных, а dbo — имя пользователя.

Наборы результатов до и после выполнения этого запроса для таблицы [test_db].[dbo].[sto_employees_sub]:

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

ВСТАВИТЬ В [экземпляр базы данных].[test_db].[dbo].[sto_employees_sub]

 

SELECT * FROM [экземпляр базы данных] [store_db].[dbo].[sto_employees]

Например, если имя сервера БД для локальной установки — «WELCOME \MSSQLTEST» , а имя удаленного сервера БД — REM-PC , то запрос должен быть таким:

ВСТАВИТЬ В [WELCOME \MSSQLTEST].[test_db].[dbo].[sto_employees_sub]

 

SELECT * FROM [REM-PC] [store_db]. [dbo].[sto_employees]

Это должно скопировать данные с удаленного сервера базы данных на локальный сервер.

Эта высота div необходима для включения закрепленной боковой панели

SQL INSERT INTO SELECT — SqlSkull

Оператор SQL INSERT INTO SELECT выбирает данные из одной таблицы и вставляет их в другую таблицу.

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

Типы данных столбцов в исходной и целевой таблицах должны совпадать.

Не требуется, чтобы целевая таблица имела такое же количество столбцов, как определено в исходной таблице.

СИНТАКСИС

 INSERT INTO Target_Table 
SELECT Col1, Col2,..
FROM Source_Table ;

Давайте рассмотрим пример оператора INSERT INTO SELECT в SQL Server.

Чтобы продемонстрировать это, сначала мы создадим исходную таблицу с именем EMP_SOURCE и вставим несколько записей в исходную таблицу.

Затем создаст целевую таблицу с именем EMP_TARGET.

 CREATE TABLE EMP_SOURCE ( 
EMPID INT IDENTITY(1,1),
EMPNAME VARCHAR(50),
EMPCODE VARCHAR(10)
)

ВСТАВИТЬ В EMP_SOURCE (EMPNAME,EMPCODE)
ЗНАЧЕНИЯ ('RAJ SINGH','XRT78') ,
('SUNIL RAWAT','VFT79'),
('MANISH KR',' YUI98'),
('AJAY AGGARWAL','ERT65')

 CREATE TABLE EMP_TARGET ( 
ROWID INT IDENTITY(1,1),
EMPID INT ,
EMPNAME VARCHAR(50),
)
)

 

Как видите, в таблице EMP_SOURCE есть несколько записей, которые мы вставили, в то время как таблица EMP_TARGET пуста.

SELECT * FROM EMP_SOURCE
SELECT * FROM EMP_TARGET

 

Теперь мы скопируем данные таблицы EMP_SOURCE в таблицу EMP_TARGET.

Следующая инструкция SQL копирует данные из исходной таблицы EMP_SOURCE в целевую таблицу EMP_TARGET.

 ВСТАВИТЬ В EMP_TARGET(EMPID, EMPNAME, EMPCODE ) 
ВЫБРАТЬ EMPID, EMPNAME, EMPCODE
ИЗ EMP_SOURCE ;

 

 

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