Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Grundkurs 2: Aufgaben und Lösungen

Lösung zu Beispiel 2 mit MySQL

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Für Interessierte an der MySQL-Syntax ist die Erläuterung der Lösung zu Beispiel 2 in diesem Video zu finden.

Transkript

In diesem Video zeige ich Ihnen die Lösung für das zweite DDL-Beispiel unter MySQL. Es geht um das Erstellen der Tabelle "Rechnungen" sowie "Rechnungspositionen". Was die Lösung vom MySQL von der vorherigen von Oracle und MS SQL so unterscheidet, ist ja, dass wir hier auf die Check-Constraints verzichten müssen. Ansonsten ist die Lösung sehr ähnlich und fast ident. Auch hier habe gerade noch einmal diesen neuen dritten Status "(3, 'bezahlt')" oder vierter, wenn man es als Anzahl nimmt, ergänzt, damit wir ihn auch hier in der Tabelle zur Verfügung haben. Da bin ich irgendwo angestoßen, das lösche ich jetzt hier gleich heraus. Hier haben wir also die "CREATE TABLE"-Anweisung, die die erste Tabelle "wawi.rechnungen" erzeugt. "renr" – "int" gleicher Datentyp, wie beim Microsoft SQL Server, "datum" als "datetime" mit dem Defaultwert "NOW", um die aktuelle Zeit hier zu übergeben. "kunde" auch als "int" definiert, weil das eben so, wenn wir einen Blick in die Kundentabelle werfen, sehen, dass die Kundennummer hier als integer definiert ist. Das heißt, der Fremdschlüssel muss denselben Datentyp bekommen. "rech_adresse" und "lief_adresse" haben wir im vorigen Beispiel als integer definiert. Der "rabatt" als "numeric", um vier Vorkomma-, eine Nachkommastelle mit dem Defaultwert "0" zu definieren. Auch "DEFAULT" ist jetzt hier kein Constraint, so wie wir es vom SQL-Server kennen, deshalb nur mit dem Zusatz "DEFAULT" definiert, genauso wie "NOT NULL". "bearbeiter" als integer, als zukünftiger Fremdschlüssel zur Personaltabelle. Und der "status", das ist auch ein Begriff, der in einem anderen Zusammenhang verwendet wird, deshalb macht der Editor das blau. Das darf uns jetzt hier aber nicht stören. "tinyint" auch mit "1" vorbelegt und die "bemerkung". Den Primärschlüssel habe ich jetzt hier auf Tabellenebene definiert, da wir ja gesehen haben, wenn ich ihn auf Spaltenebene definieren würde, könnte ich nur "PRIMARY KEY" hinschreiben und nicht den sauberen Namen für das Constraint vergeben. Ich führe diese Anweisungen also aus. Ich sehe den Output und dass diese Tabelle erzeugt wurde. Jetzt kommen hier die entsprechenden Alter-Table-Anweisungen, die die Fremdschlüssel hier ergänzen. Einerseits den zur Kundentabelle, dann die zwei für die Adressen, den Bearbeiter zu Personaltabelle und auch hier den "status". Die Syntax kennen wir ja schon. "ALTER TABLE", Name der Tabelle, "ADD" und dann das Constraint in derselben Syntax, als würden wir jetzt auf Tabellenebene definieren. Der Constraint-Name "fk_", Ursprungstabelle, Zieltabelle. Das ist die typische Form – könnte natürlich auch abweichen – so wie wir es hier machen müssen, da wir zwei Fremdschlüssel zur selben Tabelle haben, die müssen sich ja im Namen unterscheiden, "FOREIGN KEY", was der Foreign Key ist, "status", "bearbeiter" und so weiter, "REFERENCES" und die Zieltabelle und in Klammern die entsprechenden Spalten. Das ist alles so, wie wir es kennen, und ich führe jetzt diese Anweisungen der Reihe nach aus, die erste, die zweite, die dritte, die vierte und die fünfte und habe jetzt diese Fremdschlüssel erzeugt. Nachdem die Rechnungstabelle fertig ist, das Gleiche für die Rechnungspositionen. Auch hier die Datentypen, so wie wir es auch vom Microsoft SQL Server von der Nomenklatur her kennen. integer für die Rechnungsnummer tiny integer für die Positionsnummer, "artikel", "bezeichnung", "menge", "preis", auch hier nachempfunden für den Währungsdatentyp. Und "tinyint" für die Mehrwertsteuer und hier auf Tabellenebene definiert, der Primärschlüssel. Dieses Mal muss es ja so sein und nicht nur deshalb, damit wir einen Namen vergeben können. Schon allein deshalb, da zwei Spalten den Primärschlüssel bilden und die zwei Fremdschlüssel bilden. Einerseits die Rechnungsnummer zur Rechnungstabelle und die Spalte "artikel" zur Artikelnummer der Artikeltabelle. Auch diese Anweisung führe ich aus und wir sehen hier, dass die Tabelle erzeugt wurde. Abschließend wählen wir uns einen Mitarbeiter aus der Personaltabelle aus, der der Abteilung "VK", "Verkauf", angehört, und verwende diese als Fremdschlüsseleintrag für den "bearbeiter". "rabatt" – fünf Prozent, "lief_adresse" – "1" und Kundennummer "136". Die Lieferadresse haben wir im vorigen Beispiel vergeben und die Rechnungsnummer habe ich manuell einfach mit diesem Wert hier definiert. Also, ich füge diese eine Zeile ein und kontrolliere das Ergebnis. Wir sehen jetzt hier, dass dieser Eintrag hier vorgenommen worden ist. Um auch eine Position zu ergänzen, lese ich diese Information aus der Artikeltabelle aus. Ich nehme hier fix die Rechnungsnummer und die Positionsnummer und schreibe die Artikelnummer, die ich vergeben will, hinein. Ich könnte natürlich auch Englisch hineinschreiben nachdem ich sie in der "WHERE"-Klausel stehen habe. Dann habe ich gleich die Spalte genommen, um zum Namen des Artikels, zur "bezeichnung" den Text zum Sonderpreis zu ergänzen Dann habe ich hier mit der Concat-Funktion die zwei zusammengehängt. Als Menge habe ich hier "2", den "vkpreis" lese ich mir aus der Tabelle aus, ebenso den Mehrwertsteuersatz. Diese Anweisung führe ich jetzt aus, um auch diese Zeile hier einzufügen. Jetzt habe ich natürlich nicht aufgepasst, was ich jetzt hier genau markiert habe. Das führe ich jetzt noch einmal so aus. Jetzt hat es funktioniert, jetzt habe ich hier falsch markiert im Editor. Sie sehen, man muss also immer wieder aufpassen, wenn man Anweisungen in unterschiedlichen Editoren mit verschiedenen Tastenkombinationen markiert und ausführt. Ich kontrolliere das Ergebnis und sehe hier den eingefügten Datensatz für die Rechnungsposition. Damit haben wir auch unter MySQL das zweite Beispiel erfolgreich absolviert. Wir haben zwei Tabellen mit den entsprechenden Fremdschlüsseln erzeugt, und anschließend auch Testdaten, in diese Tabelle eingefügt. Achten Sie bei MySQL darauf, dass Sie, wenn Sie zum Beispiel einen Primärschlüssel über die erweiterte Syntax definieren wollen mit dem Zusatz Constraint und dem Namen des Constraints, das ist nur auf Tabellenebene und im Anschluss mit einer Alter-Table-Anweisung machen können. Auf Spaltenebene können Sie nur die verkürzte einfache Form verwenden.

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!