SQL Grundkurs 1: Die Sprache erlernen

Einfügen mit Unterabfragen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Beim Anlegen eines neuen Kunden soll die nächste freie Kundennummer eruiert und gleich mit eingetragen werden? Dann verwenden Sie eine Unterabfrage, welche diese berechnet, und platzieren Sie diese in der VALUES-Klausel. Sehen Sie in diesem Video, wie Sie dazu vorgehen und was Sie bei MySQL noch speziell berücksichtigen müssen.

Transkript

Unterabfragen zum Einfügen neuer Datensätze verwenden. Das ist Thema dieses Videos. Ich habe hier bereits eine Anweisung vorbereitet, die einen neuen Kundendatensatz in die Kundentabelle einfügen soll. Ich möchte nun allerdings, dass da als Kundennummer hier die nächste freie Kundennummer vom System automatisch gewählt und eingefügt wird. Dazu kann ich eine Unterabfrage verwenden. Die nächste freie Kundennummer würde ich ja mit der Anweisung bekommen: select from wawi.kunden. Und ich hole mir die größte Kundennummer und erhöhe sie um eins. Das wäre die Anweisung, mit der ich die nächste freie Kundennummer eruieren kann. In dem Fall wäre das die Kundennummer 143. Damit ich diese Kundennummer direkt hier beim Einfügen des Datensatzes mit übergeben kann, verwende ich diese Anweisung hier als Unterabfrage. Natürlich muss ich diese Unterabfrage hier wieder in runde Klammern setzen und kopiere sie mir hier herein. Ich werde hier jetzt die weiteren Spalten dann in einer neuen Zeile einfügen, damit das Ganze möglichst übersichtlich bleibt. Wenn ich also nun diese Anweisung ausführe, dann wird in einem Aufwaschen sozusagen, Zug um Zug, einerseits die neue, größte Kundennummer eruiert und danach sofort mit dem neuen Datensatz mit eingefügt. Ich führe also die Anweisung aus und bekomme hier die Meldung eine Zeile ist eingefügt worden. Kontrollieren wir nun gleich das Ergebnis: select*from wawi.kunden where Kundennummer <= 143, damit wir auch nachfolgende Einfügungen dann gleich mit der selben Anweisung kontrollieren können. Und wir sehen, Mustermann Max ist jetzt hier. Man muss jetzt natürlich eines berücksichtigen. Diese Anweisung liefert immer die nächste freie Kundennummer und damit ist diese auch gültig. Das bedeutet, wenn ich dieselbe Anweisung aus Versehen, oder aus welchem Grund auch immer, wiederhole, dann habe ich jetzt den Max Mustermann als Dublette eingefügt. Da ja jeweils die nächste freie Kundennummer genommen wird und es zu keiner Primärschlüssel-Verletzung kommt. Das heißt, ich führe jetzt die Anweisung hier aus. Und noch einmal und noch einmal und noch einmal. Und wenn ich jetzt meine Einfügungen hier kontrolliere, dann sehen wir, dass wir jetzt massenhaft Dubletten in unserer Datenbank generiert haben. Darauf sollten wir achten. Der große Vorteil dieser Variante ist aber, dass immer die nächste freie Kundennummer verwendet wird, egal ob der eine Vorgang erfolgreich bleibt oder nicht. Diese Variante können Sie natürlich auch bei den anderen Datenbank-Management-Systemen verwenden. Versuchen wir das Ganze einmal bei unserem Microsoft SQL Server. Kontrollieren wir kurz, ob hier auch 143 die nächste freie Kundennummer wäre. Ja, das ist der Fall. Also kann ich diese Anweisung ausführen. Aber natürlich auch mehrmals hintereinander. Und jetzt habe ich hier exakt drei Mal einen neuen Kunden eingefügt. Abschließend betrachten wir das Ganze nun noch unter MySQL. Ich kopiere mir hier die Anweisung herein. Die ein oder andere Anpassung werden wir hier allerdings vornehmen müssen. Schauen wir uns einmal an, was passiert, wenn ich diese Anweisung hier ausführe. Dann bekommen wir hier eine Fehlermeldung: field Erfasst doesn't have a default value. Wir haben ja bei den anderen Datenbank-Systemen keinen Wert für die Spalte Erfasst eingegeben, weil hier in der Struktur ein Standardwert definiert ist. In der Beispielvariante für MySQL ist das leider nicht der Fall. Das hängt damit zusammen, dass MySQL in der vorliegenden Version Standardwerte, die auf einem Ausdruck mit Funktionen, also keinem statischen Ausdruck basieren, noch nicht unterstützt. Daher müssen wir hier explizit noch beim Eingeben zusätzlich das Erfasst-Datum ergänzen. Das mache ich nun. Ich ergänze diese Spalte und verwende hinten noch zum Beispiel die Funktion Now, um den aktuellen Zeitpunkt einzufügen. Allerdings wird noch eine kleine Anpassung notwendig sein. Wir bekommen jetzt noch eine Fehlermeldung. Das hängt damit zusammen, dass MySQL es nicht unterstützt, dass man Unterabfragen mit Values kombiniert. Das selbe Phänomen gab es bei älteren Microsoft SQL Server Versionen, dafür gibt es aber einen einfach work around. Nämlich man verwendet anstelle der Values-Klausel einfach ein Select. Man kann ja ein Select mit statischen Werten auch realisieren, ich muss nur dann hier hinten diese schließende Klammer auch entfernen, weil ich ja dann diese Klammern wie bei Values nicht habe. Und zum Test. Ich kann ja diesen Teil hier markieren und einmal gesondert ausführen, dann sehen wir, dieses Select liefert uns genau diese Werte und die würden wir dann einfügen. Und das mache ich nun auch. Ich führe diese Gesamtanweisung nun aus. Jetzt sollte es funktioniert haben. Und wir sehen hier auch: one row is affected. Das heißt, eine Zeile eingefügt. Und wenn wir die Kontrolle hier wieder vornehmen, dann sehen wir, dass dieser Datensatz nun enthalten ist. Ähnlich wie bei den anderen kann ich jetzt auch mehrmals hintereinander diese Anweisung ausführen und habe dann auch mehrere Duplikat-Datensätze hier erfasst mit diesem Mustermann Max. In diesem Video haben Sie gesehen, wie Sie mit einer Unterabfrage dynamisch einen Wert eruieren können, den Sie einem Insert-Statement danach direkt übergeben. Achten Sie darauf, dass Sie bei MySQL, im Unterschied zu Oracle und zum Microsoft SQL Server, dann nicht die Values-Klausel, sonder ein Select verwenden müssen, da wir sonst einen Fehler bekommen. Achten Sie darauf es gibt auch den Unterschied von der Struktur der Datenbank dass MySQL keine default Werte unterstützt, die auf einem dynamischen Ausdruck basieren.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!