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.