Problème :
Vous souhaitez créer une nouvelle table dans une base de données avec des données définies par une requête SQL.
Exemple :
Nous aimerions créer la table gamer
basé sur une requête SQL. Dans cette requête, nous sélectionnons les données d'une autre table nommée championship
présenté ci-dessous.
identifiant | joueur | score | championship_date |
---|---|---|---|
1 | alice | 14 | 2020-08-10 |
2 | superviseur | 10 | 2020-09-28 |
3 | homme heureux | 0 | 2020-08-10 |
4 | Lukas | 6 | 2020-08-10 |
5 | oli | 12 | 2020-08-10 |
6 | grand joueur | 7 | 2020-09-12 |
Dans la base de données, créons une nouvelle table nommée gamer
qui stockera les données dans toutes les colonnes définies dans la table championship
(id
, gamer
, score
, et championship_date
).
Solution 1 :
CREATE TABLE gamer AS SELECT * FROM championship;
Discussion :
Si vous souhaitez créer une nouvelle table, la première étape consiste à utiliser le CREATE TABLE
clause et le nom de la nouvelle table (dans notre exemple :gamer
). Ensuite, utilisez le AS
mot-clé et fournissez un SELECT
instruction qui sélectionne les données pour la nouvelle table. Dans notre exemple, nous avons sélectionné toutes les colonnes de la table championship
en utilisant l'astérisque (*). Le jeu de résultats affiche tous les enregistrements de la table championship
.
Toutefois, si vous souhaitez créer une table avec uniquement un sous-ensemble d'enregistrements, vous pouvez spécifier la requête sélectionnée comme dans l'exemple ci-dessous.
Solution 2 :
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Voici le jeu de résultats :
joueur | score | championship_date |
---|---|---|
alice | 14 | 2020-08-10 |
homme heureux | 0 | 2020-08-10 |
lukas | 6 | 2020-08-10 |
oli | 12 | 2020-08-10 |
Le SELECT
la requête récupère uniquement les enregistrements avec un championship_date
date égale ou antérieure au 10/08/2020 (WHERE championship_date <= 2020-08-10
). La nouvelle table stocke moins de colonnes que dans l'exemple précédent (SELECT gamer, score, championship_date
) sans la colonne id
.
Une solution similaire à ce problème consiste à utiliser le SELECT INTO
clause pour créer une nouvelle table et copier les données d'une autre table. Jetez un oeil au code :
Solution 3 :
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
Le tableau obtenu est le même. Notez que cette construction n'est pas présente dans le standard SQL. Dans cette commande SQL, nous écrivons d'abord SELECT
, puis la liste des colonnes, puis le mot-clé INTO
, et enfin le nom de la nouvelle table que nous voulons créer. Ensuite, vous pouvez ajouter WHERE
et d'autres clauses SQL comme GROUP BY
ou HAVING
pour filtrer les enregistrements de la nouvelle table.