MySQL: Как скопировать данные таблицы в другую
Есть довольно много способов скопировать необходимые данные из одной таблицы в базе MySQL в другую таблицу.Рассмотрим несколько примеров, что бы понять принцип работы.
Если нам необходимо полностью скопировать данные:
INSERT INTO `table_1` SELECT * FROM `table_2`;
Такой простой запрос возьмет данные с таблицы table_2 и вставит их в table_1
Если нужно сделать копию данных из одной таблицы MySQL в другую с условием:
INSERT INTO `table_1` SELECT * FROM `table_2` WHERE `row`='1';
Данный запрос возьмет все данные с таблицы table_2 у которых столбец row=1 и вставит их в table_1
Если необходимо скопировать только нужные столбцы:
INSERT INTO `table_1`(`row_1`, `row_2`, `row_3`) SELECT `row_1`, `row_2`, `row_3` FROM `table_2`;
Вот такое простое решение для копирования данных из одной MySQL таблицы в другую.
Осваиваем инструкцию 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-менеджера. На этом все, до новых встреч!
Копирование записей из одной таблицы в другую MySQL
Примеры SQL-запросов для копирования записей из разных таблицы.
Частичное копирование
К примеру есть две одинаковые по структуре, нужно из таблицы `table_a` скопировать запись с определенными полями в таблицу `table_b`.
INSERT INTO `table_a` (`name`, `alt`, `page`) SELECT `name`, `alt`, `page` FROM `table_b` WHERE `id` = 1
Копирование нескольких записей:
INSERT INTO `table_a` (`name`, `alt`, `page`) SELECT `name`, `alt`, `page` FROM `table_b` WHERE `id` IN(1,2,3)
Полное копирование
Если таблицы `table_a` и `table_b` полностью одинаковые по структуре, то названия полей можно опустить.
INSERT INTO `table_b` SELECT * FROM `table_a`
Или указать только нужные поля:
INSERT INTO `table_a` (`name`, `alt`, `page`) SELECT `name`, `alt`, `page` FROM `table_b`
Подгонка структуры таблицы
Если таблицы разные по структуре, то можно подогнать названия и значения полей.
INSERT INTO `table_b` (`name`, `alt`, `page`, `module`, `sort`) SELECT `filename` AS `name`, '' AS `alt`, `page`, 'prod' AS `module`, 1 AS `sort` FROM `table_a`
Копирование с подзапросом в третью таблицу
INSERT INTO `table_b` (`name`, `alt`, `page`, `module`, `sort`) SELECT (SELECT `name` FROM `table_c` WHERE `item_id` = `table_a`.`id`) AS `name`, '' AS `alt`, `page`, 'prod' AS `module`, 1 AS `sort` FROM `table_a`
Копирование записей из двух и более таблиц
INSERT INTO `table_b` (`name`, `email`, `address`) SELECT * FROM ( (SELECT `name`, `email`, `address` FROM `table_a`) UNION ( SELECT `name`, `email`, `address` FROM `table_c`) )