Wie kann ich die Ausgabe eines SELECT-Befehls in einer neuen Tabelle speichern?
Problem
Manchmal möchte man das Ergebnis eines SELECT in eine neue Tabelle schreiben. Beispielsweise um das Ergebnis weiter zu verfeinern. Doch wie funktioniert das?
Lösung
Um die Ausgabe eines SELECT-Befehls in eine Tabelle zu schreiben, muss die Tabelle die gleiche Struktur wie das Ergebnis des SELECT-Befehls besitzen.
Als Beispiel werden wir den SELECT aus Listing 1 nehmen. Die dazugehörige Beispieltabelle könnt ihr Listing 2 entnehmen.
Listing 1
Download Code!
SELECT VORNAME FROM PERSON
Listing 2
Download Code!
CREATE TABLE PERSON (
PERSNR INTEGER PRIMARY KEY,
VORNAME VARCHAR (50),
NACHNAME VARCHAR (50),
ADRESSE INTEGER REFERENCES ADRESSE
);
Wenn nun in einer zusätzlichen Tabelle die Ergebnisse des SELECT-Befehls abgelegt werden sollen, so muss man erstmal diese Tabelle anlegen.
Wichtig ist hierbei, dass die Tabelle den gleichen Aufbau des Ergebnisses hat. Das bedeutet, wenn der SELECT ausgeführt wird, bekommt man eine Liste mit Vornamen der Tabelle Person.
Vorname hat in der Tabelle Person den Typ VARCHAR mit einer maximalen Länge von 50 Zeichen.
Somit muss in der Zieltabelle, die Spalte die die Werte aufnehmen soll auch vom Typ VARCHAR mit der Länge 50 sein. Der dazugehörige CREATE-Befehl könnt ihr in Listing 3 sehen.
Listing 3
Download Code!
CREATE TABLE PERSON_AUSWERTUNG (
VORNAME_DER_PERSON VARCHAR (50),
);
INSERT INTO
Nachdem die Tabelle nun angelegt ist, kann man das Ergebnis des SELECT in dieser Tabelle ablegen. Der dazugehörige SQL-Befehl steht in Listing 4.
Listing 4
Download Code!
INSERT INTO PERSON_AUSWERTUNG
SELECT VORNAME FROM PERSON
Jetzt haben wir aber ein zusätzliches Problem. Angenommen der SELECT liefert 100 verschiedene Attribute (Spalten, nicht Zeilen) zurück, dann ist doch ein Anlegen mit CREATE der totale Wahnsinn.
Das ist nämlich in meinem Fall so gewesen. Nun gib es Gott sei Dank einen kleinen Trick. Mit diesem Trick ist es möglich ohne das explizite Erstellen mit CREATE eine Datenbank on-the-fly zu erstellen.
Das bedeutet ihr könnt die Ausgabe des SELECT-Befehls direkt in einer neuen Tabelle abspeichern.
INTO
Ihr fügt einfach vor dem FROM-Teil ein INTO hinzu. Das veranlasst das Datenbanksystem, automatisch eine Tabelle mit den dazugehörigen, passenden Attributen zu erstellen.
Automatisches Erstellen der Tabelle beim SELECT
Der dazugehörige SQL-Befehl, um Tabellen automatisch zu erstellen, steht in Listing 5.
Listing 5
Download Code!
-- Hier wurde ein SELECT Stern genommen um eine grosse Ergebnismenge zu simulieren.
SELECT * INTO PERSON_AUSWERTUNG FROM PERSON