Cómo insertar datos en SQL con INSERT

Tutorial completo sobre cómo insertar registros/filas en bases de datos y con lenguaje SQL.

sql select sql where sql insert consultas sql

En este artículo sobre lenguaje SQL voy a explicarte cómo se realizan inserciones de registros en bases de datos.

Utilizaré solo consultas SQL para mostrarte las formas que existen para insertar datos en este lenguaje, cómo se ejecutan las consultas correctamente y qué deberías tener en cuenta para evitar errores.

Para que entiendas hasta el último párrafo y para que puedas dirigirte al punto que más te interese he divido este artículo en los siguientes apartados:

  1. Cómo insertar información en tablas de bases de datos con SQL.
  2. Forma completa de uso de la sentencia INSERT.
  3. Forma abreviada de la sentencia INSERT.
  4. INSERT avanzado. Insertar información desde una consulta SELECT.
    1. Con consultas filtradas con WHERE.
    2. Con uso de SELECT y subconsultas.

Insertar registros en base de datos con SQL

Para insertar datos en base de datos debemos hacerlo siempre a través de las tablas, es decir, insertar una fila en una tabla determinada.

Los datos a insertar en una tabla deben de respetar todas las restricciones que existan sobre ella, es decir, sobre sus columnas. Por lo tanto, deberán tenerse en cuenta los tipos de las columnas, campos que no pueden dejarse vacíos o cualquier tipo de restricción (CONSTRAINT) sobre las columnas.

INSERT la sentencia SQL para insertar datos

La inserción de datos en las tablas de tu base de datos será siempre a través de la sentencia INSERT de SQL. El uso de esta sentencia es sencillo, compondremos la consulta indicando en que tabla vamos a insertar una fila, en que columnas y que datos:

Existen dos formas de utilizar la consulta INSERT:

  1. Especificando las columnas y sus valores respectivamente.
  2. Sin indicar las columnas.

Forma completa de usar la sentencia INSERT

Esta es la forma que yo siempre utilizo y la que te recomiendo usar siempre. ¿Por qué? Es la más completa, la más versátil y la que evita el mayor número de errores.

El esquema de uso de este INSERT de SQL quedaría así:

INSERT INTO nombre_tabla ( columna1, columna2, …, columnaN ) VALUES ( valor1, valor2, …, valorN)

Y ahora e aquí un ejemplo real de uso:

INSERT INTO videojuego ( nombre, productora, edad_recomendada ) VALUES ( ‘zelda: breath of the wild’, ‘Nintendo’, 15);

Fíjate cómo he indicado cada columna en la cual voy a insertar datos con un orden determinado: primero la columna “orden”, en segundo lugar la columna “productora” y en el tercero “edad_recomendada”.

El orden de los valores que van después de la sentencia VALUES sigue al orden de las columnas, de forma que el sistema de base de datos sabrá exactamente en que columna insertar cada dato.

Cada consulta INSERT, como la has visto, solo realiza la inserción de un registro ( fila ).

Consulta INSERT reducida sin columnas

Esta consulta es una versión reducida de la sentencia INSERT estándar. Esta versión podrías utilizarla, principalmente, cuando vayas a insertar un registro completo, con un valor para cada columna de la tabla en cuestión o.

El esquema de esta consulta INSERT es el siguiente:

INSERT INTO nombre_tabla VALUES ( valor1, valor2, …, valorN)

Recuerda que los valores introducidos se correspondan con el orden de las columnas de la tabla.

A continuación te expongo un ejemplo. La siguiente consulta de INSERT:

INSERT INTO videojuego VALUES ( ‘zelda: breath of the wild’, ‘Nintendo’, 15);

Esta consulta INSERT la he lanzado para una tabla videojuego creada con la siguiente consulta CREATE:

CREATE TABLE videojuego (
     nombre VARCHAR(70),
     productora VARCHAR(50),
     edad_recomendada INT
);

Observa la correspondencia entre los valores introducidos en el INSERT, sus tipos y orden, y en el orden de creación de las columnas de la consulta CREATE (de arriba hacia abajo).

Insertar información desde una consulta SELECT

Lo visto en los puntos anteriores, es la forma de insertar datos de registro en registro, pero ahora quiero enseñarte un punto de vista diferente para insertar registros en una tabla extraídos de otra.

Vamos a combinar dos tipos de consultas en SQL: una selección mediante SELECT y una inserción con INSERT. Usaremos una consulta SELECT normal y corriente para para poder extraer los datos de otra tabla y posteriormente insertarlos en el INSERT.

El esquema de uso de esta consulta sería:

INSERT INTO tabla (columna1, columna2, …, columnaN) SELECT columna1, columna2, …, columnaN FROM tabla2

Por ejemplo podría utilizar esta consulta para insertar los datos de una tabla videojuego_historico a la tabla videojuego visto en los ejemplos anteriores:

INSERT INTO videojuego (nombre, productora, edad_recomendada)
SELECT nombre, productora, edad_recomendada
FROM videojueo_historico;

Como esta tabla videojuego_historico contiene datos compatibles, he seleccionado toda su información con la consulta SELECT y la he insertado en las columnas indicadas en el INSERT.

Observa qué, como al igual que en el resto del artículo, respeto el orden de las columnas que indico entre paréntesis y en el SELECT.

Insertar mediante SELECT y filtrar con WHERE

La consulta SELECT que se utiliza para seleccionar los registros a insertar puede ser cualquier tipo de consulta que conozcas o hayas realizado, siempre y cuando respetes la correspondencia de columnas.

Por ejemplo, podría repetir la consulta anterior pero esta vez solo para los seleccionando los videojuegos para mayores de 18:

INSERT INTO videojuego (nombre, productora, edad_recomendada)
SELECT nombre, productora, edad_recomendada
FROM videojueo_historico
WHERE edad_recomendada >= 18;

Insertar con subconsultas en el WHERE

Esta vez voy a ir más allá, para que definitivamente te hagas una idea de todo lo que se puede hacer, y voy a realizar la consulta INSERT con los datos de una selección de datos con subconsulta.

En concreto voy a insertar todos los registros de la tabla videojuego_historico que no estaban ya en la tabla videojuego:

INSERT INTO videojuego (nombre, productora, edad_recomendada)
SELECT nombre, productora, edad_recomendada
FROM videojuego_historico
WHERE NOT EXISTS ( SELECT * 
			     FROM videojuego
			     WHERE videojuego.nombre = videojuego_historico.nombre );

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.