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.
- Bis zu 1 Gbit/s Bandbreite & unbegrenzt Traffic
- Schneller NVMe-SSD-Speicher
- Kostenlose Plesk Web Host Edition
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;
sqlDie 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;
sqlHier 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;
sqlNun 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;
sqlDadurch 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';
sqlUnsere 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.
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.