Otra forma de insertar a través de la sentencia INSERT permite añadir múltiples filas de datos a una tabla destino. Su diagrama sintáctico puede verse en la figura. En esta forma de la sentencia INSERT, los valores de datos para las nuevas filas no son especificados explícitamente dentro del texto de la sentencia. En su lugar, la fuente de las nuevas filas es una consulta de base de datos, especificada en la sentencia.
La adición de filas cuyos valores provienen de la propia base de datos puede parecer un poco extraña, pero es muy útil en ocasiones especiales. Por ejemplo, supongamos que se desea copiar el número de pedido, la fecha y el importe de todos los pedidos remitidos con anterioridad al 1 de Enero de 1999, a partir de la tabla PEDIDOS en otra tabla, ya creada, llamada ANTPEDIDOS. La sentencia INSERT multifila proporciona un modo de copiar los datos.
INSERT INTO antpedidos(IdPedido, FechaPedido, Cargo) SELECT IdPedido,FechaPedido, Cargo FROM Pedidos WHERE FechaPedido<"1999/01/01";
Los resultados de la consulta deben contener el mismo número de columnas que la lista de columnas de la sentencia INSERT (o de la tabla destino entera, si se ha omitido la lista de columnas), y los tipos de datos deben ser compatibles, columna a columna.
Además, el estándar SQL especifica varias restricciones sobre la consulta que aparece dentro de la sentencia INSERT multifila:
- La consulta no puede contener una cláusula ORDER BY.
- La consulta no puede ser la UNION de varias sentencias SELECT diferentes.
- La tabla destino de la sentencia INSERT no puede aparecer en la cláusula FROM de la consulta o de ninguna subconsulta que ésta contenga.