Перенос запроса SELECT INTO из MSSQL в MySQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам нужно скопировать структуру и содержимое таблицы в MySQL, то используйте следующую команду CREATE TABLE ... AS SELECT. Она заменяет SELECT INTO:

``` CREATE TABLE новаятаблица AS SELECT * FROM существующаятаблица;

**
Скопировать код

Таким образом, вы без труда создаёте **`новую_таблицу`**, дублируя схему и данные из **`существующей_таблицы`**.

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

[AsideBanner]
##Возможности оператора CREATE TABLE AS SELECT

Идеальное решение для копирования таблиц или их содержимого в MySQL представляет оператор `CREATE TABLE ... AS SELECT`. Он не просто дублирует данные, но и формирует **новую таблицу**, опираясь на результат запроса `SELECT`.

### Обращаем внимание на отличия: Типы данных и ограничения

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

### Изъятие определённой выборки данных

Если нужно скопировать определённый набор данных, воспользуйтесь `WHERE` и выбором конкретных столбцов в запросе `SELECT`:

**

CREATE TABLE новаятаблица AS SELECT столбец1, столбец2 FROM существующаятаблица WHERE условие;

**
Скопировать код

### Ошибка "Undeclared variable"? Не в нашем случае!

Если вы пробуете использовать `SELECT INTO` прямо в MySQL, столкнётесь с ошибкой "Undеclared Variable" – в MySQL отсутствует поддержка синтаксиса `SELECT INTO` для создания новых таблиц (в отличие от MSSQL). Но не беспокойтесь, мы уже обошли эту проблему.

### Перенос данных в готовую таблицу: Команда INSERT INTO SELECT

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

**

INSERT INTO целеваятаблица (столбец1, столбец2) SELECT столбец1, столбец2 FROM исходнаятаблица WHERE условие;

**
Скопировать код

При этом следует учесть, что порядок и количество столбцов в частях `INSERT INTO` и `SELECT` должны соответствовать друг другу.

## Визуализация

Операцию `SELECT INTO` можно сравнить с переездом, когда вещи перекладывают из одной коробки в другую:
markdown 📦 Исходная коробка (исходная таблица): [👕 Футболка, 👖 Брюки, 🧦 Носки] 📦 Целевая коробка (целевая таблица): []

Процесс выполнения команды `SELECT INTO`:
sql SELECT * INTO ЦелеваяКоробка FROM ИсходнаяКоробка;

Переезд успешно завершён!
markdown 📦 Исходная коробка (исходная таблица): [👕 Футболка, 👖 Брюки, 🧦 Носки] 📦 Целевая коробка (целевая таблица): [👕 Футболка, 👖 Брюки, 🧦 Носки]

`SELECT INTO` – это эффективное управление данными, схожее с логистикой переезда!

## Временные таблицы: Экспериментальная площадка

Временные таблицы – это ваша "лаборатория" для тестирования сложных операций: сначала протестируйте всё в **временной таблице**, а потом перенесите результаты в **постоянную таблицу**.

`CREATE TEMPORARY TABLE временная_таблица AS SELECT * FROM существующая_таблица; -- здесь можно без зазрения совести экспериментировать, в конце концов, это временная таблица! 😁`

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

## Работа с большими объёмами данных: Производительность на первом месте

При обработке больших объёмов данных приоритет отдаётся производительности. Индексы не копируются вместе с данными, поэтому после выполнения запроса необходимо настроить их вручную. Чтобы улучшить производительность запроса используйте `EXPLAIN`, это позволит проанализировать его и оптимизировать при необходимости.

## Сложное отображение столбцов: Всё под контролем!

Если вам необходимо не только скопировать, но и преобразовать данные при работе со **сложными схемами** или когда требуется **подготовка данных** до их вставки, используйте **алиасы** и **функции** в запросе `SELECT`:

**

CREATE TABLE новая_таблица AS SELECT исходныйстолбец1 AS новоеназвание, -- 🕵️‍♀️ это ренейминг на лету CONCAT(исходныйстолбец2, ' ', исходный столбец3) AS столбец_объединенный -- 🤝 группировка данных FROM существующая_таблица;

```

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

Полезные материалы

  1. MySQL :: Руководство по MySQL 8.0 :: 13.2.7.1 INSERT ... SELECT Statement – Детальное изложение синтаксиса INSERT ... SELECT в официальной документации MySQL.
  2. MySQL :: Руководство по MySQL 8.0 :: 13.2.13.1 SELECT ... INTO Statement – Более подробная информация по использованию SELECT INTO OUTFILE из официальных источников.
  3. Difference Between INSERT INTO and SELECT INTO – Database Guide – Ключевые различия между INSERT INTO и SELECT INTO.
  4. Статья на SQLShack об использовании SELECT INTO в MySQL – Глубокое изучение возможностей SELECT INTO в MySQL.