Эффективные методы создания SQL-таблиц со столбцами из другой таблицы

Создание таблиц SQL со столбцами, производными от другой таблицы, является распространенной задачей при управлении базами данных. В этой статье рассматривается несколько методов эффективного выполнения этой задачи и приводятся примеры кода для каждого подхода. Независимо от того, являетесь ли вы новичком или опытным разработчиком, эти методы помогут вам оптимизировать рабочий процесс SQL и сэкономить время. Давайте погрузимся!

Метод 1: использование оператора CREATE TABLE AS SELECT
Пример кода:

CREATE TABLE new_table AS
  SELECT column1, column2, column3
  FROM existing_table;

Метод 2: использование оператора CREATE TABLE с определениями столбцов
Пример кода:

CREATE TABLE new_table (
  column1 datatype,
  column2 datatype,
  column3 datatype
);

Метод 3: использование оператора CREATE TABLE с предложением SELECT INTO
Пример кода:

SELECT column1, column2, column3
INTO new_table
FROM existing_table;

Метод 4. Создание временной таблицы и изменение ее структуры
Пример кода:

CREATE TEMPORARY TABLE temp_table AS
  SELECT column1, column2, column3
  FROM existing_table;
ALTER TABLE temp_table
RENAME TO new_table;

Метод 5: клонирование структуры существующей таблицы с помощью предложения LIKE
Пример кода:

CREATE TABLE new_table LIKE existing_table;

Метод 6: использование представления information_schema.columns
Пример кода:

CREATE TABLE new_table AS
  SELECT column_name, data_type
  FROM information_schema.columns
  WHERE table_name = 'existing_table';

Метод 7. Использование хранимой процедуры или языка сценариев
Пример кода (хранимая процедура MySQL):

DELIMITER //
CREATE PROCEDURE create_table_from_existing()
BEGIN
  DECLARE column_name VARCHAR(255);
  DECLARE done INT DEFAULT FALSE;
  DECLARE cur CURSOR FOR
    SELECT column_name
    FROM information_schema.columns
    WHERE table_name = 'existing_table';
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  CREATE TABLE new_table (
    id INT AUTO_INCREMENT PRIMARY KEY
  );
  OPEN cur;
  read_loop: LOOP
    FETCH cur INTO column_name;
    IF done THEN
      LEAVE read_loop;
    END IF;
    SET @sql = CONCAT('ALTER TABLE new_table ADD COLUMN ', column_name, ' datatype;');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
  END LOOP;
  CLOSE cur;
END //
DELIMITER ;
CALL create_table_from_existing();