Tema 6. Actualización de datos (II) |
Insertar varias filas INSERT INTO...SELECT |
Podemos insertar en una tabla varias filas con una sola sentencia SELECT INTO si los valores a insertar se pueden obtener como resultado de una consulta, en este caso sustituimos la cláusula VALUES lista de valores por una sentencia SELECT como las que hemos visto hasta ahora. Cada fila resultado de la SELECT forma una lista de valores que son los que se insertan en una nueva fila de la tabla destino. Es como si tuviesemos una INSERT...VALUES por cada fila resultado de la sentencia SELECT. La sintaxis es la siguiente: |
El origen de la SELECT puede ser el nombre de una consulta guardada, un nombre de tabla o una composición de varias tablas ( mediante INNER JOIN, LEFT JOIN, RIGHT JOIN o producto cartesiano). Cada fila devuelta por la SELECT actúa como la lista de valores que vimos con la INSERT...VALUES por lo que tiene las mismas restricciones en cuanto a tipo de dato, etc. La asignación de valores se realiza por posición por lo que la SELECT debe devolver el mismo número de columnas que las de la tabla destino y en el mismo orden, o el mismo número de columnas que indicamos en la lista de columnas después de destino. Las columnas de la SELECT no tienen porque llamarse igual que en la tabla destino ya que el sistema sólo se fija en los valores devueltos por la SELECT. Si no queremos asignar valores a todas las columnas entonces tenemos que indicar entre paréntesis la lista de columnas a rellenar después del nombre del destino.
El estándar ANSI/ISO especifica
varias restricciones sobre la consulta
que aparece dentro de la sentencia INSERT:
Sin embargo en SQL de Microsoft Jet,
|
Ejemplo: Supongamos que tenemos una tabla llamada repres con la misma estructura que la tabla empleados, y queremos insertar en esa tabla los empleados que tengan como titulo rep ventas |
INSERT INTO repres SELECT * FROM empleados WHERE titulo = 'rep ventas' |
Con la SELECT obtenemos las filas correspondientes a los empleados con título rep ventas,y las insertamos en la tabla repres. Como las tablas tienen la misma estructura no hace falta poner la lista de columnas y podemos emplear * en la lista de selección de la SELECT. |
Ejemplo: Supongamos ahora que la tabla repres tuviese las siguientes columnas numemp, oficinarep, nombrerep. En este caso no podríamos utilizar el asterisco, tendríamos que poner: |
INSERT INTO repres SELECT numemp, oficina, nombre FROM empleados WHERE titulo = 'rep ventas' |
O bien: |
INSERT INTO repres (numemp, oficinarep, nombrerep) SELECT numemp, oficina, nombre FROM empleados WHERE titulo = 'rep ventas' |
Pag.6.2
|
© aulaClic. Todos los derechos reservados.
Free Computer tutorials .
Prohibida la reproducción por cualquier medio.
Julio-2001.aulaClic.com |
Síguenos en: Facebook Sobre aulaClic Política de Cookies
© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.