Перейти к содержимому

Как вставить данные из одной таблицы в другую sql

  • автор:

UPDATE данными из других таблиц

Иногда возникает необходимость глобально обновить столбец одной таблицы значениями из этой же таблицы или из другой таблицы. Обычно для таких целей используют запрос вида:

update TABLE1
set FIELD1 = (select PRIMARYKEY
from TABLE1 T1
where T1.FIELD1=FIELD2)

Это единственный способ обновить таблицу таким образом, поскольку синтаксис «update TABLE1, TABLE2. » в IB не поддерживается.

Вероятность, что вышеприведенный запрос будет работать медленно, весьма высока. Намного выше чем у запроса, обновляющего записи данными из другой таблицы. Посмотрите план такого запроса, и если увидите там два цикла с перебором записей NATURAL, то запрос надо менять. Ускорить его можно путем «переворачивания» update и select местами внутри хранимой процедуры.

.
for select T1.PK , T2.PK
from TABLE1 T1 , TABLE1 T2
where T1.FIELD1 = T2.FIELD1
into :TARGET , :SOURCE
do
begin
update TABLE1
set FIELD1 = :SOURCE
where PK = :TARGET ;
end

Такая конструкция осуществит обновление всего за один «проход» по записям TABLE1, но в любом случае стоит проверить план оператора select и план оператора update отдельно.

Есть еще один способ, который аналогичен приведенному for select, но использует номер записи IB – RDB$DB_KEY:

create procedure TESTUPD
as
declare variable db_key CHAR(8);
begin
for select RDB$DB_KEY , .
from TAB
into :db_key
do
update TAB
set .
where RDB$DB_KEY = :db_key ;
end

Причем по таблице TAB может не быть индекса совсем, но по скорости выполнения такая конструкция практически равна скорости с оптимизацией по индексам. Например, если таблица TAB не имеет ни одного индекса, то без rdb$db_key время обновления 3-х тысяч записей 1500 секунд, а с rdb$db_key – 10 секунд.

Замечание. Обратите внимание, что длина db_key равна 8 байт. Если таблица TAB на самом деле является view, состоящим из двух таблиц, то длина db_key должна быть 16 байт, и так далее.

Неожиданный способ на основе ключевых слов AS CURSOR и WHERE CURRENT OF:

declare variable counter integer;
declare variable x integer;
begin
counter = 1;
for select c1 from t2 into 😡
as cursor FOO
do
begin
update t2
set c2 = c1 / :counter, c1 = :counter
where current of foo;
counter = :counter + 1;
end
end

Здесь таблица T2 рассматривается как курсор FOO, что в принципе эквивалентно предыдущему примеру с RDB$DB_KEY. Переменные counter, x, c2 и c1 – просто пример применения.

Выгода этого способа перед предыдущим – отсутствие необходимости объявлять переменную для хранения RDB$DB_KEY. Как упоминалось выше, размер db_key для view зависит от количества таблиц, на котором это view построено. При использовании as cursor и current of не нужно задумываться, какой объект используется для сканирования и обновления – таблица или view.

Copyright iBase.ru © 2002-2023

Копирование столбцов из одной таблицы в другую (компонент Database Engine)

В этом разделе описывается копирование столбцов из одной таблицы в другую с копированием только определения столбца или определения и данных в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

В этом разделе

  • Перед началом работыОграниченияБезопасность
  • Копирование столбцов с помощью:Среда SQL Server Management StudioTransact-SQL

Перед началом

Ограничения

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

Безопасность

Разрешения

Требуется разрешение ALTER на таблицу.

Использование среды SQL Server Management Studio

Копирование определения столбца из одной таблицы в другую
  1. Щелкнув правой кнопкой мыши, откройте таблицу со столбцами, предназначенными к копированию, и таблицу, в которую необходимо выполнить копирование, затем нажмите кнопку Разработка.
  2. Выберите вкладку исходной таблицы и выделите нужные столбцы.
  3. В меню Правка выберите Копировать.
  4. Выберите вкладку таблицы, в которую требуется скопировать столбцы.
  5. Выделите столбец, после которого нужно поместить вставляемые столбцы, и в меню Правка выберите Вставить.
Копирование данных из одной таблицы в другую
  1. Следуйте приведенным выше инструкциям для копирования определения столбцов.

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

Использование Transact-SQL

Копирование определения столбца из одной таблицы в другую
  1. Нельзя копировать отдельные столбцы из одной таблицы в другую (существующую) с использованием инструкций Transact-SQL. Однако можно создать новую таблицу в файловой группе по умолчанию и вставить в нее результирующие строки из запроса с помощью инструкции SELECT INTO. Дополнительные сведения см. в разделе Предложение INTO (Transact-SQL).
Копирование данных из одной таблицы в другую
  1. В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.
  2. На стандартной панели выберите пункт Создать запрос.
  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO CREATE TABLE dbo.EmployeeSales ( BusinessEntityID varchar(11) NOT NULL, SalesYTD money NOT NULL ); GO INSERT INTO dbo.EmployeeSales SELECT BusinessEntityID, SalesYTD FROM Sales.SalesPerson; GO 

Осваиваем инструкцию INSERT INTO SQL

Инструкция INSERT INTO SQL и INSERT INTRO SELECT используются для вставки новых строк в таблицу. Существует два способа использования инструкций:

  • Только значения : Первый метод предусматривает указание только значений данных, которые нужно вставить без имен столбцов.
INSERT INTO имя_таблицы VALUES (значение1, значение2, значение3. ); имя_таблицы: имя таблицы. значение1, значение2. : значения первого столбца, второго столбца. для новой записи
  • Имена столбцов и значения : При втором методе указываются имена столбцов и значения строк для вставки:
INSERT INTO имя_таблицы (столбец1, столбец2, столбец3. ) VALUES (значение1, значение2, значение3. ); имя_таблицы: имя таблицы. столбец1: имя первого столбцы, второго столбца . значение1, значение2. : значения первого столбца, второго столбца. для новой записи

Способ 1 ( вставка только значений ):

INSERT INTO Student VALUES ('5','HARSH','WEST BENGAL','8759770477','19');

После использования INSERT INTO SELECT таблица Student теперь будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
5 HARSH WEST BENGAL 8759770477 19

Способ 2 ( вставка значений только в указанные столбцы ):

INSERT INTO Student (ROLL_NO, NAME, Age) VALUES ('5','PRATIK','19');

Таблица Student теперь будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
5 PRATIK null null 19

Обратите внимание, что для столбцов, значения для которых не указаны, задается null .

Использование SELECT в инструкции INSERT INTO

Можно использовать инструкцию MySQL INSERT SELECT для копирования строк из одной таблицы и их вставки в другую.

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

  • Вставка всех столбцов таблицы : можно скопировать все данные таблицы и вставить их в другую таблицу.
INSERT INTO первая_таблица SELECT * FROM вторая_таблица; первая_таблица: имя первой таблицы. вторая_таблица: имя второй таблицы.

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

  • Вставка отдельных столбцов таблицы . Можно скопировать только те столбцы таблицы, которые необходимо вставить в другую таблицу.
INSERT INTO первая_таблица(имена_столбцов1) SELECT имена_столбцов2 FROM вторая_таблица; первая_таблица: имя первой таблицы. вторая_таблица: имя второй таблицы. имена_столбцов1: имена столбцов, разделенные запятой(,) для таблицы 1. имена_столбцов2: имена столбцов, разделенные запятой(,) для таблицы 2.

Мы использовали инструкцию SELECT для копирования данных только из выбранных столбцов второй таблицы и инструкцию INSERT INTO MySQL SELECT для их вставки в первую таблицу.

  • Копирование определенных строк из таблицы . Можно скопировать определенные строки из таблицы для последующей вставки в другую таблицу с помощью условия WHERE с оператором SELECT . В этом случае нужно использовать соответствующее условие в WHERE .
INSERT INTO таблица1 SELECT * FROM таблица2 WHERE условие; таблица1: имя первой таблицы. таблица2: имя второй таблицы. условие: условие для выбора строк.

Таблица 2: LateralStudent

ROLL_NO NAME ADDRESS PHONE Age
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

Способ 1 ( вставка всех строк и столбцов ):

INSERT INTO Student SELECT * FROM LateralStudent;

Этот запрос вставит все данные таблицы LateralStudent в таблицу Student . После применения INSERT INTO SQL SELECT таблица Student будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

Способ 2 ( вставка отдельных столбцов ):

INSERT INTO Student(ROLL_NO,NAME,Age) SELECT ROLL_NO, NAME, Age FROM LateralStudent;

Этот запрос вставит данные из столбцов ROLL_NO , NAME и Age таблицы LateralStudent в таблицу Student . Для остальных столбцов таблицы Student будет задано значение null . После применения SQL INSERT SELECT таблица будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK Null null 18
8 NIRAJ Null null 19
9 SOMESH Null null 20
  • Выбор определенных строк для вставки :
INSERT INTO Student SELECT * FROM LateralStudent WHERE Age = 18;

Этот запрос выберет только первую строку из таблицы LateralStudent для вставки в таблицу Student . После применения INSERT SELECT таблица будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK DUMDUM 9876543210 18

MySQL — как вставить данные из одной таблицы в другую?

Скопировать данные из одной таблицы в другую в базе данных MySQL полностью или частично очень просто. Далее рассмотрим несколько вариантов копирования данных.

Итак, чтобы полностью скопировать данные из одной таблицы в другую достаточно такого запроса:

INSERT INTO table_to
SELECT * FROM table_from

Вместо table_to и table_from подставляете названия своих таблиц и все получится.

Скопировать только некоторые столбцы из одной таблицы в другую можно таким запросом:

INSERT INTO table_to (`col1`, `col2`, `col2`)
SELECT `a1`, `a2`, `a3` FROM table_from

И последний вариант, копирование данных из таблицы в таблицу по какому-либо условию:

INSERT INTO table_to (`col1`, `col2`, `col2`)
SELECT `a1`, `a2`, `a3` FROM table_from WHERE `a1` > 100;

Выполнить данные запросы можно с помощью phpAdmin или любого другого mysql-менеджера. На этом все, до новых встреч!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *