SQLShack (Español)

Este artículo cubre la instrucción SQL INSERT INTO SELECT junto con su sintaxis, ejemplos y casos de uso.

En mi artículo anterior SQL SELECT INTO Statement, exploramos las siguientes tareas.

  • Cree una tabla SQL sobre la marcha mientras inserta registros con los tipos de datos adecuados
  • Use SQL SELECT INTO para insertar registros en un grupo de archivos en particular
  • No podemos usarlo para insertar datos en una tabla existente

La instrucción INSERT INTO SELECT

Queremos insertar registros como una actividad regular de la base de datos. Podemos insertar datos directamente usando herramientas cliente como SSMS, Azure Data Studio o directamente desde una aplicación. En SQL, usamos la instrucción SQL INSERT INTO para insertar registros.

La sintaxis de INSERT INTO

Una vez que insertamos datos en la tabla, podemos usar la siguiente sintaxis para nuestra Instrucción SQL INSERT INTO.

1
2

INSERT INTO nombre_tabla (Columna1, Columna 2 ….)
VALORES (valor1, valor2, …);

Si hemos especificado todos los valores de columna según la columna de la tabla pedidos, no es necesario especificar nombres de columna. Podemos insertar registros directamente en la tabla.

1
2

INSERT INTO table_name
VALUES (value1, value2, …);

Creemos una tabla de muestra e insertemos datos en ella .

1
2
3
4

CREAR TABLA Empleados
(ID INT,
Nombre VARCHAR (20)
);

Podemos insertar datos usando las siguientes consultas. Ambas consultas son válidas para la inserción de datos.

1
2

Insertar en Empleados (ID, Nombre) valores (1, «raj»)
Insertar en Empleados valores (2, «raj»)

No podemos insertar datos sin especificar nombres de columna si hay un la discrepancia entre la inserción de datos y el orden de los valores de las columnas es diferente. Podemos obtener el siguiente mensaje de error.

  • Msg 213, Level 16, State 1, Line 6

    El nombre de la columna o el número de valores proporcionados no definición de la tabla de coincidencias.

  • Msg 245, Nivel 16, Estado 1, Línea 6

    La conversión falló al convertir el valor varchar raj al tipo de datos int.

En este ejemplo, usaremos la instrucción SQL INSERT INTO con el suministro de valores directamente en una instrucción. Supongamos que queremos insertar datos de otra tabla. Todavía podemos usar la instrucción SQL INSERT INTO con una instrucción select. Exploremos esto en la siguiente sección.

INSERT INTO SELECT Statement Syntax

Podemos insertar datos de otras tablas SQL en una tabla con la siguiente sentencia INSERT INTO SELECT.

1
2
3

INSERT INTO table1 (col1, col2, col3,…)
SELECT col1, col2, col3,…
FROM table2

Esta consulta realiza las siguientes tareas:

  • Primero selecciona registros de una tabla (instrucción Select)
  • Luego, inserta en una tabla especificada con INSERT INTO
  • Nota: La estructura de la columna debe coincidir entre la columna devuelta por la instrucción SELECT y la tabla de destino.

INSERT INTO SELECT ejemplos

Ejemplo 1: insertar datos de todas las columnas de la tabla de origen en la tabla de destino

Tenemos los siguientes registros en una Tabla de empleados existente.

Creemos otra tabla de Clientes con la siguiente consulta.

1
2
3
4

CREAR TABLA Clientes
(ID INT,
Nombre VARCHAR (20)
);

Queremos insertar todos los registros de la tabla Empleados para la mesa de Clientes. Podemos usar la instrucción SQL INSERT INTO SELECT para hacer esto.

1
2
3

INSERT INTO Clientes
SELECT *
FROM Empleados;

Inserta todos los registros en la tabla Clientes. Podemos verificar que los registros en la tabla Clientes son similares a la tabla Empleados.

En este ejemplo, insertamos registros para todos columnas a la tabla Clientes.

Ejemplo 2: Inserte filas desde la tabla de origen a la de destino especificando los nombres de las columnas

Eliminemos la tabla Clientes existente antes de continuar. Ahora, queremos crear una tabla con una columna de IDENTIDAD adicional. La columna IDENTIDAD inserta automáticamente valores de identidad en una tabla. También agregamos una columna Ciudad que permite valores NULL

1
2
3
4
5
6

CREAR TABLA Clientes
(ID INT IDENTIDAD (1, 1),
Emp_ID INT,
Nombre VARCHAR (20),
Ciudad VARCHAR (20) NULL,
);

No podemos usar la instrucción INSERT INTO SELECT similar a la ejemplo anterior. Si intentamos ejecutar este código, obtenemos un mensaje de error.

1
2
3

INSERT INTO Clientes
SELECT *
FROM Empleados ;

En este caso, necesitamos especificar el nombre de la columna con la instrucción INSERT INTO.

1
2
3

INSERT INTO Clientes (Emp_ID, Nombre)
SELECCIONAR *
DE Empleados;

En la tabla Clientes, tenemos una columna adicional con permite valores NULL. Ejecutemos una tabla Seleccionar en clientes. En la siguiente captura de pantalla, podemos ver valores NULL en la columna Ciudad.

Suponga que tiene una columna diferente en la tabla fuente. Aún puede insertar registros en la tabla de destino especificando nombres de columna en la instrucción INSERT INTO SELECT. Deberíamos tener un tipo de datos apropiado para insertar datos. No puede insertar datos de una columna varchar en una columna INT.

Agregue una nueva columna en la tabla Empleados usando la instrucción ALTER TABLE.

1
2

ALTER TABLE Empleados
AÑADIR País varchar (50);

Actualice los registros de la tabla con el valor del país India.

1

Actualizar conjunto de empleados Country = «India»

Ahora, vuelva a ejecutar INSERT INTO Sentencia SELECT. Puede notar que estamos usando SELECT * en lugar de especificar nombres de columna.

1
2
3

INSERT INTO Clientes (Emp_ID, Nombre)
SELECT *
DE Empleados;

Obtenemos el siguiente mensaje de error. Este error se debe a que la columna no coincide entre la tabla de origen y la tabla de destino.

Podemos mapear la columna entre la tabla de origen y la de destino mediante la siguiente consulta.

1
2
3
4
5
6

INSERT INTO Clientes
(Emp_ID,
Nombre
)
SELECCIONAR ID, Nombre
DE Empleados;

Ejemplo 3: Insertar filas superiores usando INSERT INTO SELECT declaración

Supongamos que queremos insertar las N filas superiores de la tabla de origen a la tabla de destino. Podemos usar la cláusula Top en la instrucción INSERT INTO SELECT. En la siguiente consulta, inserta la primera fila de la tabla Empleados en la tabla Clientes.

1
2
3
4
5
6

INSERT TOP (1) INTO Clientes
(Emp_ID,
Nombre
)
SELECT ID, nombre
DE Empleados;

Ejemplo 4: Insertar usando ambas columnas y valores definidos en la instrucción INSERT INTO SELECT de SQL

En ejemplos anteriores, especificamos valores específicos en la instrucción INSERT INTO o usamos INSERT INTO SELECT para obtener registros de la tabla fuente e insertarlos en la tabla de destino.

Podemos combinar ambas columnas y valores definidos en la instrucción SQL INSERT INTO SELECT.

Tenemos las siguientes columnas en la tabla Clientes y Empleados. Anteriormente, no insertamos ningún valor para la columna Ciudad. Tampoco tenemos los valores requeridos en la tabla Empleado. Necesitamos especificar un valor explícito para la columna Ciudad.

En la siguiente consulta, especificamos un valor para la Ciudad columna mientras que el resto de los valores que insertamos de la tabla Empleados.

1
2

INSERTAR TOP (1) INTO Clientes (Emp_ID, Nombre, Ciudad)
SELECCIONAR ID, Nombre, «Delhi» DE Empleados;

En la siguiente consulta, podemos ver que inserta uno fila (debido a la cláusula Top (1)) junto con el valor de la columna Ciudad.

Ejemplo 5: INSERT INTO SELECT declaración con cláusula Join para obtener datos de varias tablas

Podemos usar una cláusula JOIN para obtener datos de varias tablas. Estas tablas se unen a las condiciones especificadas con la cláusula ON. Supongamos que queremos obtener datos de varias tablas e insertarlos en una tabla.

En este ejemplo, estoy usando la base de datos AdventureWorks2017. Primero, cree una nueva tabla con los tipos de datos apropiados.

Esta tabla debe contener registros de la salida de una consulta de combinación de múltiples tablas. Ejecute la siguiente consulta para insertar datos en la tabla HumanResources.EmployeeData.

Ejemplo 6: INSERT INTO SELECT instrucción con expresión de tabla común

Usamos Expresiones de tabla comunes (CTE) para simplificar la combinación compleja de varias columnas. En el ejemplo anterior, usamos JOINS en una instrucción Select para insertar datos en una tabla SQL. En esta parte, reescribiremos la consulta con CTE.

En un CTE, podemos dividir el código en dos partes.

  1. Definimos CTE por una cláusula WITH antes de la instrucción SELECT, INSERT, UPDATE, DELETE
  2. Una vez que definamos CTE, podemos tomar referencia al CTE similar a una tabla SQL relacional

Ejecute el siguiente código para insertar datos usando un CTE.

Ejemplo 7 : INSERT INTO SELECT instrucción con una variable de tabla

Usamos variables de tabla de manera similar a una tabla temporal. Podemos declararlos usando el tipo de datos de tabla. Esta tabla se puede utilizar para realizar actividades en SQL Server donde no necesitamos una tabla permanente. Puede dividir la siguiente consulta en tres partes.

  1. Cree una variable de tabla SQL con los tipos de datos de columna adecuados. Necesitamos usar el tipo de datos TABLE para la variable de la tabla
  2. Ejecutar una instrucción INSERT INTO SELECT para insertar datos en una variable de la tabla
  3. Ver el conjunto de resultados de la variable de la tabla

Conclusión

En este artículo, exploramos los casos de uso de la instrucción INSERT INTO SELECT. Espero que este artículo le haya resultado útil. No dude en enviarnos sus comentarios en los comentarios a continuación.

  • Autor
  • Publicaciones recientes
Como certificado por MCSA y Microsoft Certified Trainer en Gurgaon, India, con 13 años de experiencia, Rajendra trabaja para una variedad de grandes empresas que se centran en la optimización del rendimiento, la supervisión, la alta disponibilidad y las estrategias e implementación de recuperación ante desastres. Es autor de cientos de artículos autorizados sobre SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git y tecnologías relacionadas que han sido vistos por más de 10 millones de lectores hasta la fecha.
Es el creador de una de las mayores colecciones gratuitas de artículos en línea sobre un solo tema, con su serie de 50 partes sobre los grupos de disponibilidad AlwaysOn de SQL Server. Basado en su contribución a la comunidad de SQL Server, ha sido reconocido con varios premios, incluido el prestigioso «Mejor autor del año» de forma continua en 2020 y 2021 en SQLShack.
Raj siempre está interesado en nuevos desafíos, así que si necesita consultoría ayuda sobre cualquier tema cubierto en sus escritos, puede ser contactado en [email protected]
Ver todas las publicaciones de Rajendra Gupta

Últimas publicaciones de Rajendra Gupta (ver todas)
  • Realización de actualizaciones de versiones menores y mayores para AWS RDS SQL Server: 29 de enero de 2021
  • Implementación de instancias de AWS RDS PostgreSQL: 27 de enero de 2021
  • Migración de sus bases de datos SQL locales a AWS RDS SQL Server mediante AWS DMS: 25 de enero , 2021

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *