La sentencia SQL INSERT INTO SELECT se utiliza para tra­n­s­fe­rir 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 Stru­c­tu­red Query Language permite crear numerosas tablas dentro de una base de datos y ali­me­n­tar­las con datos. Puede ocurrir que desees tra­n­s­fe­rir todos o parte de los datos de una tabla a otra. En lugar de volver a in­tro­du­cir todas las entradas, tienes la opción de copiar los datos y pegarlos en el lugar deseado. La in­s­tru­c­ción adecuada para ello es SQL INSERT INTO SELECT. Esto copia los datos según los re­qui­si­tos y los inserta en la nueva tabla. Las entradas exi­s­te­n­tes no se so­bre­s­cri­ben. El requisito previo es que los tipos de datos de la tabla original y de la nueva coincidan.

Se­r­vi­do­res virtuales (VPS)
VPS rentables en se­r­vi­do­res Dell En­te­r­pri­se
  • 1 Gb/s de ancho de banda y tráfico ilimitado
  • 99,99 % de tiempo de actividad y ce­r­ti­fi­ca­ción ISO
  • Soporte 24/7 ga­la­r­do­na­do y asesor personal

Sintaxis y fu­n­cio­na­li­dad

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 tra­n­s­fe­rir algunas columnas se­le­c­cio­na­das. Esta es la es­tru­c­tu­ra para una tra­n­s­fe­re­n­cia completa:

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

La condición WHERE es opcional.

Si solo deseas tra­n­s­fe­rir las columnas se­le­c­cio­na­das, ésta es la sintaxis adecuada:

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

Deben es­pe­ci­fi­car­se las columnas in­di­vi­dua­les y luego se utiliza el comando SQL SELECT para se­le­c­cio­nar­las. En ambos casos, es im­po­r­ta­n­te 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 di­s­po­ni­bles co­n­te­n­drá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 in­fo­r­ma­ció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 ac­tua­l­me­n­te está vacía.

Si queremos insertar las entradas de la tabla “Lista_clientes_2023” co­m­ple­ta­me­n­te en la nueva tabla “Lista_clientes_2024”, pro­ce­de­mos 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

Tra­n­s­fe­rir columnas se­le­c­cio­na­das

También puede darse el caso de que solo desees tra­n­s­fe­rir de­te­r­mi­na­das columnas. En nuestro caso, por ejemplo, el número de artículos pedidos puede no ser relevante para la nueva tabla. Podemos se­le­c­cio­nar de­te­r­mi­na­das columnas para la tra­n­s­fe­re­n­cia:

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 co­n­di­cio­nes para la tra­n­s­fe­re­n­cia

También puedes utilizar la condición WHERE para copiar solo las filas se­le­c­cio­na­das. Para nuestra tabla, por ejemplo, solo queremos tra­n­s­fe­rir 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

Al­te­r­na­ti­vas a SQL INSERT INTO SELECT

Una al­te­r­na­ti­va a SQL INSERT INTO SELECT es SELECT INTO. Ambas in­s­tru­c­cio­nes se utilizan para tra­n­s­fe­rir 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 tra­n­s­fe­rir 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 re­n­di­mie­n­to, sólidas funciones de seguridad y ase­so­ra­mie­n­to pe­r­so­na­li­za­do.

Ir al menú principal