SQL INSERT INTO SELECT: Ejemplo

La inserción con el comando SQL INSERT INTO SELECT se usa para agregar información de una tabla a otra en un misma base de datos o en base de datos distintas, esta instrucción requiere que los tipos de datos en las tablas de origen y de destino coincidan.

Si tiene las tablas existentes en el destino, entonces la instrucción Insertar en Selección de SQL Server puede ser muy útil para cargar los datos especificados en un destino. Si no se crea, utilice SELECT INTO .

Sintaxis de la instrucción SQL insert into select

Veamos una sintaxis general para usar esta sentencia.

INSERT INTO nombre_tabla2 (nombre_columna1, 
nombre_columna2, nombre_columna3, ...)
SELECT nombre_columna1,nombre_columna2, nombre_columna3, ...
FROM  nombre_tabla1
WHERE condición;

Argumento de sintaxis de SQL INSERT INTO SELECT

nombre_tabla2: agregue el nombre de la tabla origen donde va a insertar los datos, debe tener en cuenta el esquema si realiza la operación en base de datos diferentes.
nombre_tabla1: agregue el nombre de la tabla de donde se tomaran los datos con la instrucción de select SQL.
nombre_columna1, nombre_columna2, nombre_columna3 …: el nombre de las columnas que se recuperarán de la tabla
nombre_tabla2 y se insertarán en la tabla nombre_tabla1, el nombre de la columna de la tabla de destino y de origen deben coincidir. 
WHERE: La cláusula de condición Where es opcional, nos permite recuperar filas de la tabla de forma condicional y insertarlas en la tabla de destino.

Ejemplo de la instrucción SQL insert into select

Para este ejemplo primero comencemos creado una tabla donde he almacenado la información básica de los empleados de una empresa.

CREATE TABLE EMPLEADOS

(id INT IDENTITY PRIMARY KEY,
Nombre VARCHAR(50) NOT NULL,
Genero VARCHAR(20) NOT NULL,
Año INT NOT NULL,
Sueldo INT NOT NULL)

INSERT INTO dbo.EMPLEADOS

VALUES ('Jolly', 'F', 20, 5200),
('José', 'M', 22, 6450),
('Rosa', 'F', 25, 6100),
('Laura', 'F', 18, 4030),
('Alan', 'M', 20, 5000),
('Katy', 'F', 22, 6000),
('Joseph', 'M', 18, 6430),
('Antonio', 'M', 23, 5013),
('Diego', 'M', 21, 6090),
('Elis', 'F', 27, 5040)

He proporcionado el código de la tabla para que pueda probarlo en su final.

  • Ahora suponga que desea colocar estos datos en otra tabla, pero sin el rango.
  • En este caso, puede usar la declaración SQL INSERT INTO SELECT para copiar solo la columna requerida en otra tabla.
  • Vamos a crear otra tabla donde queramos copiar estos datos.
CREATE TABLE EMPLEADOS_INFORMACION

(id INT IDENTITY PRIMARY KEY,
Nombre VARCHAR(50) NOT NULL,
Genero VARCHAR(20) NOT NULL,
Año INT NOT NULL,
Sueldo INT NOT NULL)

Ahora usaré la declaración SQL INSERT INTO SELECT para copiar datos de la tabla dbo.EMPLEADOS en la tabla dbo.EMPLEADO_INF como:

INSERT INTO dbo.EMPLEADO_INF (Nombre, Genero, Año,Sueldo)
SELECT Nombre, Genero, Año,Sueldo
FROM EMPLEADOS;

---- Para ver la información insertada

SELECT Nombre, Genero, Año,Sueldo
FROM EMPLEADO_INFORMACION;

sql insert into select

Puede ver que los datos especificados se recuperaron de la tabla dbo.EMPLEADOS y se insertaron en la tabla dbo.EMPLEADOS_INF.

Copiar solo las columnas seleccionadas

También podemos copiar solo las columnas seleccionadas de una tabla a otra. Por ejemplo,

INSERT INTO orden(p_i6d, edad)
SELECT pedido_id, edad
FROM pedido;

Nota: Si hay columnas distintas a Identificación del cliente y edad en el Clientes antiguos tabla, el valor de esas columnas será NULL.

Copie datos de dos tablas a una en sql

También podemos copiar registros de dos tablas diferentes usando la JOINcláusula with SQL INSERT INTO SELECT. Por ejemplo,

INSERT INTO orden_pedido
SELECT Pedido.p_id, p.first_name, Orden.monto
FROM Pedido
JOIN Orden
ON Pedido.p_id = Orden.p_id;

Para obtener más información, visite SQL JOIN.

Nota: Si una tabla ya contiene datos, el comando SQL INSERT INTO SELECT declaración agrega nuevas filas a la tabla.

Diferencia en SQL INSERT INTO SELECT vs SELECT INTO

Aquí tienes algunos puntos importantes para resumir las diferencias clave entre INSERT INTO SELECT y SELECT INTO en SQL Server:

CaracterísticaINSERT INTO SELECTSELECT INTO
PropósitoInsertar datos en una tabla existente.Crear una nueva tabla basada en una consulta SELECT.
SintaxisSQL INSERT INTO tabla1 (columnas) SELECT columnas FROM tabla2 WHERE condición;SQL SELECT columnas INTO nueva_tabla FROM tabla WHERE condición;
UsoCopiar datos de una tabla a otra, posiblemente con transformaciones o filtros.Crear una nueva tabla con la estructura del resultado de la consulta SELECT.
La tabla de destinoDebe existir previamente con las columnas especificadas.Se crea automáticamente con las columnas derivadas de la consulta SELECT.
EjemploSQL INSERT INTO tabla_destino (nombre,edad) SELECT nombre, edad FROM tabla_origen WHERE edad > 21;sql SELECT nombre, edad INTO Nueva_tabla FROM tabla_origen WHERE edad > 21;

Estos puntos reflejan las diferencias fundamentales en el propósito y el comportamiento entre ambas instrucciones en SQL Server. La elección entre ellas dependerá de tus necesidades específicas, ya sea que estés trabajando con una tabla existente y deseas insertar datos en ella (INSERT INTO SELECT) o si deseas crear una nueva tabla basada en los resultados de una consulta (SELECT INTO).

Puntos a tomar en cuenta con la instrucción SQL insert into select

Al usar la sentencia SQL INSERT INTO SELECT, es importante tomar en cuenta los siguientes aspectos:

  • Debe asegurarse de que la tabla de origen tenga una estructura que sea compatible con la tabla de destino. Los nombres y tipos de columnas deben ser iguales o compatibles.
  • Asegúrese de que la tabla de destino esté diseñada para recibir los datos de la tabla de origen. Si la tabla de destino tiene restricciones de clave primaria, clave foránea u otras restricciones en SQL server, debe asegurarse de que los datos de la tabla de origen no violen esas restricciones.
  • La consulta SELECT debe ser cuidadosamente diseñada para seleccionar solo los datos necesarios y en el formato correcto. Debe asegurarse de que la consulta SELECT produzca datos que se ajusten a la estructura de la tabla de destino.

Deja un comentario