SQL INSERT INTO SELECT

Cómo realizar un INSERT SQL con los valores de una consulta SELECT SQL

consultas sql sql insert

Si estás aquí seguramente sepas como realizar un INSERT SQL sin problemas, al menos de la forma sencilla y clásica, y te estás preguntando cómo realizar inserciones en SQL a partir de un SELECT.

Usar INSERT SQL y SELECT juntos es posible, y además funcionan de maravilla. Es una herramienta super práctica para realizar tareas de migración de una tabla a otra, como un histórico o tabla que parte de otra.

Consulta INSERT con SELECT

Crear una consulta INSERT con SELECT es fácil, solamente debes conocer la estructura de forma adecuada.

En primer lugar compondremos nuestra consulta INSERT SQL y a continuación seguiremos con un select normal y corriente.

Veamos un ejemplo de este "INSERT SELECT" para mayor claridad.

Ejemplo de INSERT a partir de SELECT

Para el ejemplo utilizaré 2 tablas creadas con un CREATE SQL como el siguiente:

CREATE tabla {
	id  INT(11) NOT NULL AUTO_INCREMENT,
	nombre VARCHAR(25),
	apellidos VARCHAR(200),
}

CREATE tabla2 {
	id  INT(11) NOT NULL AUTO_INCREMENT,
	nombre_copia VARCHAR(25),
	apellidos_copia VARCHAR(200),
}

Una vez ya sabes como son las tablas para el ejemplo, vamos a insertar la información de la tabla "tabla" en la tabla "tabla2". En concreto voy a pasar la información de las columnas nombre y apellidos. 

Para realizar esto haré uso, como no, de un INSERT y un SELECT.

INSERT INTO tabla2 ( nombre_copia , nombre_copia )
SELECT nombre , apellidos 
FROM tabla

Ejemplo de INSERT INTO SELECT sin especificar columnas

Debes saber que existe una forma más rápida de realizar la consulta anterior siempre y cuando se cumpla una condición: que las 2 tablas que intervienen en la consulta tengan las columnas en mismo orden.

¿Que quiere decir en el mismo orden? Veámoslo más claro con otro ejemplo

 

INSERT INTO tabla2 
SELECT * FROM tabla

En esta query puedes ver como no he especificado columnas de ningún tipo, ¿que ocurrirá entonces? Pues que como yo sé que he definido las 2 tablas con las mismas columnas y en el mismo orden (sus valores y tipos en el CREATE SQL de arriba) , la base de datos automáticamente insertará los valores de las columnas del SELECT donde toca.

¿cuáles son las claves de este ejemplo?

  1. En el INSERT especifico en que columnas voy a insertar los datos SQL.
  2. En el SELECT especifico que columnas quiero obtener. Además, muy IMPORTANTE, el orden de las columnas de este SELECT coincide con las especificadas en el INSERT.
  3. Los tipos de las columnas son iguales.
  4. No hace falta que las columnas de una y otra tabla se llamen igual, solamente que los datos "quepan dentro" de la tabla objetivo. Para ello deberán coincidir los tipos de las columnas y su capacidad. Esto quiere decir, por ejemplo, que no voy a meter un TEXT de más de 255 caracteres en un VARCHAR.

Video de INSERT INTO SELECT

Para dejar este tutorial completo, y por si aun tienes algunas dudas, me gustaría aportar un video explicativo que deja claro como utilizar esta consulta INSERT INTO SELECT.

El video es una explicación hablada y paso a paso mediante la consola de windows y MySQL.

Conclusiones

¿Te ha quedado claro como utilizar esta consulta en SQL? Espero realmente que si. 

Ahora agradecería mucho que dejaras algún aporte para los que vengan después de ti y que ayudan nos ayudan a seguir publicando contenido útil para todos los programadores de SQL.

¡Gracias!

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.