SELECT INTO — define una nueva tabla a partir de los resultados de una consulta
[ WITH [ RECURSIVE ]with_query[, ...] ] SELECT [ ALL | DISTINCT [ ON (expression[, ...] ) ] ] [ { * |expression[ [ AS ]output_name] } [, ...] ] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ]new_table[ FROMfrom_item[, ...] ] [ WHEREcondition] [ GROUP BYexpression[, ...] ] [ HAVINGcondition] [ WINDOWwindow_nameAS (window_definition) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ]select] [ ORDER BYexpression[ ASC | DESC | USINGoperator] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT {count| ALL } ] [ OFFSETstart[ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [count] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OFtable_name[, ...] ] [ NOWAIT ] [...] ]
SELECT INTO crea una nueva tabla y la llena
con los datos devueltos por una consulta. Los datos no se devuelven al
cliente, a diferencia de lo que ocurre con un SELECT normal.
Las columnas de la nueva tabla tienen los nombres y tipos de datos asociados con las
columnas de salida de SELECT.
TEMPORARY o TEMPSi se especifica, la tabla se crea como una tabla temporal. Consulta CREATE TABLE para obtener más detalles.
UNLOGGEDSi se especifica, la tabla se crea como una tabla no registrada («unlogged»). Consulta CREATE TABLE para obtener más detalles.
new_tableEl nombre (opcionalmente calificado por esquema) de la tabla que se va a crear.
Todos los demás parámetros se describen en detalle en SELECT.
CREATE TABLE AS es funcionalmente similar a
SELECT INTO. Se recomienda usar la sintaxis CREATE TABLE AS,
ya que esta forma de SELECT INTO no está disponible en ECPG
ni en PL/pgSQL, porque interpretan la
cláusula INTO de manera diferente. Además,
CREATE TABLE AS ofrece un superconjunto de la
funcionalidad provista por SELECT INTO.
A diferencia de CREATE TABLE AS, SELECT
INTO no permite especificar propiedades como el método de acceso de una tabla
con USING o el tablespace de la tabla
con métodoTABLESPACE . Usa
nombre_tablespaceCREATE TABLE AS si es necesario. Por lo tanto, se elige el método de
acceso de tabla predeterminado para la nueva tabla. Consulta default_table_access_method para obtener más información.
Crea una nueva tabla films_recent que contenga solo
las entradas recientes de la tabla films:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
El estándar SQL usa SELECT INTO para
representar la selección de valores en variables escalares de un programa anfitrión,
en lugar de crear una nueva tabla. Este es de hecho el uso que se encuentra
en ECPG (consulta la Chapter 34) y
PL/pgSQL (consulta la Chapter 41).
El uso en PostgreSQL de SELECT
INTO para representar la creación de tablas es histórico. Algunas otras
implementaciones de SQL también usan SELECT INTO de esta manera (pero
la mayoría de las implementaciones de SQL admiten CREATE TABLE AS
en su lugar). Aparte de estas consideraciones de compatibilidad, es mejor usar
CREATE TABLE AS para este propósito en el código nuevo.