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]. |
Это должно скопировать данные с удаленного сервера базы данных на локальный сервер.
Эта высота 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 ;
Теперь вы можете проверить целевую таблицу, и вы увидите, что все записи из исходной таблицы копируются в целевую таблицу.