SQLShack (Deutsch)

Dieser Artikel behandelt die SQL INSERT INTO SELECT-Anweisung zusammen mit seiner Syntax, Beispiele und Anwendungsfälle.

In meinem früheren Artikel SQL SELECT INTO-Anweisung haben wir die folgenden Aufgaben untersucht.

  • Erstellen Sie im laufenden Betrieb eine SQL-Tabelle, während Sie Datensätze mit den entsprechenden Datentypen
  • einfügen

  • Verwenden Sie SQL SELECT INTO, um Datensätze in eine bestimmte Dateigruppe einzufügen.
  • Wir können damit keine Daten in eine vorhandene Tabelle einfügen.

Die Anweisung INSERT INTO SELECT

Wir möchten Datensätze als reguläre Datenbankaktivität einfügen. Wir können Daten direkt mit Client-Tools wie SSMS, Azure Data Studio oder direkt aus einer Anwendung einfügen. In SQL verwenden wir die SQL-Anweisung INSERT INTO, um Datensätze einzufügen.

Die Syntax von INSERT INTO

Sobald wir Daten in die Tabelle eingefügt haben, können wir die folgende Syntax für unsere verwenden SQL INSERT INTO-Anweisung.

1
2

INSERT INTO tabellenname (Spalte1, Spalte 2 ….)
VALUES (Wert1, Wert2, …);

Wenn wir alle Spaltenwerte gemäß Tabellenspalte angegeben haben Bestellungen müssen wir keine Spaltennamen angeben. Wir können Datensätze direkt in die Tabelle einfügen.

1
2

INSERT INTO tabellenname
VALUES (value1, value2, …);

Lassen Sie uns eine Beispieltabelle erstellen und Daten in diese einfügen

1
2
3
4

TABELLE ERSTELLEN Mitarbeiter
(ID INT,
Name VARCHAR (20)
);

Wir können Daten mithilfe der folgenden Abfragen einfügen. Beide Abfragen gelten für das Einfügen von Daten.

1
2

In Mitarbeiterwerte (ID, Name) einfügen (1, „raj“)
In Mitarbeiterwerte einfügen (2, „raj“)

Wir können keine Daten einfügen, ohne Spaltennamen anzugeben, wenn es eine gibt Die Nichtübereinstimmung zwischen dem Einfügen von Daten und der Reihenfolge der Spaltenwerte ist unterschiedlich. Wir können die folgende Fehlermeldung erhalten.

  • Nachricht 213, Ebene 16, Status 1, Zeile 6

    Spaltenname oder Anzahl der angegebenen Werte nicht Definition der Übereinstimmungstabelle.

  • Nachricht 245, Ebene 16, Status 1, Zeile 6

    Die Konvertierung ist fehlgeschlagen, wenn der Varchar-Wert raj in den Datentyp int konvertiert wurde.

In diesem Beispiel verwenden wir die SQL INSERT INTO-Anweisung mit der direkten Angabe von Werten in einer Anweisung. Angenommen, wir möchten Daten aus einer anderen Tabelle einfügen. Wir können die SQL INSERT INTO-Anweisung weiterhin mit einer select-Anweisung verwenden. Lassen Sie uns dies im nächsten Abschnitt untersuchen.

INSERT INTO SELECT-Anweisungssyntax

Mit der folgenden INSERT INTO SELECT-Anweisung können wir Daten aus anderen SQL-Tabellen in eine Tabelle einfügen.

1
2
3

INSERT IN Tabelle1 (Spalte1, Spalte2, Spalte3, …)
SELECT Spalte1, Spalte2, Spalte3, …
FROM Tabelle2

Diese Abfrage führt die folgenden Aufgaben aus:

  • Zuerst werden Datensätze aus einer Tabelle ausgewählt (Select-Anweisung).
  • Als Nächstes wird eine in INSERT INTO
  • Hinweis: Die Spaltenstruktur sollte zwischen der von der SELECT-Anweisung zurückgegebenen Spalte und der Zieltabelle übereinstimmen.

INSERT IN SELECT-Beispiele

Beispiel 1: Einfügen von Daten aus allen Spalten der Quelltabelle in die Zieltabelle

Wir haben die folgenden Datensätze in einem vorhandene Mitarbeitertabelle.

Lassen Sie uns eine weitere Tabelle erstellen. Kunden mit der folgenden Abfrage.

1
2
3
4

TABELLE ERSTELLEN Kunden
(ID INT,
Name VARCHAR (20)
);

Wir möchten alle Datensätze aus der Employees-Tabelle in einfügen die Kundentabelle. Wir können dazu die SQL INSERT INTO SELECT-Anweisung verwenden.

1
2
3

IN Kunden EINFÜGEN
SELECT *
FROM Employees;

Es werden alle Datensätze in die Customers-Tabelle eingefügt. Wir können überprüfen, ob die Datensätze in der Tabelle „Kunden“ der Tabelle „Mitarbeiter“ ähnlich sind.

In diesem Beispiel haben wir Datensätze für alle eingefügt Spalten in die Customers-Tabelle.

Beispiel 2: Fügen Sie Zeilen von der Quell- in die Zieltabelle ein, indem Sie Spaltennamen angeben.

Lassen Sie uns die vorhandene Customers-Tabelle löschen, bevor wir fortfahren. Jetzt möchten wir eine Tabelle mit einer zusätzlichen IDENTITY-Spalte erstellen. Die Spalte IDENTITY fügt automatisch Identitätswerte in eine Tabelle ein. Wir haben auch eine City-Spalte hinzugefügt, die NULL-Werte zulässt.

1
2
3
4
5
6

CREATE TABELLE Kunden
(ID INT IDENTITY (1, 1),
Emp_ID INT,
Name VARCHAR (20),
Stadt VARCHAR (20) NULL,
);

Wir können die INSERT INTO SELECT-Anweisung nicht ähnlich der verwenden obiges Beispiel. Wenn wir versuchen, diesen Code auszuführen, wird eine Fehlermeldung angezeigt.

1
2
3

IN Kunden EINFÜGEN
SELECT *
FROM Employees ;;

In diesem Fall müssen wir den Spaltennamen mit der Anweisung INSERT INTO angeben.

1
2
3

INSERT INTO Customers (Emp_ID, Name)
SELECT *
FROM Employees;

In der Tabelle „Kunden“ haben wir eine zusätzliche Spalte mit erlaubt NULL-Werte. Führen Sie eine Tabelle „Auf Kunden auswählen“ aus. Im folgenden Screenshot sehen wir NULL-Werte in der Spalte City.

Angenommen, Sie haben eine andere Spalte in der Quelltabelle. Sie können weiterhin Datensätze in die Zieltabelle einfügen, indem Sie in der Anweisung INSERT INTO SELECT Spaltennamen angeben. Wir sollten einen geeigneten Datentyp haben, um Daten einzufügen. Sie können keine varchar-Spaltendaten in eine INT-Spalte einfügen.

Fügen Sie mit der Anweisung ALTER TABLE eine neue Spalte in die Employees-Tabelle ein.

1
2

TABELLE ÄNDERN Mitarbeiter
Land HINZUFÜGEN Varchar (50);

Aktualisieren Sie die Tabellendatensätze mit dem Länderwert Indien.

1

Mitarbeiter aktualisieren Country = „India“

Führen Sie nun INSERT INTO erneut aus SELECT-Anweisung. Sie können feststellen, dass wir SELECT * verwenden, anstatt Spaltennamen anzugeben.

1
2
3

IN Kunden EINFÜGEN (Emp_ID, Name)
SELECT *
FROM Mitarbeiter;

Wir erhalten die folgende Fehlermeldung. Dieser Fehler tritt aufgrund der Spaltenfehlanpassung zwischen der Quelltabelle und der Zieltabelle auf.

Mit der folgenden Abfrage können wir die Spalte zwischen Quell- und Zieltabelle zuordnen.

1
2
3
4
5
6

IN Kunden EINFÜGEN
(Emp_ID,
Name
)
SELECT ID, Name
FROM Employees;

Beispiel 3: Fügen Sie die oberen Zeilen mit INSERT INTO SELECT ein Anweisung

Angenommen, wir möchten Top N-Zeilen aus der Quelltabelle in die Zieltabelle einfügen. Wir können die Top-Klausel in der INSERT INTO SELECT-Anweisung verwenden. In der folgenden Abfrage wird die oberste 1 Zeile aus der Employees-Tabelle in die Customers-Tabelle eingefügt.

1
2
3
4
5
6

INSP TOP (1) IN Kunden
(Emp_ID,
Name
)
SELECT ID, Name
FROM Mitarbeiter;

Beispiel 4: Einfügen mit beiden Spalten und definierten Werten in Die SQL-Anweisung INSERT INTO SELECT

In früheren Beispielen haben wir entweder bestimmte Werte in der Anweisung INSERT INTO angegeben oder INSERT INTO SELECT verwendet, um Datensätze aus der Quelltabelle abzurufen und in die Zieltabelle einzufügen.

In der SQL-Anweisung INSERT INTO SELECT können sowohl Spalten als auch definierte Werte kombiniert werden.

Wir haben die folgenden Spalten in der Tabelle Kunden und Mitarbeiter. Bisher haben wir keine Werte für die Spalte „Stadt“ eingefügt. Wir haben auch nicht die erforderlichen Werte in der Employee-Tabelle. Wir müssen einen expliziten Wert für die Spalte „Stadt“ angeben.

In der folgenden Abfrage haben wir einen Wert für die Stadt angegeben Spalte, während der Rest der Werte aus der Employees-Tabelle eingefügt wurde.

1
2

INSERT TOP (1) IN Kunden (Emp_ID, Name, Stadt)
SELECT ID, Name, „Delhi“ VON Mitarbeitern;

In der folgenden Abfrage wird eine eingefügt Zeile (aufgrund der Top (1) -Klausel) zusammen mit dem Wert für die City-Spalte.

Beispiel 5: INSERT INTO SELECT Anweisung mit Join-Klausel zum Abrufen von Daten aus mehreren Tabellen

Wir können eine JOIN-Klausel verwenden, um Daten aus mehreren Tabellen abzurufen. Diese Tabellen werden mit Bedingungen verknüpft, die in der ON-Klausel angegeben sind. Angenommen, wir möchten Daten aus mehreren Tabellen abrufen und in eine Tabelle einfügen.

In diesem Beispiel verwende ich die AdventureWorks2017-Datenbank. Erstellen Sie zunächst eine neue Tabelle mit den entsprechenden Datentypen.

Diese Tabelle sollte Datensätze aus der Ausgabe einer Join-Abfrage für mehrere Tabellen enthalten. Führen Sie die folgende Abfrage aus, um Daten in die Tabelle HumanResources.EmployeeData einzufügen.

Beispiel 6: INSERT INTO SELECT-Anweisung mit Common Table Expression

Wir verwenden Common Table Expressions (CTE), um komplexe Verknüpfungen aus mehreren Spalten zu vereinfachen. Im vorherigen Beispiel haben wir JOINS in einer Select-Anweisung zum Einfügen von Daten in eine SQL-Tabelle verwendet. In diesem Teil werden wir die Abfrage mit CTE neu schreiben.

In einem CTE können wir Code in zwei Teile teilen.

  1. Wir definieren CTE durch eine WITH-Klausel vor der Anweisung SELECT, INSERT, UPDATE, DELETE
  2. Sobald wir den CTE definiert haben, können wir den CTE ähnlich einer relationalen SQL-Tabelle referenzieren.

Führen Sie den folgenden Code aus, um Daten mit einem CTE einzufügen.

Beispiel 7 : INSERT INTO SELECT-Anweisung mit einer Tabellenvariablen

Wir verwenden Tabellenvariablen ähnlich einer temporären Tabelle. Wir können sie mit dem Tabellendatentyp deklarieren. Diese Tabelle kann verwendet werden, um Aktivitäten in SQL Server auszuführen, für die keine permanente Tabelle erforderlich ist. Sie können die folgende Abfrage in drei Teile unterteilen.

  1. Erstellen Sie eine SQL-Tabellenvariable mit den entsprechenden Spaltendatentypen. Wir müssen den Datentyp TABLE für die Tabellenvariable verwenden.
  2. Führen Sie eine INSERT INTO SELECT-Anweisung aus, um Daten in eine Tabellenvariable einzufügen.
  3. Zeigen Sie die Ergebnismenge der Tabellenvariablen an.

Schlussfolgerung

In diesem Artikel werden die Anwendungsfälle der Anweisung INSERT INTO SELECT untersucht. Ich hoffe, Sie fanden diesen Artikel hilfreich. Fühlen Sie sich frei, Feedback in den Kommentaren unten zu geben.

  • Autor
  • Letzte Beiträge
Als MCSA-zertifiziert Rajendra ist Microsoft Certified Trainer in Gurgaon, Indien. Mit 13 Jahren Erfahrung arbeitet er für eine Vielzahl großer Unternehmen, die sich auf Strategien und Implementierung zur Leistungsoptimierung, Überwachung, Hochverfügbarkeit sowie Notfallwiederherstellung konzentrieren. Er ist Autor von Hunderten maßgeblicher Artikel zu SQL Server, Azure, MySQL, Linux, Power BI, Leistungsoptimierung, AWS / Amazon RDS, Git und verwandten Technologien, die bisher von über 10 Millionen Lesern angesehen wurden.
Mit seiner 50-teiligen Serie zu SQL Server Always On Availability Groups ist er der Schöpfer einer der größten kostenlosen Online-Artikelsammlungen zu einem einzigen Thema. Aufgrund seines Beitrags zur SQL Server-Community wurde er mit verschiedenen Preisen ausgezeichnet, darunter der renommierte „Beste Autor des Jahres“ in den Jahren 2020 und 2021 bei SQLShack.
Raj ist immer an neuen Herausforderungen interessiert, wenn Sie also Beratung benötigen Hilfe zu jedem Thema, das in seinen Schriften behandelt wird, kann unter [email protected] erreicht werden.
Alle Beiträge von Rajendra Gupta anzeigen

Neueste Beiträge von Rajendra Gupta (alle anzeigen)
  • Durchführen kleinerer und größerer Versions-Upgrades für AWS RDS SQL Server – 29. Januar 2021
  • Bereitstellen von AWS RDS PostgreSQL-Instanzen – 27. Januar 2021
  • Migrieren Ihrer lokalen SQL-Datenbanken zu AWS RDS SQL Server mithilfe von AWS DMS – 25. Januar , 2021

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.