Database
 sql >> Base de données >  >> RDS >> Database

Comment créer une table à partir d'une requête SQL

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.