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

Was ist SQL INSERT INTO SELECT?

Die Struc­tu­red Query Language erlaubt es Ihnen, innerhalb einer Datenbank zahl­rei­che 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 über­tra­gen möchten. Statt sämtliche Einträge erneut ein­zu­ge­ben, haben Sie die Mög­lich­keit, Daten zu kopieren und an der ge­wünsch­ten Stelle ein­zu­set­zen. 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 be­stehen­de Einträge nicht über­schrie­ben. Die Vor­aus­set­zung ist, dass die Da­ten­ty­pen der ur­sprüng­li­chen und der neuen Tabelle über­ein­stim­men.

vServer / VPS
VPS un­schlag­bar günstig auf Dell En­ter­pri­se Servern
  • 1 Gbit/s, un­be­grenzt Traffic & mehr Cores
  • Min­des­tens 99,99% Ver­füg­bar­keit & ISO-zer­ti­fi­zier­te Re­chen­zen­tren
  • Aus­ge­zeich­ne­ter 24/7 Premium-Support mit per­sön­li­chem Berater

Syntax und Funk­ti­ons­wei­se

Die Syntax von SQL INSERT INTO SELECT un­ter­schei­det sich, je nachdem, ob Sie sämtliche Spalten von einer zu einer anderen Tabelle kopieren möchten oder ob lediglich einige aus­ge­wähl­te Spalten über­nom­men werden sollen. Für einen voll­stän­di­gen Ü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 aus­ge­wähl­te Spalten über­tra­gen 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 spe­zi­fi­zie­ren Sie also die einzelnen Spalten und nutzen dann ebenfalls den SQL-Befehl SELECT, um diese aus­zu­wäh­len. Wichtig ist in beiden Fällen, dass die Tabelle neue_tabelle bereits in der Datenbank angelegt ist. Außerdem müssen die Be­zeich­nun­gen für sämtliche Spalten der alten und der neuen Tabelle über­ein­stim­men. 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 funk­tio­niert, erstellen wir eine bei­spiel­haf­te Tabelle namens „Kun­den­lis­te_2023“. Diese enthält Angaben zur Kun­den­num­mer, dem Namen, dem Standort und der Anzahl der be­stell­ten Artikel. Sie sieht so aus:

Kun­den­num­mer 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 „Kun­den­lis­te_2024“. Diese ist bisher leer.

Wenn wir die Einträge der Tabelle „Kun­den­lis­te_2023“ komplett in die neue Tabelle „Kun­den­lis­te_2024“ einfügen möchten, gehen wir fol­gen­der­ma­ßen vor:

INSERT INTO Kundenliste_2024
SELECT * FROM Kundenliste_2023;
sql

Nun befinden sich alle Einträge aus der alten Kun­den­lis­te auch in der neuen Kun­den­lis­te:

Kun­den­num­mer 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

Aus­ge­wähl­te Spalten über­tra­gen

Es kann aber auch vorkommen, dass Sie lediglich bestimmte Spalten über­neh­men möchten. Bei­spiels­wei­se könnte in unserem Fall die Anzahl der be­stell­ten 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:

Kun­den­num­mer 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.

Be­din­gun­gen für den Übertrag einbauen

Zu­sätz­lich können Sie eine WHERE-Bedingung nutzen, um lediglich aus­ge­wähl­te Zeilen zu kopieren. Für unsere Tabelle möchten wir zum Beispiel nur Kundinnen und Kunden aus Hamburg über­tra­gen. Der passende Code ist dieser:

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

Unsere neue Tabelle ist dadurch diese:

Kun­den­num­mer Name Standort Artikel
1377 Schulz Hamburg 9
1212 Peters Hamburg 15

Al­ter­na­ti­ve zu SQL INSERT INTO SELECT

Eine Al­ter­na­ti­ve für SQL INSERT INTO SELECT ist SELECT INTO. Beide An­wei­sun­gen werden verwendet, um Daten von einer Tabelle in eine andere zu über­tra­gen. Außerdem agieren sie als Teil eines größeren Befehls. Während SQL INSERT INTO SELECT al­ler­dings eine bereits exis­tie­ren­de Tabelle benötigt, in die sie die Daten über­tra­gen 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-Per­for­mance, starke Si­cher­heits­fea­tures und per­sön­li­che Beratung sind in jedem Fall ga­ran­tiert.

Zum Hauptmenü