sql >> Databasteknik >  >> RDS >> Database

Hur man skapar en tabell från en SQL-fråga

Problem:

Du vill skapa en ny tabell i en databas med data definierade av en SQL-fråga.

Exempel:

Vi skulle vilja skapa tabellen gamer baserat på en SQL-fråga. I den här frågan väljer vi data från en annan tabell som heter championship presenteras nedan.

id spelare poäng championship_date
1 alice 14 2020-08-10
2 handledare 10 2020-09-28
3 happyman 0 2020-08-10
4 lukas 6 2020-08-10
5 oli 12 2020-08-10
6 biggamer 7 2020-09-12

Låt oss skapa en ny tabell med namnet gamer som kommer att lagra data i alla kolumner som definieras i tabellen championship (id , gamer , score och championship_date ).

Lösning 1:

CREATE TABLE gamer 
AS  
SELECT
  *
FROM championship;

Diskussion:

Om du vill skapa en ny tabell är det första steget att använda CREATE TABLE sats och namnet på den nya tabellen (i vårt exempel:gamer ). Använd sedan AS nyckelord och ange en SELECT uttalande som väljer data för den nya tabellen. I vårt exempel valde vi alla kolumner från tabellen championship genom att använda asterisken (*). Resultatuppsättningen visar alla rekord i tabellen championship .

Men om du vill skapa en tabell med endast en delmängd av posterna kan du ange den valda frågan som i exemplet nedan.

Lösning 2:

CREATE TABLE gamer 
AS  
SELECT
  gamer, score, championship_date
FROM championship 
WHERE championship_date <= 2020-08-10;

Här är resultatuppsättningen:

spelare poäng championship_date
alice 14 2020-08-10
happyman 0 2020-08-10
lukas 6 2020-08-10
oli 12 2020-08-10

SELECT query hämtar endast poster med en championship_date datum lika med eller äldre än 2020-08-10 (WHERE championship_date <= 2020-08-10 ). Den nya tabellen lagrar färre kolumner än i föregående exempel (SELECT gamer, score, championship_date ) utan kolumnen id .

En liknande lösning på detta problem är att använda SELECT INTO för att skapa en ny tabell och kopiera data från en annan tabell. Ta en titt på koden:

Lösning 3:

SELECT
  gamer, score, championship_date
INTO gamer
FROM championship 
WHERE championship_date <= 2020-08-10;

Den resulterande tabellen är densamma. Observera att denna konstruktion inte finns i SQL-standarden. I det här SQL-kommandot skriver vi först SELECT , sedan listan med kolumner, bredvid nyckelordet INTO , och slutligen namnet på den nya tabell vi vill skapa. Därefter kan du lägga till WHERE och andra SQL-satser som GROUP BY eller HAVING för att filtrera poster för den nya tabellen.


  1. SqlServer:Inloggning misslyckades för användaren

  2. Hur man hittar platsen för datafiler och loggfiler i SQL Server

  3. Ordning efter värdens ordning i en SQL IN()-sats

  4. Förhindrar SELECT FOR UPDATE att andra anslutningar infogas när raden inte finns?