INSERRT Statements - Data Manipulation Language (SQL-DML)

https://oer-informatik.de/sql-dml-insert

tl/dr; Insert-Statements sind zuständig dafür, neue Datensätze in die Tabellen einzufügen. Als Datenquelle können Literale oder SELECT-Statements dienen. (zuletzt aktualisiert am 21.05.2023)

Die Data Manipulation Language (DML) ist zuständig für die Veränderungen der Inhalte von Tabellen, im Gegensatz zur Data Definition Language, die die Struktur der Tabellen definiert.

Allgemeine Form des INSERT-Statements

Ein SQL-INSERT-Statement wird in der allgemeinen Form folgendermaßen notiert:

Beispiel:

Die vereinfachte Syntax lässt sich mit ihren Optionalitäten und Wiederholungen in folgendem Railroad-Diagramm darstellen:

Railroad-Diagramm für INSERT
Railroad-Diagramm für INSERT

Alle Namen der einzufügenden Attribute werden in Klammern kommagetrennt gelistet. Die Attributwerte werden in der zweiten Klammer in identischer Reihenfolge - bei Zeichenfolgen in Anführungszeichen - gelistet.

Umgang mit Default-Werten

Alle Attribute, die nicht explizit in der Attributliste genannt werden, werden mit NULL-Werten befüllt, sofern kein DEFAULT-Wert in der Tabellendefinition (DDL) angegeben wurde.

Sofern dieses Verhalten explizit ausgedrückt werden soll (oder die Kurzschreibweise gewählt wurde) kann als zu speichernder Wert DEFAULT angegeben werden:

Umgang mit NULL

In der Informationstechnik wird zwischen leeren Feldern (leere Zeichenketten), dem Wert 0 und nichts (NULL) unterschieden. Für alle drei Varianten “nichts” einzufügen gibt es eine SQL-Notation:

Die einzelnen DBMS bieten Möglichkeiten, direkt spezielle Werte (heutiges Datum, Benutzername, …) anzugeben.

Einfügen mehrerer Datensätze

Es können mehrere Datensätze mit einem Befehl übergeben werden, denn die in Klammern eingefassten Datensätze kommagetrennt aneinandergefügt werden:

Einfügen der Daten aus einer Abfrage

Sofern bereits Tabellen mit den gesuchten Daten vorhanden sind lässt sich auch direkt das Ergebnis einer SELECT-Abfrage in die neue Tabelle per Subquery einfügen.

Wichtig ist nur, dass die Struktur und Reihenfolge der Felder des SELECT-Statements exakt der Attributliste des INSERT-Statements entspricht. Natürlich kann das Select-Statement auch komplexer aufgebaut sein.

Sollten die Strukturen (Reihenfolge der Attribute) in beiden Tabellen identisch sein, lässt es sich über eine Kurzform noch weiter vereinfachen:

Attributnamen in Ausnahmefällen obsolet

Sofern die Attributwerte im INSERT-Statement in exakt der Reihenfolge genannt werden, in der Sie per SQL-DDL festgelegt wurden, kann die Liste der Attributnamen auch weggelassen werden. Die Reihenfolge kann man z.B.: mit DESCRIBE tabellenname nachschlagen. Nicht alle DBMS unterstützen diese Kurzform, zudem ist sie fehleranfällig. Daher sollte sie nur in begründeten Ausnahmefällen genutzt werden.

Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieses Werk und dessen Inhalte sind - sofern nicht angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “INSERRT Statements - Data Manipulation Language (SQL-DML)” von H. Stein (oer-informatik.de), Lizenz: CC BY 4.0. Die Quellen dieses Werks sind verfügbar auf https://gitlab.com/oer-informatik/db-sql/dml-basics.

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: