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.
- 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;
sqlLa 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;
sqlDeben 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;
sqlTodas 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;
sqlEsto 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';
sqlNuestra 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.
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.