SQL INSERT INTO SELECT: Daten von einer Tabelle in eine andere kopieren

Die Anweisung SQL INSERT INTO SELECT wird genutzt, um Daten von einer Tabelle in eine andere zu übertragen. Dafür muss diese neue Tabelle allerdings bereits angelegt sein. Spalten ohne Inhalt erhalten auch in der neuen Tabelle den Wert NULL.

Was ist SQL INSERT INTO SELECT?

Die Structured Query Language erlaubt es Ihnen, innerhalb einer Datenbank zahlreiche Tabellen anzulegen und diese mit Daten zu füttern. Dabei kann es vorkommen, dass Sie die Daten einer Tabelle ganz oder teilweise in eine andere übertragen möchten. Statt sämtliche Einträge erneut einzugeben, haben Sie die Möglichkeit, Daten zu kopieren und an der gewünschten Stelle einzusetzen. Die passende Anweisung für dieses Vorhaben ist SQL INSERT INTO SELECT. Diese kopiert Daten nach Ihren Wünschen und setzt sie in die neue Tabelle ein. Dabei werden bereits bestehende Einträge nicht überschrieben. Die Voraussetzung ist, dass die Datentypen der ursprünglichen und der neuen Tabelle übereinstimmen.

vServer (VPS) von IONOS

Günstige und starke VPS für Webserver, Mailserver und eigene Anwendungen mit persönlichem Berater und 24/7 Support!

100 % SSD-Speicher
Bereit in 55 Sek.
SSL Zertifikat

Syntax und Funktionsweise

Die Syntax von SQL INSERT INTO SELECT unterscheidet sich, je nachdem, ob Sie sämtliche Spalten von einer zu einer anderen Tabelle kopieren möchten oder ob lediglich einige ausgewählte Spalten übernommen werden sollen. Für einen vollständigen Übertrag ist dies der Aufbau:

INSERT INTO neue_tabelle
SELECT * FROM alte_tabelle
WHERE bedingung;
sql

Die Bedingung WHERE ist dabei optional.

Falls Sie lediglich ausgewählte Spalten übertragen möchten, ist dies die passende Syntax:

INSERT INTO neue_tabelle (spalte1, spalte2, spalte3, …)
SELECT spalte1, spalte2, spalte3, … FROM alte_tabelle
WHERE bedingung;
sql

Hier spezifizieren Sie also die einzelnen Spalten und nutzen dann ebenfalls den SQL-Befehl SELECT, um diese auszuwählen. Wichtig ist in beiden Fällen, dass die Tabelle neue_tabelle bereits in der Datenbank angelegt ist. Außerdem müssen die Bezeichnungen für sämtliche Spalten der alten und der neuen Tabelle übereinstimmen. Spalten, für die keine Daten vorhanden sind, werden den Wert NULL enthalten.

Gesamte Tabelle kopieren und einfügen

Um Ihnen zu zeigen, wie SQL INSERT INTO SELECT in der Praxis funktioniert, erstellen wir eine beispielhafte Tabelle namens „Kundenliste_2023“. Diese enthält Angaben zur Kundennummer, dem Namen, dem Standort und der Anzahl der bestellten Artikel. Sie sieht so aus:

Kundennummer Name Standort Artikel
1427 Schmidt Berlin 13
1377 Schulz Hamburg 9
1212 Peters Hamburg 15
1431 Müller München 22
1118 Becker Berlin 10

Dazu gibt es eine neue Tabelle mit dem Namen „Kundenliste_2024“. Diese ist bisher leer.

Wenn wir die Einträge der Tabelle „Kundenliste_2023“ komplett in die neue Tabelle „Kundenliste_2024“ einfügen möchten, gehen wir folgendermaßen vor:

INSERT INTO Kundenliste_2024
SELECT * FROM Kundenliste_2023;
sql

Nun befinden sich alle Einträge aus der alten Kundenliste auch in der neuen Kundenliste:

Kundennummer Name Standort Artikel
1427 Schmidt Berlin 13
1377 Schulz Hamburg 9
1212 Peters Hamburg 15
1431 Müller München 22
1118 Becker Berlin 10

Ausgewählte Spalten übertragen

Es kann aber auch vorkommen, dass Sie lediglich bestimmte Spalten übernehmen möchten. Beispielsweise könnte in unserem Fall die Anzahl der bestellten Artikel für die neue Tabelle nicht von Relevanz sein. Daher wählen wir jetzt nur bestimmte Spalten zum Übertrag aus:

INSERT INTO Kundenliste_2024 (Kundennummer, Name, Standort)
SELECT Kundennummer, Name, Standort FROM Kundenliste_2023;
sql

Dadurch erhalten wir diese neue Tabelle:

Kundennummer Name Standort Artikel
1427 Schmidt Berlin
1377 Schulz Hamburg
1212 Peters Hamburg
1431 Müller München
1118 Becker Berlin

Die Artikel-Spalte enthält somit lediglich Einträge mit dem Wert NULL.

Bedingungen für den Übertrag einbauen

Zusätzlich können Sie eine WHERE-Bedingung nutzen, um lediglich ausgewählte Zeilen zu kopieren. Für unsere Tabelle möchten wir zum Beispiel nur Kundinnen und Kunden aus Hamburg übertragen. Der passende Code ist dieser:

INSERT INTO Kundenliste_2024
SELECT * FROM Kundenliste_2023
WHERE Standort = 'Hamburg';
sql

Unsere neue Tabelle ist dadurch diese:

Kundennummer Name Standort Artikel
1377 Schulz Hamburg 9
1212 Peters Hamburg 15

Alternative zu SQL INSERT INTO SELECT

Eine Alternative für SQL INSERT INTO SELECT ist SELECT INTO. Beide Anweisungen werden verwendet, um Daten von einer Tabelle in eine andere zu übertragen. Außerdem agieren sie als Teil eines größeren Befehls. Während SQL INSERT INTO SELECT allerdings eine bereits existierende Tabelle benötigt, in die sie die Daten übertragen kann, erstellt SELECT INTO eine neue Tabelle.

Tipp

Sie haben die Wahl! Mit SQL-Server-Hosting von IONOS nutzen Sie MSSQL, MySQL oder MariaDB. Top-Performance, starke Sicherheitsfeatures und persönliche Beratung sind in jedem Fall garantiert.