SELECT INTO — définit une nouvelle table à partir des résultats d'une requête
[ WITH [ RECURSIVE ]requête_with
[, ...] ] SELECT [ ALL | DISTINCT [ ON (expression
[, ...] ) ] ] [ { * |expression
[ [ AS ]nom_sortie
] } [, ...] ] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ]nouvelle_table
[ FROMélément_from
[, ...] ] [ WHEREcondition
] [ GROUP BYexpression
[, ...] ] [ HAVINGcondition
] [ WINDOWnom_window
AS (définition_window
) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ]select
] [ ORDER BYexpression
[ ASC | DESC | USINGopérateur
] [, ...] ] [ LIMIT {nombre
| ALL } ] [ OFFSETdébut
[ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [nombre
] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OFnomtable
[, ...] ] [ NOWAIT ] [...] ]
SELECT INTO
crée une nouvelle table en la remplissant
avec des données récupérées par une requête. Les données ne sont pas
renvoyées au client comme le fait habituellement l'instruction
SELECT
. Les nouvelles colonnes de la table ont les noms
et les types de données associés avec les colonnes en sortie du
SELECT
.
TEMPORARY
ou TEMP
Si spécifié, la table est créée comme une table temporaire. Référez-vous à CREATE TABLE pour plus de détails.
UNLOGGED
Si spécifié, la table est créée comme une table non tracée dans les journaux de transactions. Voir CREATE TABLE pour plus de détails.
new_table
Le nom de la table à créer (pouvant être qualifié par le nom du schéma).
Tous les autres paramètres sont décrits en détail dans SELECT.
CREATE TABLE AS
est fonctionnellement équivalent à
SELECT INTO
. CREATE TABLE AS
est la
syntaxe recommandée car cette forme de SELECT INTO
n'est
pas disponible dans ECPG ou
PL/pgSQL. En effet, ils interprètent la clause
INTO
différemment. De plus, CREATE TABLE
AS
offre un ensemble de fonctionnalités plus important que celui
de SELECT INTO
.
En contraste à CREATE TABLE AS
, SELECT
INTO
ne permet pas de spécifier les propriétés telles que la
méthode d'accès à la table avec USING
ou le tablespace de la table avec method
TABLESPACE
. Utilisez
nom_tablespace
CREATE TABLE AS
si nécessaire. De ce fait, la méthode d'accès
par défaut de la table est choisie pour la nouvelle table. Voir default_table_access_method pour plus d'informations.
Crée une nouvelle table films_recent
ne contenant que
les entrées récentes de la table films
:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
Le standard SQL utilise SELECT INTO
pour représenter la
sélection de valeurs dans des variables scalaires d'un programme hôte
plutôt que la création d'une nouvelle table. Ceci est en fait
l'utilisation trouvée dans ECPG (voir Chapitre 34) et dans PL/pgSQL (voir Chapitre 41). L'usage de PostgreSQL de
SELECT INTO
pour représenter une création de table est
historique. Certaines autres implémentations SQL utilisent aussi
SELECT INTO
de cette façon (mais la plupart des
implémentations SQL acceptent CREATE TABLE AS
à la
place). En dehors de ces considérations de compatibilité, il est
préférable d'utiliser CREATE TABLE AS
dans un nouveau
programme.