SELECT INTO

Name

SELECT INTO  --  crée une nouvelle table à partir des résultats d'une requête.

Synopsis

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ AS output_name ] [, ...]
    INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]
    [ FOR UPDATE [ OF tablename [, ...] ] ]
    [ LIMIT [ start , ] { count | ALL } ]
    [ OFFSET start ]

where from_item can be:

[ ONLY ] table_name [ * ]
    [ [ AS ] alias [ ( column_alias_list ) ] ]
|
( select )
    [ AS ] alias [ ( column_alias_list ) ]
|
from_item [ NATURAL ] join_type from_item
    [ ON join_condition | USING ( join_column_list ) ]
  

Entrées

TEMPORARY, TEMP

Si TEMPORARY ou TEMP est spécifié, la table est créée seulement pour la session, et est automatiquement supprimée à la fin de la session. L'existence de tables permanentes avec le même nom ne sont pas visibles (dans la session) tandis que la table temporaire existe. Les indexes créés sur une table temporaire sont aussi temporaires.

new_table

Nom de la nouvelle table à créer. Cette table ne doit pas déja exister. Cependant, une table temporaire peut être créée en ayant le même nom qu'une table permanente existante.

Toutes les autres entrées sont décrites en détail dans SELECT.

Sorties

Voir CREATE TABLE et SELECT pour un résumé des messages de sortie possibles.

Description

SELECT INTO crée une nouvelle table et la remplit de données calculées par une requête. Les données ne sont pas renvoyées au client, comme avec un SELECT normal. Les nouvelles colonnes de table ont des noms et des types associés avec les sorties colonnes du SELECT.

Note

CREATE TABLE AS est fonctionnellement équivalent à SELECT INTO. CREATE TABLE AS est la syntaxe recommendée, car SELECT INTO n'est pas standard. En fait, cette forme de SELECT INTO n'est pas disponible en PL/pgSQL ou ecpg (1), car elle interprète la clause INTO différemment.

Compatibilité

SQL92 utilise SELECT ... INTO pour représenter la sélection des valeurs dans des variables scalaires d'un programme hôte, d'avantage que pour créer une nouvelle table. Ceci est l'usage que l'on trouve en PL/pgSQL et ecpg (1). L'usage de SELECT INTO dans Postgres pour représenter la création de table est historique. Il est mieux d'utiliser CREATE TABLE AS pour ce propos. (CREATE TABLE AS n'est pas standard, mais il prête moins à confusion).