SQL INSERT INTO SELECT: Cómo insertar registros en una tabla a partir de otra tabla

INSERT INTO SELECT copia los datos de una tabla y los inserta en otra tabla.

  • INSERT INTO SELECT requiere que los tipos de datos en las tablas de origen y destino coincidan.
  • Los registros que ya existían en la tabla de destino no se modifican.

INSERT INTO SELECT: Sintaxis para seleccionar los registros a insertar en otra tabla

En el siguiente ejemplo se copian todas las columnas de una tabla a otra tabla:

INSERT INTO tabla2
SELECT * 
FROM tabla1
WHERE condicion;

Ejemplo para insertar solo las columnas seleccionadas con INSERT INTO SELECT

En el ejemplo se insertan solamente algunas columnas de una a otra tabla:

INSERT INTO table2 (columna1, columna2, columna3, ...)
SELECT columna1, columna2, columna3, ...
FROM tabla1
WHERE condicion;

Ejemplos de SQL INSERT INTO SELECT

A continuación puedes ver algunos ejemplos de INSERT INTO SELECT:

Ejemplo 1

La siguiente consulta SQL copia «Proveedores» en «Clientes» (las columnas que no están llenas de datos, serán NULL):

INSERT INTO Clientes (NombreCliente, Ciudad, Pais)
SELECT NombreProveedor, Ciudad, Pais 
FROM Proveedores;

Ejemplo 2

La siguiente declaración SQL copia «Proveedores» en «Clientes»:

INSERT INTO Clientes 
(Nombre_Cliente
, Nombre_Contacto
, Direccion
, Ciiudad
, CodigoPostal, Pais)
SELECT Nombre_Proveedor
, Nombre_Contacto
, Direccion
, Ciudad
, CodigoPostal
, Pais 
FROM Proveedores;

Ejemplo 3

En el siguiente ejemplo, la consulta SQL copia solo los proveedores de Uruguay en «Clientes»:

INSERT INTO Clientes (NombreCliente, Ciudad, Pais)
SELECT NombreProveedor, Ciudad, Pais 
FROM Proveedores
WHERE Pais='Uruguay';