Insertar en la sintaxis. Sentencia SQL INSERT INTO SELECT. Ejemplos de consulta SQL INSERT INTO en una base de datos MySQL

Usando SQL, puedes copiar información de una tabla a otra.

La instrucción INSERT INTO SELECT copia datos de una tabla y los inserta en una tabla existente.

Sentencia SQL INSERT INTO SELECT,

La instrucción INSERT INTO SELECT selecciona datos de una tabla y los inserta en una tabla existente. Las filas existentes en la tabla de destino no se modifican.

SQL INSERTAR EN SELECCIONAR, Sintaxis

Podemos copiar todas las columnas de una tabla a otra tabla existente:

INSERTAR EN Tabla 2
SELECCIONAR DE tabla 1;

O podemos copiar sólo las columnas que queramos a otra tabla existente:

INSERTAR EN Tabla 2
(nombre_columna(s))
SELECCIONAR nombre_columna(s)
DE tabla 1;

Versión demo de la base de datos.

En este tutorial utilizaremos la conocida base de datos Northwind.

A continuación se muestra una selección de la tabla "Clientes":

ID de usuarioNombre del clienteLa persona de contactoDIRECCIÓNciudadCódigo postalUn país
1 Alfreds Futterkiste María Anders Obere Str. 57 Berlina 12209 Alemania
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México DF. 05021 México
3 Taquería Antonio Moreno Antonio Moreno Mataderos 2312 México DF. 05023 México

Y la selección de la tabla "Proveedores":

SQL INSERTAR EN SELECCIONAR, Ejemplos

Copiando solo unas pocas columnas de "Proveedores" a "Clientes":

Copiando sólo proveedores alemanes a "Clientes".

La consulta SQL INSERT INTO tiene sentido cuando se ha creado una tabla de base de datos. Es decir, la tabla existe, tiene un nombre, se crean filas y columnas. la tabla la crea el operador: , la tabla la modifica el operador.

consulta SQL INSERTAR EN - sintaxis de consulta

La consulta SQL INSERT INTO tiene la siguiente sintaxis:

INSERT INTO table_name (entre paréntesis, si es necesario, inserte una lista de columnas donde desea insertar datos) VALORES datos insertados1, datos insertados2, datos insertados3.

Puede insertar una opción IGNORAR entre INSERTAR e INTRO. No es requerido. Necesario para proteger las claves principales al editar una tabla. De lo contrario, si se produce una duplicación de claves primarias durante la edición, al insertar la opción IGNORAR, la primera fila con la clave primaria permanecerá en la tabla que se está editando y las demás claves primarias se eliminarán. De forma predeterminada, omitimos esta opción.

Hay opciones opcionales LOW_PRIORITY y DELAYED. Determinan las prioridades para agregar información a la base de datos. El primero especifica esperar a que se libere la base de datos, el segundo significa almacenar información en el búfer.

La línea de la consulta: INSERTAR con la frase VALORES le permitirá agregar una sola fila a la tabla de la base de datos. La cláusula VALUES contiene los valores de estos datos.

Se pueden especificar subconsultas en lugar de la frase VALORES. INSERT con una subconsulta agrega las filas devueltas por la subconsulta a la tabla. El servidor de la base de datos procesa la subconsulta e inserta todas las filas devueltas en la tabla. El servidor no inserta filas a menos que la subconsulta las seleccione.

  • subconsulta_1: una subconsulta que el servidor procesa de la misma manera que la vista
  • subquery_2 es ​​una subconsulta que devuelve filas insertadas en la tabla. La lista de esta subconsulta debe tener el mismo número de columnas que la lista de columnas INSERT.

Las subconsultas prácticamente no se utilizan en una base de datos MySQL.

Ejemplos de consulta SQL INSERT INTO en una base de datos MySQL

Insertamos nuevas filas en la base de datos MySQL usando el comando INSERT INTRO.

Primer ejemplo.

Inserte nuevas filas en la tabla nombre_tabla.

INSERTAR EN nombre_tabla VALORES ('2′,'145′,'1′,'nombre');

Esto significa que queremos insertar los valores 2,145,1,nombre en las columnas de la tabla nombre_tabla. Como las columnas no están especificadas, los valores se completan en todas las columnas de la tabla.

Ejemplo dos.

Inserte información en las columnas requeridas (especificadas) de la tabla nombre_tabla.

INSERTAR EN nombre_tabla (cliente_cliente, cliente_subcliente, cliente_correo) VALORES ('nombre1','subnombre1',' [correo electrónico protegido]′), ('nombre2′,'subnombre2′,' [correo electrónico protegido]′), ('nombre3′,'subnombre3′,(' [correo electrónico protegido]′);

Igor Serov especialmente para el sitio "".

Última actualización: 13/07/2017

Para agregar datos, use el comando INSERT, que tiene la siguiente sintaxis formal:

INSERTAR nombre_tabla [(lista_columnas)] VALORES (valor1, valor2, ... valorN)

Primero viene la expresión INSERT INTO, luego, entre paréntesis, puede especificar una lista de columnas separadas por comas a las que se deben agregar datos y, al final, después de la palabra VALORES, se enumeran los valores que se agregarán para las columnas. paréntesis.

Por ejemplo, supongamos que previamente se creó la siguiente base de datos:

CREAR BASE DE DATOS productosdb; IR A UTILIZAR productosdb; CREAR TABLA Productos (Id INT IDENTITY PRIMARY KEY, Nombre del producto NVARCHAR(30) NOT NULL, Fabricante NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Precio DINERO NO NULL)

Agreguemos una línea usando el comando INSERT:

INSERTAR VALORES de productos ("iPhone 7", "Apple", 5, 52000)

Después de una ejecución exitosa en SQL Server Management Studio, el mensaje "1 fila(s) afectada(s)" debería aparecer en el campo de mensaje:

Vale la pena considerar que los valores de las columnas entre paréntesis después de la palabra clave VALUES se pasan en el orden en que se declaran. Por ejemplo, en la declaración CREATE TABLE anterior, puede ver que la primera columna es Id. Pero como se especifica el atributo IDENTIDAD, el valor de esta columna se genera automáticamente y se puede omitir. La segunda columna representa ProductName, por lo que el primer valor, la cadena "iPhone 7", se pasará a esa columna. El segundo valor, la cadena "Apple", se pasará a la tercera columna Fabricante y así sucesivamente. Es decir, los valores se pasan a las columnas de la siguiente manera:

    Nombre del producto: "iPhone 7"

    Fabricante: "Apple"

Además, al ingresar valores, puede especificar las columnas inmediatas a las que se agregarán los valores:

INSERTAR EN PRODUCTOS (Nombre del producto, Precio, Fabricante) VALORES ("iPhone 6S", 41000, "Apple")

Aquí el valor se especifica solo para tres columnas. Además, ahora los valores se transmiten en el orden de las columnas:

    Nombre del producto: "iPhone 6S"

    Fabricante: "Apple"

Para columnas no especificadas (en este caso ProductCount), se agregará un valor predeterminado si se especifica el atributo DEFAULT, o un valor NULL. Sin embargo, las columnas no especificadas deben aceptar valores NULL o tener un atributo DEFAULT.

También podemos añadir varias líneas a la vez:

INSERTAR EN VALORES de Productos ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

En este caso, se agregarán tres filas a la tabla.

Además, al agregar, podemos especificar que la columna debe tener un valor predeterminado usando la palabra clave DEFAULT, o un valor NULL:

INSERTAR EN Productos (Nombre del producto, Fabricante, Número de productos, Precio) VALORES ("Mi6", "Xiaomi", DEFAULT, 28000)

En este caso, se utilizará el valor predeterminado para la columna ProductCount (si está configurado, si no, entonces NULL).

Si todas las columnas tienen un atributo DEFAULT que especifica un valor predeterminado, o son anulables, puede insertar valores predeterminados para todas las columnas:

INSERTAR EN Productos VALORES PREDETERMINADOS

Pero si tomamos la tabla Productos, dicho comando fallará con un error, ya que varios campos no tienen el atributo DEFAULT y al mismo tiempo no permiten el valor NULL.

¿Qué es INSERTAR EN?

El objetivo principal de los sistemas de bases de datos es almacenar datos en tablas. Los datos suelen ser proporcionados por programas de aplicación que se ejecutan sobre la base de datos. Con ese fin, SQL tiene el comando INSERT que se utiliza para almacenar datos en una tabla. El El comando INSERT crea una nueva fila en la tabla para almacenar datos.

Sintaxis básica

Veamos la sintaxis básica del comando SQL INSERT que se muestra a continuación.

INSERTAR EN `nombre_tabla`(columna_1,columna_2,...) VALORES (valor_1,valor_2,...);

  • INSERTAR EN `nombre_tabla` es el comando que le dice al servidor MySQL que agregue una nueva fila a una tabla llamada `table_name`.
  • (columna_1,columna_2,...) especifica las columnas que se actualizarán en la nueva fila
  • VALORES (valor_1,valor_2,...) especifica los valores que se agregarán en la nueva fila

Al proporcionar los valores de datos que se insertarán en la nueva tabla, se debe considerar lo siguiente al tratar con diferentes tipos de datos.

  • Tipos de datos de cadena- todos los valores de cadena deben estar entre comillas simples.
  • Tipos de datos numéricos- todos los valores numéricos deben proporcionarse directamente sin encerrarlos entre comillas simples o dobles.
  • Tipos de datos de fecha- incluya los valores de fecha entre comillas simples en el formato "AAAA-MM-DD".

Ejemplo:

Supongamos que tenemos la siguiente lista de nuevos miembros de la biblioteca que deben agregarse a la base de datos.

Nombres completos Fecha de nacimiento género Dirección física direccion postal Número de contacto Dirección de correo electrónico
Leonardo Hofstadter Masculino Cresta de madera 0845738767
Sheldon Cooper Masculino Cresta de madera 0976736763
Rajesh Koothrappali Masculino Fairview 0938867763
Leslie Winkel 14/02/1984 Masculino 0987636553
Howard Wolowitz 24/08/1981 Masculino parque del Sur CORREOS. Caja 4563 0987786553

Insertemos los datos uno por uno. Comenzaremos con Leonard Hofstadter. Trataremos el número de contacto como un tipo de datos numérico y no incluiremos el número entre comillas simples.

INSERTAR EN `miembros` (`nombres_completos`,`género`,`dirección_física`,`número_de_contacto`) VALORES ("Leonard Hofstadter","Hombre","Woodcrest",0845738767);

Al ejecutar el script anterior se elimina el 0 del número de contacto de Leonard. Esto se debe a que el valor se tratará como un valor numérico y el cero (0) al principio se elimina ya que no es significativo.

Para evitar tales problemas, el valor debe estar entre comillas simples como se muestra a continuación:

INSERTAR EN `miembros` (`nombres_completos`,`género`,`dirección_física`,`número_de_contacto`) VALORES ("Sheldon Cooper","Hombre","Woodcrest", "0976736763");

En el caso anterior, el cero (0) no se eliminará.

Cambiar el orden de las columnas no tiene ningún efecto en la consulta INSERT siempre que se hayan asignado los valores correctos a las columnas correctas.

La consulta que se muestra a continuación demuestra el punto anterior.

INSERTAR EN `miembros` (`número_de_contacto`,`género`,`nombres_completos`,`dirección_física`)VALUES ("0938867763","Hombre","Rajesh Koothrappali","Woodcrest");

Las consultas anteriores omitieron la columna de fecha de nacimiento, de forma predeterminada, MySQL insertará valores NULL en las columnas que se omiten en la consulta INSERT.

Ahora insertemos el registro de Leslie que tiene la fecha de nacimiento proporcionada. El valor de la fecha debe estar entre comillas simples utilizando el formato "AAAA-MM-DD".

INSERTAR EN `miembros` (`nombres_completos`,`fecha_de_nacimiento`,`género`,`dirección_física`,`número_de_contacto`) VALORES ("Leslie Winkle","1984-02-14","Hombre","Woodcrest"," 0987636553");

Todas las consultas anteriores especificaron las columnas y las asignaron a valores en la declaración de inserción. Si proporcionamos valores para TODAS las columnas de la tabla, podemos omitir las columnas de la consulta de inserción.

INSERTAR EN VALORES `miembros` (9,"Howard Wolowitz","Hombre","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Usemos ahora la instrucción SELECT para ver todas las filas en la tabla de miembros.SELECT * FROM `members`;

número de socionombres completosgénerofecha de nacimientodirección físicadireccion postalnúmero_contactocorreo electrónico
1 Janet JonesFemenino21-07-1980 Parcela Calle Primera N°4Bolsa privada0759 253 542 Esta dirección de correo electrónico está protegida contra spambots. Necesita activar JavaScript para verlo.
2 Janet Smith JonesFemenino23-06-1980 Melrose 123NULONULOEsta dirección de correo electrónico está protegida contra spambots. Necesita activar JavaScript para verlo.
3 Roberto PhilMasculino12-07-1989 Calle 3 34NULO12345 Esta dirección de correo electrónico está protegida contra spambots. Necesita activar JavaScript para verlo.
4 Gloria WilliamsFemenino14-02-1984 Calle 2 23NULONULONULO
5 Leonardo HofstadterMasculinoNULOCresta de maderaNULO845738767 NULO
6 Sheldon CooperMasculinoNULOCresta de maderaNULO976736763 NULO
7 Rajesh KoothrappaliMasculinoNULOCresta de maderaNULO938867763 NULO
8 Leslie WinkelMasculino14-02-1984 Cresta de maderaNULO987636553 NULO
9 Howard WolowitzMasculino24-08-1981 Parque del SurCORREOS. Caja 4563987786553 Esta dirección de correo electrónico está protegida contra spambots. Necesita activar JavaScript para verlo.

Observe que el número de contacto de Leonard Hofstadter ha eliminado el cero (0) del número de contacto. Los demás números de contacto no han bajado el cero (0) al principio.

Insertar en una tabla desde otra tabla

El comando INSERT también se puede utilizar para insertar datos en una tabla desde otra tabla. La sintaxis básica es la que se muestra a continuación.

INSERTAR EN tabla_1 SELECCIONAR * DE tabla_2;

Veamos ahora un ejemplo práctico: crearemos una tabla ficticia para categorías de películas con fines de demostración. Llamaremos a la nueva tabla de categorías categorías_archivo. El script que se muestra a continuación crea la tabla.

CREAR TABLA `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `comentarios` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

Ejecute el script anterior para crear la tabla.

Ahora insertemos todas las filas de la tabla de categorías en la tabla de archivo de categorías. El script que se muestra a continuación nos ayuda a lograrlo.

INSERTAR EN `categorías_archivo` SELECCIONAR * DE `categorías`;

La ejecución del script anterior inserta todas las filas de la tabla de categorías en la tabla de archivo de categorías. Tenga en cuenta que las estructuras de las tablas deberán ser las mismas para que el script funcione. Una secuencia de comandos más sólida es aquella que asigna los nombres de las columnas de la tabla de inserción a las de la tabla que contiene los datos.

La consulta que se muestra a continuación demuestra su uso.

INSERTAR EN `categorías_archivo`(categoría_id,categoría_nombre,comentarios) SELECCIONE categoría_id,categoría_nombre,comentarios DE `categorías`;

Ejecutando la consulta SELECT

SELECCIONAR * DE `categorías_archivo`

da los siguientes resultados que se muestran a continuación.

categoria IDnombre de la categoríacomentarios
1 ComediaPelículas con humor
2 RománticoHistorias de amor
3 ÉpicoHistoria de películas antiguas.
4 HorrorNULO
5 Ciencia ficciónNULO
6 SuspensoNULO
7 AcciónNULO
8 Comedia románticaNULO
9 Dibujos animadosNULO
10 Dibujos animadosNULO

Resumen

  • El comando INSERT se utiliza para agregar nuevos datos a una tabla.
  • Los valores de fecha y cadena deben estar entre comillas simples.
  • Los valores numéricos no necesitan estar entre comillas.
  • El comando INSERT también se puede utilizar para insertar datos de una tabla en otra.

Además de la declaración SELECT analizada anteriormente, el lenguaje de manipulación de datos (DML) contiene otras tres declaraciones: INSERT, UPDATE y DELETE. Al igual que la declaración SELECT, estas tres declaraciones operan en tablas o vistas. Este artículo analiza la declaración INSERT y las otras dos declaraciones se analizan en el siguiente artículo.

INSERTAR declaración inserta filas (o partes de filas) en una tabla. Hay dos formas diferentes de esta instrucción:

INSERTAR tab_name [(col_list)] VALORES PREDETERMINADOS | VALORES (( DEFAULT | NULL | expresión ) [ ,...n]) INSERTAR EN nombre_pestaña | view_name [(col_list)] (select_statement | ejecutar_statement) Convenciones de sintaxis

La primera forma de instrucción le permite insertar una fila (o parte de ella) en la tabla. Y la segunda forma de la instrucción INSERT le permite insertar en una tabla el conjunto de resultados de una instrucción SELECT o un procedimiento almacenado ejecutado por una instrucción EXECUTE. El procedimiento almacenado debe devolver datos para insertarlos en la tabla. Cuando se usa con una instrucción INSERT, una instrucción SELECT puede seleccionar valores de una tabla diferente o la misma en la que se insertan los datos, siempre que los tipos de datos de las columnas correspondientes sean compatibles.

Para ambos formularios, el tipo de datos de cada valor insertado debe ser compatible con el tipo de datos de la columna de la tabla correspondiente. Todas las cadenas y datos temporales deben estar entre comillas; No es necesario encerrar los valores numéricos entre comillas.

Insertar una sola fila

Para ambas formas de la instrucción INSERT, especificar explícitamente la lista de columnas es opcional. No enumerar columnas es lo mismo que especificar todas las columnas de la tabla.

Parámetro VALORES POR DEFECTO inserta valores predeterminados para todas las columnas. Las columnas con el tipo de datos TIMESTAMP o propiedad IDENTITY se insertan de forma predeterminada con valores que genera automáticamente el sistema. Para columnas de otros tipos de datos, se inserta el valor predeterminado no nulo correspondiente si está disponible, o NULL en caso contrario. Si una columna no permite valores nulos y no tiene definido un valor predeterminado, la instrucción INSERT falla y se muestra un mensaje.

El siguiente ejemplo inserta filas en la tabla Empleado en la base de datos SampleDb, lo que demuestra el uso de una instrucción INSERT para insertar una pequeña cantidad de datos en la base de datos:

UTILICE SampleDb; INSERTAR EN VALORES del empleado (34990, "Andrey", "Batonov", "d1"); INSERTAR EN VALORES del empleado (38640, "Alexey", "Vasin", "d3");

Hay dos diferentes caminos insertando valores en nueva línea. La declaración INSERT en el siguiente ejemplo usa explícitamente la palabra clave NULL e inserta un valor NULL en la columna correspondiente:

UTILICE SampleDb; INSERT INTO Employee VALUES (34991, "Andrey", "Batonov", NULL);

Para insertar valores en algunas (pero no en todas) las columnas de una tabla, normalmente es necesario especificar explícitamente esas columnas. Las columnas no especificadas deben permitir valores NULL o tener definido un valor predeterminado.

UTILICE SampleDb; INSERT INTO Empleado(Id, Nombre, Apellido) VALORES (34992, "Andrey", "Batonov");

Los dos ejemplos anteriores son equivalentes. En la tabla Empleado, la única columna que permite valores NULL es la columna DepartmentNumber, y todas las demás columnas fueron deshabilitadas por la cláusula NOT NULL en la declaración CREATE TABLE.

Orden de valores en Oferta de VALORES Las declaraciones INSERT pueden diferir del orden especificado en la declaración CREATE TABLE. En este caso, su orden debe coincidir con el orden en que aparecen las columnas correspondientes en la lista de columnas. A continuación se muestra un ejemplo de cómo insertar datos en un orden diferente al original:

UTILICE SampleDb; INSERT INTO Empleado(Número de departamento, Apellido, Id, Nombre) VALORES ("d1", "Batonov", 34993, "Andrey");

Insertar varias filas

La segunda forma de la instrucción INSERT inserta una o más filas seleccionadas por una subconsulta en la tabla. El siguiente ejemplo muestra cómo insertar filas en una tabla usando la segunda forma de la instrucción INSERT. En este caso, se ejecuta una consulta para seleccionar los números y nombres de los departamentos ubicados en Moscú, y el conjunto de resultados resultante se carga en una nueva tabla creada anteriormente.

La nueva tabla Departamento de Moscú creada en el ejemplo anterior tiene las mismas columnas que la tabla Departamento existente, excepto por la columna Ubicación que falta. La subconsulta en la instrucción INSERT selecciona todas las filas de la tabla Departamento para las cuales el valor de la columna Ubicación es "Moscú", que luego se insertan en la nueva tabla creada al comienzo de la consulta.

El siguiente ejemplo muestra otra forma de insertar filas en una tabla usando la segunda forma de la instrucción INSERT. En este caso, se ejecuta una consulta para seleccionar números de personal, números de proyecto y fechas de inicio del proyecto para todos los empleados con el puesto "Gerente" que trabajan en el proyecto p2 y luego cargan el conjunto de resultados resultante en una nueva tabla creada al comienzo de la consulta:

UTILICE SampleDb; CREAR TABLA ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERTAR EN ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECCIONE EmpId, ProjectNumber, EnterDate DESDE Works_on DONDE Job = "Manager";

Antes de insertar filas usando la instrucción INSERT, las tablas MoscowDepartment y ManagerTeam (en los ejemplos anteriores) estaban vacías. Si la tabla ya existía y contenía filas con datos, se le agregarían nuevas filas.


Arriba