next up previous index
Weiter: 4 Tabellenspalte auf Null Hoch: 7 Kurzeinführung in SQL Zurück: 3 Einen Datensatz löschen

3 Tabelleninhalt in eine zweite Tabelle übernehmen

SQL-Anweisungen lassen sich auch verwenden, um einzelne Datensätze oder komplette Tabelleninhalte zu übernehmen. Angenommen, in der Datenbank liegen zwei Tabellen mit Kundendaten vor, d.h. die Struktur der Tabellen ist gleich. Die Tabelle Kunden1 enthält einige Datensätze von Kunden, die noch nicht in der Tabelle Kunden enthalten sind. Dann können Sie folgenden SQL-Befehl benutzen, um den Inhalt der Tabelle Kunden1 in die zweite Tabelle Kunden zu übernehmen:

INSERT INTO Kunden 
   SELECT * FROM Kunden1

Hier wurden einfach zwei SQL-Befehle geschachtelt. In der ersten Zeile finden Sie das Kommando INSERT INTO, welches auf die Tabelle Kunden angewandt wird. Die einzufügenden Werte werden jetzt jedoch nicht in Klammern als Argument von VALUES eingegeben. Vielmehr benutzen Sie eine SELECT-Abfage, um alle Felder aus Tabelle Kunden1 abzufragen. Auf die Details des SELECT-Befehls wird im übernächsten Abschnitt "`Abfragen mit SQL gestalten"' eingegangen. Das Ergebnis dieser Abfrage ist eine Tabelle, die dann als Quelle für den INSERT-Befehl dient. Sie könnten den Abfrageteil sogar noch um eine Bedingung erweitern, wie die folgende SQL-Anweisung zeigt:

INSERT INTO Kunden 
   SELECT * FROM Kunden1
      WHERE KdNr > 2010

In der dritten Zeile kommt hier eine WHERE-Bedingung zum Einsatz, die nur Datensätze, bei denen die Kundennummer größer als 2010 ist, berücksichtigt. In beiden Fällen übernimmt die Anweisung INSERT INTO die Ergebnisse der Sub-SQL-Anweisung (hier die SELECT-Anweisung) und fügt die Datensätze in der Zieltabelle ein. Voraussetzung ist nur, dass die Reihenfolge der Felder sowie deren Typ und Anzahl mit der Zieltabelle übereinstimmen. Sie können den obigen Ansatz auch verwenden, um lediglich einige Felder aus einer Tabelle in eine zweite Tabelle zu überführen. Nehmen wir an, Sie haben die Tabelle Kunden mit den Feldern KdNr, Firma, Name, Vorname, Straße, Hausnummer, Plz, Ort, Telefon etc. Nun soll eine neue Tabelle die Felder KdNr, Name, Vorname und Telefon aufnehmen. Dies ist mit folgenden SQL-Anweisungen möglich:

CREATE TABLE Kunden1 
   (KdNr Int(11), 
    Name Text, 
    Vorname Text,
    Telefon Text)

INSERT INTO Kunden1
   SELECT KdNr, Name, Vorname, Telefon FROM Kunden

Im oberen Teil der SQL-Befehlssequenz wird eine neue Tabelle mit den gewünschten Feldern angelegt. Dies kennen Sie bereits aus den vorherigen Abschnitten. Dann schließt sich ein geschachtelter SQL-Befehl an, bei dem der Sub-Befehl die Felder KdNr, Name, Vorname und Telefon aus der Tabelle Kunden extrahiert. Das Ergebnis wird dann vom äußeren SQL-Befehl in die neue Tabelle Kunden1 eingefügt.

Achtung: Sofern Sie die obigen Beispiele in SQL nachvollziehen möchten, achten Sie darauf, immer nur einen SQL-Befehl oder eine geschachtelte SQL-Befehlssequenz auf einmal einzutippen. Wenn Sie beispielsweise die beiden obigen SQL-Befehle CREATE TABLE und INSERT INTO auf einmal in das Befehlsfenster eintippen und ausführen lassen, kann dies den SQL-Parser der Datenbank überfordern. Erfahrungsgemäß kommt es bei Versuchen mit MySQL zu Fehlermeldungen, die erst bei getrennter Eingabe der Einzelbefehle verschwinden. Zudem ist zu beachten, dass nicht alle Datenquellen die SQL-Befehle unterstützen. Bei einer dBASE-Tabelle als Datenquelle kommt es u.U. bei den Befehlen zu Fehlermeldungen.


next up previous index
Next: 4 Tabellenspalte auf Null Up: 7 Kurzeinführung in SQL Previous: 3 Einen Datensatz löschen
Nicolaus Millin
2007-08-11