Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 1: Die Sprache erlernen

Tabellenübergreifendes Update

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Muss es immer gleich sein? Dieses Video zeigt Ihnen die unterschiedliche Syntax, die der MS SQL Server, Oracle und MySQL verwenden, um Daten mit Inhalten aus einer verknüpften Tabelle zu aktualisieren.

Transkript

In diesem Kapitel sehen Sie, wie Sie ein synchronisiertes "UPDATE" realisieren können. Dafür bedienen sich unsere drei Datenbanksysteme MySQL, Microsoft SQL Server und Oracle unterschiedlicher Syntax-Varianten. Sehen wir uns als erstes die Variante von MySQL an. Was ist überhaupt mit einem synchronisierten "UPDATE" gemeint? Synchronisiertes "UPDATE" bedeutet, dass man ein "UPDATE" aufgrund einer Information aus einer anderen Tabelle realisiert. Stellen Sie sich folgende Situation vor: Wir haben hier Bestellpositionen zu einer Bestellung hinzugefügt. Und haben hier zum Beispiel nicht die gültigen Einkaufspreise übernommen. Und möchten jetzt nachträglich die aktuell gültigen Einkaufspreise einspielen. Diese können wir aufgrund der Artikelnummer, die in der Spalte Artikel zu finden ist, aus der Artikeltabelle auslesen. Das heißt wir joinen über die Artikelnummer zu den Artikeln und kopieren uns den aktuellen Einkaufspreis aus der Artikeltabelle in diese Preisspalte. Sowas nennt man ein synchronisiertes "UPDATE". Damit wir besser erkennen können, dass sich hier wirklich etwas ändert, verwende ich den pragmatischen Weg: Ich lösche einfach alle Preise heraus, indem ich sie zuerst einmal auf "0" update. Das heißt momentan haben wir bei der Bestellung mit der Bestellnummer "8" keinen einzigen gültigen Preis. Alles ist hier "0". Wie kann ich nun das "UPDATE" hier realisieren? Wie gewohnt beginnt die Anweisung mit "UPDATE", in dem Fall "Wave.Bestellpositionen". In MySQL wird hier direkt bei der UPDATE-Anweisung schon ein JOIN verwendet. Deshalb vergebe ich hier direkt auch einen Tabellenaliasnamen "P" und ergänze jetzt schon meine JOIN-Bedingungen, indem ich vorher sage "INNER JOIN Wave.Artikel mit dem Tabellenaliasnamen A on P.Artikel" so heißt die Spalte in der Tabelle "Bestellpositionen"- "ist gleich A.Artikelnummer". Jetzt geht die UPDATE-Anweisung weiter wie gewohnt, D.h. ich verwende mein Set und sage der "P.Preis", D.h. das ist der Preis in der Bestellposition, soll als neuen Wert den aktuellen "A.EK-Preis", den aktuellen Einkaufspreis bekommen. Natürlich brauche ich auch eine WHERE-Klausel, damit wir nicht alle Bestellpositionen ändern: "WHERE P.Bestellnummer ist gleich unsere 1008". Es ändert sich also nicht allzu viel hier in der Syntax der UPDATE-Anweisung. Lediglich dieser JOIN kommt hier direkt zum "UPDATE"dazu. Nun führe ich diese Anweisung aus -- und kontrollieren wir das Ergebnis in der Tabelle -- und nun haben wir hier überall wieder den aktuellen Preis hier übernommen. Gehen wir nun weiter und betrachten uns die Unterschiede zur Syntax beim Microsoft SQL Server. Sie sehen schon an den roten Wellenlinien hier, teilweise unter der Syntax, dass diese Syntax nicht exakt dieselbe ist. wenn Sie bei dem Microsoft SQL-Server so ein synchronisiertes "UPDATE" realisieren möchten, müssen Sie hier nach dem Set eine FROM-Klausel einbauen, D.h. "FROM" und ich verschiebe sozusagen diesen ganzen JOIN-Teil, ich schneide ihn hier aus, hinter das "FROM". Ich könnte jetzt hier "Wave Bestellpositionen" in die UPDATE-Klausel hineinschreiben oder schlichtweg einfach nur den Tabellenaliasnamen "P" verwenden. Damit hätte ich schon sämtliche Änderungen hier vollzogen, D.h. der Unterschied ist nicht allzu groß, die Grundlogik ist dieselbe: ich brauche einen JOIN. Nur wird der JOIN nicht direkt in der UPDATE-Klausel realisiert, sondern in einer zusätzlichen FROM-Klausel und gleicht insofern absolut in der Syntax dem JOIN bei einem SELECT-Statement. Bevor wir diese Anweisung ausführen, werde ich natürlich auch hier die Kontrolle machen. Noch steht hier ein Preis drinnen. Mit dieser UPDATE-Anweisung werde ich auch hier vorläufig einmal alle Preise entfernen. Nun haben wir hier keinen Preis drinstehen. Und jetzt verwende ich das synchronisierte "UPDATE", um die aktuellen Artikelpreise Sie sehen die Anweisung hat funktioniert hier wieder einzutragen. Und schon habe ich wieder die Preise hier in der Tabelle stehen. Betrachten wir uns nun abschließend noch die für Oracle benötigte Syntax. Diese unterscheidet sich in der Logik der Umsetzung von den bisher gesehenen Varianten. Während wir bei dem MySQL und dem Microsoft SQL Server einen JOIN verwendet haben müssen wir bei Oracle eine synchronisierte Unterabfrage einsetzen. Denn hier ist ein JOIN bei einer UPDATE-Anweisung nicht vorgesehen und deshalb nicht möglich. Ich beginne also wie gewohnt mein "UPDATE": "UPDATE Wave.Bestellpositionen SET Preis =" hier fehlt dann noch der Wert, der kommt dann gleich hinzu. Ich definiere vorweg einmal meine WHERE-Klausel. "WHERE Bestellnummer = 1008". Wie bekommen wir nun hier unseren aktuellen Preis aus der Artikeltabelle? Wir können keinen JOIN machen, also machen wir hier ein synchronisierte Unterabfrage. Eine synchronisierte Unterabfrage bedeutet eine Unterabfrage, in der wir auf einen Wert in der Hauptabfrage, in dem Fall ist es die UPDATE-Anweisung, verweisen. Also verwende ich hier meine Unterabfrage: "SELECT FROM" oben aus der Artikeltabelle, in dem ich hier schreibe "Wave.Artikel" den aktuellen Verkaufspreis auszulesen. Und jetzt muss ich einen Bezug zur Artikeltabelle herstellen, damit ich hier in der Unterabfrage den korrekten Verkaufspreis hier verwende: "WHERE" in dem Fall "Artikelnummer = Artikel". In diesem Fall könnte ich das hier so stehen lassen, da wir keine Namensgleichheit bei den Spalten mit der Artikelnummer haben. In der Artikeltabelle lautet der Name "Artnr" und in den Bestellpositionen "Artikel". Aber, damit wir das hier sauber realisieren, werde ich hier dennoch die Tabellennamen voransetzen. Nachdem der sehr lang ist, kann ich hier natürlich wieder einen Tabellenaliasnamen vergeben, d.h. hier in der äußeren Abfrage zum Beispiel "P" für die Bestellpositionen und hier in der inneren Abfrage "A" für Artikel. Und jetzt kann hier diese Präfixe in der WHERE-Klausel ergänzen: "WHERE A.Artnr = P.Artikel". D.h. ich verwende hier diese synchronisierte Unterabfrage, die mir bei jeder Zeile aus der Artikeltabelle den entsprechenden Preis holt, indem die Artikelnummer aus dieser Zeile, die grade von der UPDATE-Anweisung behandelt wird, übergeben wird an die Unterabfrage. Wiederum löschen wir, bevor wir die Anweisung ausführen, alle Preise aus den Bestellpositionen heraus, kontrollieren das noch und wir sehen: Momentan überall Preis ist "0". Nun führe ich dieses synchronisierte "UPDATE" mit der Unterabfrage aus. Ich bekomme hier die Rückmeldung vom Datenbankmanagementsystem, dass acht Zeilen aktualisiert worden sind, D.h. das dürfte alles richtig und sauber funktioniert haben. Kontrollieren wir das Ganze noch. Und schon sehen wir, dass hier die Preise wieder auftauchen. In diesem Video haben Sie gesehen, wie Sie über ein synchronisiertes "UPDATE" Werte aus einer anderen Tabelle in eine Tabelle einspielen. Bei Oracle verwenden Sie dazu die Form einer synchronisierten Unterabfrage, beim Microsoft SQL Server und bei MySQL verwenden Sie dazu einen JOIN, den Sie in der UPDATE-Anweisung mit verwenden. Bei MicrosoftSQL erfolgt der JOIN direkt in der UPDATE-Klausel, beim Microsoft SQL Server geschieht der JOIN in einer eigenen FROM-Klausel innerhalb der UPDATE-Anweisung.

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!