sql >> Database >  >> RDS >> Database

Een tabel maken op basis van een SQL-query

Probleem:

U wilt een nieuwe tabel maken in een database met gegevens gedefinieerd door een SQL-query.

Voorbeeld:

We willen graag de tafel gamer op basis van een SQL-query. In deze zoekopdracht selecteren we gegevens uit een andere tabel met de naam championship hieronder weergegeven.

id gamer score championship_date
1 alice 14 2020-08-10
2 supervisor 10 28-09-2020
3 happyman 0 2020-08-10
4 lukas 6 2020-08-10
5 oli 12 2020-08-10
6 biggamer 7 2020-09-12

Laten we in de database een nieuwe tafel maken met de naam gamer die gegevens zal opslaan in alle kolommen die zijn gedefinieerd in de tabel championship (id , gamer , score , en championship_date ).

Oplossing 1:

CREATE TABLE gamer 
AS  
SELECT
  *
FROM championship;

Discussie:

Als u een nieuwe tabel wilt maken, is de eerste stap het gebruik van de CREATE TABLE clausule en de naam van de nieuwe tafel (in ons voorbeeld:gamer ). Gebruik dan de AS zoekwoord en geef een SELECT instructie die gegevens selecteert voor de nieuwe tabel. In ons voorbeeld hebben we alle kolommen uit de tabel championship door het sterretje (*) te gebruiken. De resultatenset toont alle records in de tabel championship .

Als u echter een tabel wilt maken met slechts een subset van de records, kunt u de geselecteerde query specificeren zoals in het onderstaande voorbeeld.

Oplossing 2:

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

Hier is de resultatenset:

gamer score championship_date
alice 14 2020-08-10
happyman 0 2020-08-10
lukas 6 2020-08-10
oli 12 2020-08-10

De SELECT query haalt alleen de records op met een championship_date datum gelijk aan of ouder dan 2020-08-10 (WHERE championship_date <= 2020-08-10 ). De nieuwe tabel slaat minder kolommen op dan in het vorige voorbeeld (SELECT gamer, score, championship_date ) zonder de kolom id .

Een vergelijkbare oplossing voor dit probleem is het gebruik van de SELECT INTO om een ​​nieuwe tabel te maken en gegevens uit een andere tabel te kopiëren. Bekijk de code:

Oplossing 3:

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

De resulterende tabel is hetzelfde. Merk op dat deze constructie niet aanwezig is in de SQL-standaard. In dit SQL-commando schrijven we eerst SELECT , dan de lijst met kolommen, vervolgens het trefwoord INTO , en tot slot de naam van de nieuwe tabel die we willen maken. Vervolgens kunt u WHERE . toevoegen en andere SQL-clausules zoals GROUP BY of HAVING om records voor de nieuwe tabel te filteren.


  1. Optimaliseer groepsgewijze maximale zoekopdracht

  2. Hoe de grootste tabel in de MySQL-database te vinden?

  3. Oracle PL/SQL:DML-pakket online maken

  4. Methoden om rijen in SQL Server te rangschikken:ROW_NUMBER(), RANK(), DENSE_RANK() en NTILE()