Problem:
Sie möchten eine neue Tabelle in einer Datenbank mit Daten erstellen, die durch eine SQL-Abfrage definiert wurden.
Beispiel:
Wir möchten den Tisch gamer basierend auf einer SQL-Abfrage. In dieser Abfrage wählen wir Daten aus einer anderen Tabelle namens championship unten dargestellt.
| id | Gamer | Ergebnis | championship_date |
|---|---|---|---|
| 1 | Alice | 14 | 2020-08-10 |
| 2 | Betreuer | 10 | 2020-09-28 |
| 3 | glücklicher Mann | 0 | 2020-08-10 |
| 4 | Lukas | 6 | 2020-08-10 |
| 5 | oli | 12 | 2020-08-10 |
| 6 | Biggamer | 7 | 2020-09-12 |
Lassen Sie uns in der Datenbank eine neue Tabelle mit dem Namen gamer die Daten in allen Spalten speichert, die in der Tabelle championship (id , gamer , score und championship_date ).
Lösung 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Diskussion:
Wenn Sie eine neue Tabelle erstellen möchten, verwenden Sie zunächst den CREATE TABLE -Klausel und den Namen der neuen Tabelle (in unserem Beispiel:gamer ). Verwenden Sie dann den AS Schlüsselwort und geben Sie ein SELECT ein -Anweisung, die Daten für die neue Tabelle auswählt. In unserem Beispiel haben wir alle Spalten aus der Tabelle championship mit dem Sternchen (*). Die Ergebnismenge zeigt alle Datensätze in der Tabelle championship .
Wenn Sie jedoch eine Tabelle nur mit einer Teilmenge der Datensätze erstellen möchten, können Sie die ausgewählte Abfrage wie im Beispiel unten angeben.
Lösung 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Hier ist die Ergebnismenge:
| Spieler | Ergebnis | championship_date |
|---|---|---|
| Alice | 14 | 2020-08-10 |
| glücklicher Mann | 0 | 2020-08-10 |
| Lukas | 6 | 2020-08-10 |
| oli | 12 | 2020-08-10 |
Die SELECT Abfrage ruft nur die Datensätze mit einem championship_date ab Datum gleich oder älter als 10.08.2020 (WHERE championship_date <= 2020-08-10 ). Die neue Tabelle speichert weniger Spalten als im vorherigen Beispiel (SELECT gamer, score, championship_date ) ohne die Spalte id .
Eine ähnliche Lösung für dieses Problem ist die Verwendung von SELECT INTO -Klausel, um eine neue Tabelle zu erstellen und Daten aus einer anderen Tabelle zu kopieren. Sehen Sie sich den Code an:
Lösung 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
Die resultierende Tabelle ist dieselbe. Beachten Sie, dass diese Konstruktion im SQL-Standard nicht vorhanden ist. In diesem SQL-Befehl schreiben wir zuerst SELECT , dann die Liste der Spalten, als nächstes das Schlüsselwort INTO , und schließlich den Namen der neuen Tabelle, die wir erstellen möchten. Als nächstes können Sie WHERE hinzufügen und andere SQL-Klauseln wie GROUP BY oder HAVING um Datensätze für die neue Tabelle zu filtern.