Problem:
Sie möchten eine neue Tabelle mit Daten erstellen, die aus einer anderen Tabelle kopiert wurden.
Beispiel:
Unsere Datenbank hat eine Tabelle namens product
mit Daten in den folgenden Spalten:id
(Primärschlüssel), name
, category
und price
.
id | Name | Kategorie | Preis |
---|---|---|---|
105 | Rose | Blume | 5,70 |
108 | Schreibtisch | Möbel | 120,00 |
115 | Tulpe | Blume | 6,50 |
123 | Sonnenblume | Blume | 7,50 |
145 | Gitarre | Musik | 300,00 |
155 | Orchidee | Blume | 9,50 |
158 | Flöte | Musik | 156,00 |
Lassen Sie uns in der Datenbank eine neue Tabelle mit dem Namen florist
die die folgenden Spalten speichert:id
, name
und price
. Diese Spalten stammen aus der Tabelle product
aber nur aus der Kategorie Blume .
Es ist wichtig zu beachten, dass wir eine neue Tabelle erstellen. Der Tisch florist
existiert nicht in dieser Datenbank.
Die CREATE TABLE AS SELECT-Struktur
Um eine neue Tabelle aus einer anderen Tabelle zu erstellen, können Sie CREATE TABLE AS SELECT
verwenden . Diese Konstruktion ist Standard-SQL. Sehen Sie sich den folgenden SQL-Code an:
Lösung 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Hier ist das Ergebnis der Abfrage:
id | Name | Kategorie | Preis |
---|---|---|---|
105 | Rose | Blume | 5,70 |
115 | Tulpe | Blume | 6,50 |
123 | Sonnenblume | Blume | 7,50 |
155 | Orchidee | Blume | 9,50 |
Mit CREATE TABLE
, können Sie eine neue Tabelle erstellen, indem Sie Daten aus einer anderen Tabelle kopieren. In diesem Fall verwenden wir zuerst die CREATE TABLE
Klausel mit dem Namen für neue Tabelle (in unserem Beispiel:florist
), schreiben wir als nächstes AS
und das SELECT
Abfrage mit den Namen der Spalten (in unserem Beispiel:*
), und wir schreiben dann FROM
gefolgt vom Namen der Tabelle, aus der die Daten stammen (in unserem Beispiel:product
). Dann können Sie eine beliebige SQL-Klausel verwenden:WHERE
, GROUP BY
, HAVING
usw.
Der neue Tisch florist
enthält die Definition der Spalten aus dem product
Tabelle (id
, name
, category
und price
). Die Anzahl der Zeilen wird begrenzt, indem eine WHERE-Klausel verwendet wird, die die Datensätze filtert, um nur Daten aus der Kategorie Blume abzurufen .
Die SELECT INTO-Struktur
Eine andere Lösung ist die Verwendung von SELECT INTO
. Diese Syntax ist kein Standard-SQL, wird aber von vielen gängigen Datenbanken unterstützt.
Lösung 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Hier ist das Ergebnis:
id | Name | Preis |
---|---|---|
105 | Rose | 5,70 |
115 | Tulpe | 6,50 |
123 | Sonnenblume | 7,50 |
155 | Orchidee | 9,50 |
Diskussion:
Wenn Sie eine neue Tabelle basierend auf der Struktur und den Daten einer anderen Tabelle erstellen möchten, können Sie den SELECT INTO
verwenden Klausel. Schreiben Sie zuerst ein SELECT
-Klausel gefolgt von einer Liste von Spalten (in unserem Beispiel:id
, name
und price
) aus der bestehenden Tabelle (in unserem Beispiel:product
).
Beachten Sie, dass es mehr Spalten in der Tabelle product
. Wir haben nur die Spalten ausgewählt, die uns interessieren.
Verwenden Sie als Nächstes das Schlüsselwort INTO
durch den Namen der neu zu erstellenden Tabelle (in unserem Beispiel:florist
). Schreiben Sie dann das Schlüsselwort FROM mit dem Namen der bestehenden Tabelle (in unserem Beispiel:product
).
Wenn Sie gefilterte Zeilen aus der Tabelle auswählen möchten, verwenden Sie den WHERE
Klausel. Nach WHERE
, schreiben Sie die Bedingungen zum Filtern der Daten (in unserem Beispiel:WHERE category=’flower’
).
In diesem Beispiel erstellen wir eine neue Tabelle florist
die weniger Spalten hat als die Tabelle product
(der Unterschied ist die Spaltenkategorie). Diese neue Tabelle hat auch weniger Zeilen – nur die Zeilen mit der Kategorie Blume .
Wenn Sie eine Tabelle erstellen möchten, die alle Spalten der anderen Tabelle verwendet, können Sie natürlich *
verwenden anstatt die Spalten nach SELECT
aufzulisten . Siehe das Beispiel unten:
Lösung 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Hier ist das Ergebnis:
id | Name | Kategorie | Preis |
---|---|---|---|
105 | Rose | Blume | 5,70 |
115 | Tulpe | Blume | 6,50 |
123 | Sonnenblume | Blume | 7,50 |
155 | Orchidee | Blume | 9,50 |
Mit SELECT INTO
ist eine einfache Möglichkeit, eine neue Tabelle basierend auf einer vorhandenen Tabelle in der Datenbank zu erstellen.