SQL INSERT INTO SELECT: copiar datos de una tabla a otra

La sentencia SQL INSERT INTO SELECT se utiliza para transferir datos de una tabla a otra. Sin embargo, esta nueva tabla debe estar ya creada. A las columnas sin contenido se les asigna el valor NULL en la nueva tabla.

¿Qué es SQL INSERT INTO SELECT?

El Structured Query Language permite crear numerosas tablas dentro de una base de datos y alimentarlas con datos. Puede ocurrir que desees transferir todos o parte de los datos de una tabla a otra. En lugar de volver a introducir todas las entradas, tienes la opción de copiar los datos y pegarlos en el lugar deseado. La instrucción adecuada para ello es SQL INSERT INTO SELECT. Esto copia los datos según los requisitos y los inserta en la nueva tabla. Las entradas existentes no se sobrescriben. El requisito previo es que los tipos de datos de la tabla original y de la nueva coincidan.

Servidores virtuales VPS
Virtualización completa con acceso root
  • Ancho de banda de hasta 1 Gb/s y tráfico ilimitado
  • Almacenamiento SSD NVMe ultrarrápido
  • Incluye: edición Plesk Web Host

Sintaxis y funcionalidad

La sintaxis de SQL INSERT INTO SELECT difiere en función de si se desean copiar todas las columnas de una tabla a otra o si solo se desean transferir algunas columnas seleccionadas. Esta es la estructura para una transferencia completa:

INSERT INTO tabla_nueva 
SELECT * FROM tabla_antigua 
WHERE condición;
sql

La condición WHERE es opcional.

Si solo deseas transferir las columnas seleccionadas, ésta es la sintaxis adecuada:

INSERT INTO tabla_nueva (columna1, columna2, columna3, …) 
SELECT columna1, columna2, columna3, … FROM tabla_antigua 
WHERE condición;
sql

Deben especificarse las columnas individuales y luego se utiliza el comando SQL SELECT para seleccionarlas. En ambos casos, es importante que la tabla_nueva ya se haya creado en la base de datos. Además, los nombres de todas las columnas de la tabla antigua y nueva deben coincidir. Las columnas para las que no haya datos disponibles contendrán el valor NULL.

Copiar y pegar toda la tabla

Para mostrarte cómo funciona en la práctica SQL INSERT INTO SELECT, crearemos una tabla de ejemplo llamada “Lista_clientes_2023”. Ésta contiene información sobre el número de cliente, el nombre, la ubicación y el número de artículos pedidos:

Número de cliente Nombre Ubicación Artículo
1427 Pérez Madrid 13
1377 Martín Barcelona 9
1212 Hernández Barcelona 15
1431 Rodríguez Sevilla 22
1118 García Madrid 10

Tenemos una nueva tabla con el nombre “Lista_clientes_2024” que actualmente está vacía.

Si queremos insertar las entradas de la tabla “Lista_clientes_2023” completamente en la nueva tabla “Lista_clientes_2024”, procedemos de la siguiente manera:

INSERT INTO Lista_clientes_2024 
SELECT * FROM Lista_clientes_2023;
sql

Todas las entradas de la antigua lista de clientes están ahora también en la nueva:

Número de cliente Nombre Ubicación Artículo
1427 Pérez Madrid 13
1377 Martín Barcelona 9
1212 Hernández Barcelona 15
1431 Rodríguez Sevilla 22
1118 García Madrid 10

Transferir columnas seleccionadas

También puede darse el caso de que solo desees transferir determinadas columnas. En nuestro caso, por ejemplo, el número de artículos pedidos puede no ser relevante para la nueva tabla. Podemos seleccionar determinadas columnas para la transferencia:

INSERT INTO Lista_clientes_2024 (Número de cliente, Nombre, Ubicación) 
SELECT Número de cliente, Nombre, Ubicación FROM Lista_clientes_2023;
sql

Esto nos da esta nueva tabla:

Número de cliente Nombre Ubicación Artículo
1427 Pérez Madrid
1377 Martín Barcelona
1212 Hernández Barcelona
1431 Rodríguez Sevilla
1118 García Madrid

Por lo tanto, la columna artículo solo contiene entradas con el valor NULL.

Instalar condiciones para la transferencia

También puedes utilizar la condición WHERE para copiar solo las filas seleccionadas. Para nuestra tabla, por ejemplo, solo queremos transferir clientes de Barcelona:

INSERT INTO Lista_clientes_2024 
SELECT * FROM Lista_clientes_2023 
WHERE Ubicación = 'Barcelona';
sql

Nuestra nueva tabla sería la siguiente:

Número de cliente Nombre Ubicación Artículo
1377 Martín Barcelona 9
1212 Hernández Barcelona 15

Alternativas a SQL INSERT INTO SELECT

Una alternativa a SQL INSERT INTO SELECT es SELECT INTO. Ambas instrucciones se utilizan para transferir datos de una tabla a otra. También actúan como parte de un comando mayor. Sin embargo, mientras que SQL INSERT INTO SELECT requiere una tabla existente a la que transferir los datos, SELECT INTO crea una nueva tabla.

Consejo

La elección es tuya: con el Hosting SQL Server de IONOS puedes utilizar MSSQL, MySQL o MariaDB. En todos los casos tendrás máximo rendimiento, sólidas funciones de seguridad y asesoramiento personalizado.

¿Le ha resultado útil este artículo?
Page top