|
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:
la consulta no
puede tener una cláusula ORDER BY,
la tabla destino
de la sentencia INSERT no puede aparecer
en la cláusula FROM de la consulta
o de ninguna subconsulta que ésta tenga. Esto prohibe insertar
parte de una tabla en sí misma,
la consulta no
puede ser la UNION de varias sentencias
SELECT diferentes,
el resultado de
la consulta debe contener el mismo número de columnas que las indicadas
para insertar y los tipos de datos deben ser compatibles columna a columna.
Sin embargo en SQL de Microsoft Jet,
se puede
incluir la cláusula ORDER BY
aunque no tiene mucho sentido.
se puede
poner en la cláusula FROM
de la consulta, la tabla en la que
vamos a insertar,
pero
no podemos utilizar una UNION.
|