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;
  
Abrir en editor
Nombre_ClienteCiudadPais
Alimentos IbéricaMadridEspaña

Crear una tabla desde una consulta

SQL Server usa SELECTINTO 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;
  
Abrir en editor
Nombre_ProductoPrecio
Café expreso12.5
Té verde8

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;
  
Abrir en editor
Nombre_ClienteCiudad
Luis PérezBarcelona

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
1Ana GarcíaMadridEspaña120
2Luis PérezBarcelonaEspaña85
3María LópezValenciaEspaña200
4Carlos RuizMadridEspaña45
5Elena TorresSevillaEspaña67
6John SmithLondonUK150
7Marie DuboisParisFrancia92
8Hans MüllerBerlinAlemania78
9Luca RossiRomaItalia110
10Sofia AndersStockholmSuecia55
Tabla Clientes en el editor SQL (10 filas). La usamos en la mayoría de ejemplos de esta fase.

Tabla Proveedores (demo)

ID_Proveedor Nombre Ciudad Pais
1Alimentos IbéricaMadridEspaña
2Delicias del MarVigoEspaña
3Granos del ValleZaragozaEspaña
4Lácteos PremiumLugoEspaña
5Frutas del SurMálagaEspaña
6Import Foods LtdLondonUK
Tabla Proveedores en el editor SQL. Comparte ciudades con Clientes (Madrid, London…).

Base de datos de demostración: Productos

ID_Producto Nombre_Producto Precio Stock
1Café expreso12.50120
2Té verde8.00200
3Salsa de tomate3.20340
4Galletas de avena4.50180
5Queso manchego15.0090
6Arroz integral2.80500
7Jamón serrano22.0060
8Manzanas Golden1.90400
9Salmón fresco18.5045
10Aceite de oliva9.90150
Tabla Productos en el editor SQL.

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 WHERE para limitar las filas que se insertan.
  • CREATE TABLE ... AS SELECT crea 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.