Documentation PostgreSQL 14.22 » Référence » Commandes SQL » SELECT INTO

Précédent | Niveau supérieur | Suivant
SELECT | Sommaire | SET

## SELECT INTO

SELECT INTO — définit une nouvelle table à partir des résultats d'une requête

## Synopsis

    [ 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 [, ...] ]
        [ WHERE condition ]
        [ GROUP BY expression [, ...] ]
        [ HAVING condition ]
        [ WINDOW nom_window AS ( définition_window ) [, ...] ]
        [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
        [ ORDER BY expression [ ASC | DESC | USING opérateur ] [, ...] ]
        [ LIMIT { nombre | ALL } ]
        [ OFFSET début [ ROW | ROWS ] ]
        [ FETCH { FIRST | NEXT } [ nombre ] { ROW | ROWS } ONLY ]
        [ FOR { UPDATE | SHARE } [ OF nomtable [, ...] ] [ NOWAIT ] [...] ]

## Description

`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`.

## Paramètres

`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.

## Notes

`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 `method`` ou le tablespace de la table avec `TABLESPACE `nom_tablespace``. Utilisez `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.

## Exemples

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';

## Compatibilité

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 36) et dans PL/pgSQL (voir Chapitre 43). 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.

## Voir aussi

CREATE TABLE AS