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 2: Aufgaben und Lösungen

Lösung zu Beispiel 1 mit MySQL

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Für Anwender von MySQL wird die Lösung für das Beispiel 1 in diesem Video erläutert.

Transkript

In diesem Video zeige ich Ihnen, wie Sie die Lösung für das erste DDL-Beispiel, das Erstellen der Tabelle "wawi.adressen", mit MySQL umsetzen. Da wir ja den Fremdschlüssel zur Kundentabelle benötigen, werfen wir gleich mal einen Blick hier in die Struktur der Tabelle und sehen, dass die Kundennummer hier als Datentyp integer vergeben ist. Das ist deshalb wichtig, damit wir denselben Datentyp für den Fremdschlüssel verwenden. Auch hier haben wir die Möglichkeit, Constraints auf Spaltenebene oder auch auf Tabellenebene zu definieren. Wir müssen ein bisschen aufpassen, wenn wir von der gewohnten Syntax vom MS SQL Server oder Oracle kommen, dass wir hier ein paar Dinge anders berücksichtigen müssen. Prinzipiell habe ich die Anweisung so, wie wir sie bereits gesehen haben, vorbereitet. Ich habe die einzelnen Spalten und die Datentypen als integer, Sie sehen hier, die gleichen Bezeichnungen der Datentypen, wie wir sie beim Microsoft SQL Server verwendet haben. Für den Standardwert habe ich hier die Funktion "NOW" verwendet. Auch hier, so wie wir es bei Oracle gesehen haben, werden Standardwerte nicht als Constraint implementiert, deshalb direkt "DEFAULT" und den Wert. Das Gleiche bei "aktuell", "DEFAULT 1", um zu definieren, dass diese Spalte vom Datentyp "bit" standardmäßig diesen Wert erhält. Jetzt habe ich hier anstelle "IDENTITY" so war das Schlüsselwort beim Microsoft SQL Server, den Zusatz "AUTO_INCREMENT" ergänzt. Das erzeugt mir bei MySQL eine fortlaufende Nummerierung für die Spalte "adressen". Sie sehen auch hier, dass jetzt Fehler schon angezeigt werden. Woher kommt das jetzt? Wir haben jetzt hier zusätzlich einen Constraint definiert, wie wir es gewohnt sind. Jetzt ist Folgendes: MySQL ist da etwas wählerischer, wenn man so möchte, nämlich kann ich ein Constraint auf Spaltenebene nur in der kurzen Syntax verwenden. Das heißt, würde ich jetzt diesen Teil hier weglassen, und einfach nur hier "PRIMARY KEY" hinschreiben, würde das funktionieren. Und das ist sozusagen das Problem, was wir jetzt hier haben. Was ich natürlich auch machen könnte, ist, ob das jetzt so sinnvoll ist, sei dahingestellt, das ist Geschmackssache, ich könnte jetzt hier sozusagen ein Komma eingeben, und definiere damit das Constraint separat, ähnlich wie wenn ich es auf Tabellenebene mache. Ich muss natürlich dann hier hinten noch ergänzen, dass das Ganze die Adressnummer betrifft. Da das jetzt ein Zusatz ist, würde das nicht funktionieren. Das Gleiche jetzt auch hier bei meinem Fremdschlüssel, auch hier entsprechend ein Komma, um das abzutrennen, und muss natürlich jetzt hier auch zusätzlich noch definieren, welche Spalte betroffen ist, nämlich die Spalte "kunde". Dann kann ich auch hier sozusagen diese Variante so festlegen. Ob das jetzt wirklich noch auf der Spaltenebene oder schon eher von der Syntax her auf Tabellenebene ist, das kann man sich jetzt selber aussuchen. Warum habe ich das Check-Constraint hier von der Syntax auskommentiert? Weil ja momentan von der verwendeten MySQL Version Check-Constraints noch nicht unterstützt werden und deshalb müssen wir auf die Implementierung derselben hier leider verzichten. Ich führe jetzt diese Anweisung aus, blende hier unten noch "Action Output" ein, damit wir das Ergebnis hier auch gleich sehen, und bekomme jetzt hier "0 row(s) affected", natürlich weil keine Zeilen betroffen sind, aber ein grünes Häkchen heißt, diese Tabelle ist erzeugt worden. Sie enthält jetzt natürlich auch keine Daten, ich kann aber jetzt schon mit einem "SELECT" natürlich auf diese Tabelle zugreifen, damit wir sehen, die Tabelle gibt es jetzt wirklich, wenn auch noch in leerer Form. Schöner finde ich es hier, wenn wir die Constraints auf Tabellenebene definieren. Deshalb verwende ich auch hier die Anweisung "DROP TABLE", um die gerade erzeugte Tabelle noch einmal zu löschen. Was ändert sich jetzt hier? Ich habe jetzt hier meinen Primärschlüssel und Fremdschlüssel an das Ende der Anweisung verschoben. Die Syntax ist jetzt eigentlich gleich geblieben, wie wir sie letztendlich hier gehabt haben, aber ich finde diese Variante persönlich als die übersichtliche, weil ich jetzt nicht gemischt habe, Spalten, Constraint und wieder Spalten. Das ist natürlich Geschmackssache, wenn es Ihnen besser gefällt, wenn das Constraint direkt hinter der betroffenen Spalte steht, dann ist das natürlich individuell so machbar. Sie sollten die Anweisungen nur so schreiben, wie sie für Sie am besten lesbar und interpretierbar sind. Sonst ist hier alles gleich geblieben, ich habe meine Defaultwerte und so weiter. Auch hier das Check-Constraint lösche ich jetzt gleich heraus, da es hier ohnenhin keine Bedeutung mehr haben wird, das können wir hier nicht verwenden, und ich führe diese Anweisung jetzt hier aus. Und so habe ich die Tabelle wieder erzeugt. Und auch hier gibt es als dritte Variante die Möglichkeit Constraints danach zu ergänzen. Deshalb lösche ich jetzt ein weiteres Mal die Tabelle, um sie noch einmal neu zu erzeugen. Allerdings haben wir hier einen Sonderfall, mit dem nachher Erzeugen, das ist so eine Sache, nämlich aufgrund des Auto Increments. Prinzipiell kann ich ja mit der Syntax "AUTO_INCREMENT PRIMARY KEY" einen Primärschlüssel, der eben automatisch vergeben wird, hier definieren. Ich kann hier nur die kurze Syntax verwenden, würde ich die erweiterte verwenden, wie vorhin erwähnt auf Spaltenebene würden wir einen Syntaxfehler bekommen. Deshalb lasse ich diese Variante jetzt weg. Ich lösche jetzt noch einmal die Tabelle, kommentiere, wie wir es vorhin schon hatten, diesen Zusatz hier einmal aus und erzeuge diese Tabelle auf diese Art und Weise. Wir haben jetzt also keinen Primärschlüssel und keinen Fremdschlüssel. Die Syntax zum nachträglichem Ergänzen ist eigentlich ident, wie wir sie vom Microsoft SQL Server und Oracle gesehen haben, "ALTER TABLE", Name der Tabelle, "ADD" und anschließend die erweiterte Syntax, wie wir sie auf Tabellenebene verwendet haben. Also mit dieser Anweisung ergänze ich jetzt hier einmal den Primärschlüssel, und in dieser Anweisung den Fremdschlüssel an die Kundennummer bei der Kundentabelle ausgehend von der Spalte "kunde" in meiner Tabelle. Damit habe ich diese Constraints jetzt hier erzeugt. Jetzt habe ich gerade vorhin erwähnt, ein kleines Problem bekommen wir hier mit dem Primärschlüssel – Warum? Ich habe jetzt zwar nachträglich einen Primärschlüssel ergänzt mit dieser Anweisung, aber diese Spalte nicht als Auto Increment definiert. Dazu müsste ich nämlich "AUTO INCREMENT" und "PRIMARY KEY" gemeinsam machen. Die Frage stellt sich, ob das Sinn macht. Jein, ich lösche jetzt noch einmal mit der Anweisung "DROP PRIMARY KEY" hier den Primärschlüssel, also diesen Primärschlüssel habe ich jetzt gelöscht. Und mit dieser Anweisung könnte ich jetzt ein Auto Increment erzeugen, könnte aber anschließend nicht den Primärschlüssel, ich müsste das mit "PRIMARY KEY" hier automatisch machen. Und dann muss ich wieder die verkürzte Syntax verwenden. Ich kann das zwar jetzt so nicht machen, aber im Primary Key schon. Und dann habe ich wieder die verkürzte Syntax. Das ist jetzt einfach so eine Sache, ob ich das möchte oder nicht. Am sinnvollsten wird es hier wahrscheinlich sein, in dieser Variante immer von vornherein schon die Primärschlüssel zu definieren. Also solange Sie keinen Auto Increment verwenden, ist diese dritte Variante hier in der sauberen Form schon möglich, aber wie gesagt, Auto Increment erfordert die verkürzte Syntax in dieser Form, alle anderen Varianten führen zu einem Fehler. Aber letztendlich haben wir jetzt auch hier eine saubere Adressentabelle bekommen und auch hier habe ich die Anweisungen, um die entsprechenden Adressen hier einzufügen. Also ich füge einmal hier die erste Adresse ein und wir sehen jetzt, dass diese in dieser Variante hier enthalten ist. Was wir jetzt hier machen können, auch unter MySQL ist es jetzt möglich, dass ich in der entsprechenden Version mit Komma getrennt hier am Ende der ersten Values-Auflistung mehrere Werte auf einmal einfüge. Das mache ich jetzt hier einmal in dieser Anweisung. Das ist jetzt Geschmackssache, ob ich das separat oder gemeinsam mache, und schreibe das einmal mit "COMMIT" fest. Ich habe standardmäßig bei mir dieses Auto-Commit deaktiviert, deshalb mache ich es hier mit Anweisung. Und wir betrachten uns jetzt hier diese drei Ergebniszeilen. Die finden wir jetzt hier vor. Und auch hier die Kontrolle dieser Werte gejoint mit der Kundentabelle, da sehen wir, zu den einzelnen Kunden in dem Fall zwei Adressen für die Petra Deutschmann und eine für die Ursula Sauber. Also auch bei MySQL können wir Constraints prinzipiell auf Spaltenebene definieren, allerdings mit Komma getrennt, wenn wir in der erweiterten Form arbeiten möchten. Check-Constraints gibt es hier nicht. Ich empfehle Ihnen, diese Variante hier bei MySQL, die macht aus meiner Sicht noch am meisten Sinn. Auch hier können Sie mit Values – wichtig ist hier, nicht übersehen, ich mache hier einen Scroll nach rechts, damit Sie sehen, nach dem ersten kommt hier ein Komma und das Semikolon erst nach dem letzten Eintrag – unter MySQL mehrere Werte eintragen. Wenn Sie eine Tabelle nicht mehr benötigen, können Sie auch unter MySQL mit der Anweisung "DROP TABLE" diese löschen. Das macht man typischerweise allerdings nur beim Testen am Anfang so wie wir das gemacht haben.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

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!