INSERT INTO SELECT en SQL
La sentencia INSERT INTO SELECT copia filas obtenidas por una consulta y las inserta en otra tabla. Permite trasladar, transformar o respaldar datos sin escribir cada fila a mano.
INSERT INTO SELECT en SQL es una pieza habitual del flujo SQL: consultar, filtrar, agrupar o modificar datos. Cada ejemplo usa tablas de demostración para que puedas experimentar sin riesgo.
Cómo practicar: ejecuta la consulta tal cual, revisa columnas y tipos, luego cambia un filtro o un alias y vuelve a ejecutar.
Las columnas de origen y destino deben aparecer en el mismo orden y tener tipos compatibles. La consulta puede incluir filtros, expresiones y uniones.
Sintaxis INSERT INTO SELECT
La sintaxis indica el orden de argumentos y palabras clave. Copia la plantilla y sustituye nombres de columnas o literales entre comillas simples.
Plantilla
INSERT INTO tabla_destino (columna1, columna2)
SELECT columna_origen1, columna_origen2
FROM tabla_origen
WHERE condicion;
Copiar un proveedor a Clientes
Este ejemplo crea un cliente a partir del proveedor con ID 1. Los valores constantes completan las columnas que no existen en Proveedores.
INSERT INTO SELECT con valores constantes
INSERT INTO Clientes (ID_Cliente, Nombre_Cliente, Ciudad, Pais, N_Ventas)
OUTPUT inserted.Nombre_Cliente, inserted.Ciudad, inserted.Pais
SELECT 20, Nombre, Ciudad, Pais, 0
FROM Proveedores
WHERE ID_Proveedor = 1;
| Nombre_Cliente | Ciudad | Pais |
|---|---|---|
| Alimentos Ibérica | Madrid | España |
Crear una tabla desde una consulta
SQL Server usa SELECT … INTO para crear una tabla a partir de una consulta. La tabla nueva recibe las filas y columnas del resultado; restricciones, índices y claves deben definirse aparte.
Productos de la categoría 1
SELECT Nombre_Producto, Precio
INTO Productos_Backup
FROM Productos
WHERE ID_Categoria = 1;
SELECT Nombre_Producto, Precio
FROM Productos_Backup
ORDER BY Nombre_Producto;
| Nombre_Producto | Precio |
|---|---|
| Café expreso | 12.5 |
| Té verde | 8 |
Copiar una fila dentro de la misma tabla
También puedes usar la misma tabla como origen y destino. Debes asignar una clave primaria nueva para no duplicar el identificador existente.
Duplicar los datos del cliente 2
INSERT INTO Clientes (ID_Cliente, Nombre_Cliente, Ciudad, Pais, N_Ventas)
OUTPUT inserted.Nombre_Cliente, inserted.Ciudad
SELECT 21, Nombre_Cliente, Ciudad, Pais, N_Ventas
FROM Clientes
WHERE ID_Cliente = 2;
| Nombre_Cliente | Ciudad |
|---|---|
| Luis Pérez | Barcelona |
Base de datos de demostración: Clientes
Observa qué columnas devuelve la consulta y cómo se nombran con AS. Ese alias es lo que verás en la cuadrícula del editor.
| ID_Cliente | Nombre_Cliente | Ciudad | Pais | N_Ventas |
|---|---|---|---|---|
| 1 | Ana García | Madrid | España | 120 |
| 2 | Luis Pérez | Barcelona | España | 85 |
| 3 | María López | Valencia | España | 200 |
| 4 | Carlos Ruiz | Madrid | España | 45 |
| 5 | Elena Torres | Sevilla | España | 67 |
| 6 | John Smith | London | UK | 150 |
| 7 | Marie Dubois | Paris | Francia | 92 |
| 8 | Hans Müller | Berlin | Alemania | 78 |
| 9 | Luca Rossi | Roma | Italia | 110 |
| 10 | Sofia Anders | Stockholm | Suecia | 55 |
Tabla Proveedores (demo)
| ID_Proveedor | Nombre | Ciudad | Pais |
|---|---|---|---|
| 1 | Alimentos Ibérica | Madrid | España |
| 2 | Delicias del Mar | Vigo | España |
| 3 | Granos del Valle | Zaragoza | España |
| 4 | Lácteos Premium | Lugo | España |
| 5 | Frutas del Sur | Málaga | España |
| 6 | Import Foods Ltd | London | UK |
Base de datos de demostración: Productos
| ID_Producto | Nombre_Producto | Precio | Stock |
|---|---|---|---|
| 1 | Café expreso | 12.50 | 120 |
| 2 | Té verde | 8.00 | 200 |
| 3 | Salsa de tomate | 3.20 | 340 |
| 4 | Galletas de avena | 4.50 | 180 |
| 5 | Queso manchego | 15.00 | 90 |
| 6 | Arroz integral | 2.80 | 500 |
| 7 | Jamón serrano | 22.00 | 60 |
| 8 | Manzanas Golden | 1.90 | 400 |
| 9 | Salmón fresco | 18.50 | 45 |
| 10 | Aceite de oliva | 9.90 | 150 |
Resumen INSERT INTO SELECT
- Copia varias filas mediante el resultado de un
SELECT. - Relaciona cada columna de destino con una expresión compatible del origen.
- Usa
WHEREpara limitar las filas que se insertan. CREATE TABLE ... AS SELECTcrea una copia de datos, no una réplica completa del esquema.
Cómo practicar en el editor
1. Pulsa Pruébalo tú mismo en un ejemplo.
2. Cambia un filtro, columna o literal.
3. Ejecuta y compara el resultado con la tabla de ejemplo.
Comprueba lo aprendido
Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.