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 2 mit Oracle

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Manche Details unterscheiden sich für Oracle-Benutzer. Welche das sind, sehen Sie in der Erläuterung der Lösung zu Beispiel 2.

Transkript

In diesem Video zeige ich Ihnen die Lösung für das zweite DDL-Beispiel mit Oracle umgesetzt. Hier waren ja die Rechnungs- und die Rechnungspositionstabelle zu erstellen. Auch hier erfasse ich vorweg noch über die Tabelle "Status" einen neuen Eintrag um auch den Zahlstatus später mal abbilden zu können, und bestätige das mit einem "COMMIT". Dann haben wir diesen Wert hier in der Tabelle. Nun widmen wir uns dem Erstellen der zwei Tabellenrechnungen und Rechnungspositionen. Ich erzeuge hier mit der Anweisung "CREATE TABLE" die entsprechende Tabelle, Rechnungsnummer definiere ich als "number" und definiere hier gleich auf Spaltenebene den Primärschlüssel. Das Datum mit dem Datentyp "date" versehe ich hier mit dem Defaultwert "SYSDATE", dem aktuellen Datum, genauer genommen der aktuellen Systemzeit. Und auch hier das "NOT NULL" jetzt als Constraint, wie wir es bei einem anderen Beispiel schon gesehen haben, bei Oracle umgesetzt "nn" für "NOT NULL", "_rechnungen_datum NOT NULL". "kunde" als "number", das ist auch wichtig, dass ich den Fremdschlüssel-Datentyp hier verwende, so wie wir hier sehen, die "NUMBER" für die Kundennummer in der Kundentabelle vergeben, damit das zusammenpasst. Dasselbe gilt für "rech_adresse" und "lief_adresse", die wir im ersten Beispiel erstellt haben. "rabatt" als "number(4,1)", als "NOT NULL" und mit dem Standardwert "0" versehen, bedeutet, dass wir hier maximal einen Wert von genauer genommen 999,9 eingeben können, aber auf jeden Fall dreistellig, weil eben mehr als 100 Euro nicht möglich sind. Das soll man dann über einen Check-Constraint einschränken, dass ich nicht mehr als 100 Prozent Rabatt geben kann. Dann der "bearbeiter" auch hier der Datentyp ausgelesen von der Personaltabelle, weil hier ein Fremdschlüssel noch erstellt werden wird und der "status", der auch hier eben nur "number(1,0)" sein kann. Wir haben eine Vorkommastelle, mehr als 1–9 brauchen wir nicht, und der auch als Fremdschlüssel verwendet werden wird. Und die "bemerkung", 500 Zeichen mit "varchar" als Datentyp, wie es bei Oracle üblich ist. Ich führe diese Anweisungen aus, das habe ich jetzt gemacht und Sie sehen, das passiert manchmal. Jetzt habe ich hier etwas gemacht, was es schon gibt, das heißt, ich habe hier diese Tabelle Rechnungen und Rechnungspositionen in einer vorigen Übung noch nicht gelöscht. Das mache ich nun. Die Rechnungspositionen gibt es noch nicht. Die Rechnungen lösche ich jetzt. Jetzt sehen Sie, jetzt ist sie weg. Was ich auch immer mache, wenn ich so einen Fehler bekommen habe, ich lösche hier die Ausgabe, weil es sonst immer verwirrend ist, wenn die alte Fehlermeldung stehenbleibt. Jetzt kann ich diese Anweisung nun so, wie sie hier steht, ausführen und habe die Tabelle erstellt. Wie auch beim SQL-Server habe ich jetzt hier die entsprechenden Constraints im Anschluss hier stehen. Die Syntax ist jetzt hier eigentlich ident. Ich erzeuge jetzt hier einmal ein Check-Constraint, dass der Rabatt nur einem Wert von 0–100 entsprechen kann. Hier den Fremdschlüssel zu den Kunden. Nun auch noch den Fremdschlüssel zu den Adressen, und zwar hier einmal für die Rechnungsadresse. Für die gilt dasselbe, wie beim Microsoft SQL Server, dass ich hier darauf achte, wo ich zwei Fremdschlüssel zur selben Tabelle mit unterschiedlichen Spalten habe, dass ich hier auch in den Namen der Constraints unterscheide. Dann hier den Fremdschlüssel für die Personalnummer, der auf die entsprechende Tabelle verweist, eben der "(bearbeiter) REFERENCES wawi.personal(persnr)", so wie wir es kennen und gewohnt sind, und hier noch den Fremdschlüssel für den Status. Ich habe diese alle ergänzt und damit ist die erste, die Rechnungstabelle, fertig. Die Rechnungspositionen eigentlich auch wieder sehr ähnlich, ich muss wieder auf die Datentypen achten. Die "renr" als "number" definiert, "pos" – "(2,0)", das heißt, das kann von der Größe maximal 99 Positionen pro Bestellung geben, denn "tinyint" wie ich beim Microsoft SQL Server verwendet habe oder auch bei MySQL verwendet wird, gibt es hier ja nicht, deshalb dieser Wert. "artikel", der Fremdschlüssel als "number", und die "bezeichnung" maximal hundertstellig. Die "menge" auch hier mit "DEFAULT 1" definieren, als "NOT NULL" – die "NOT NULL" sind immer als saubere Constraints definiert. Der "preis", für den es hier bei Oracle keinen Währungsdatentypen "money" gibt, der nachempfunden wird mit "(10, 4)" als "number", das heißt sechs Vorkomma-, vier Nachkommastellen, und ähnliches für die Mehrwersteuer. Dann haben wir hier die Constraints, hier der zusammengesetzte Primärschlüssel, der deshalb unbedingt auf Tabellenebene definiert werden muss und nicht auf Spaltenebene definiert werden kann. Die zwei Fremdschlüssel zu Rechnungen und Artikel und am Schluss hier das Check-Constraint, das festlegt, dass der Preit positiv sein muss. Ich lösche hier wieder einmal den Output, bevor ich diese Tabelle erzeuge. Auch hier lese ich wieder aus, welche Mitarbeiter es gibt, bevor ich mich für eine Mitarbeiternummer für die Spalte "bearbeiter" entscheide, Ich füge jetzt hier in die "wawi.rechnungen" entsprechende Werte ein, so wie wir es schon beim SQL-Server gesehen haben, und führe die Anweisung aus. Ich habe jetzt eine Zeile eingefügt. Hier die Kontrolle, dass dieser Wert jetzt auch wirklich hier in der Tabelle steht. Hier nun die Rechnungspositionen, auch hier lese ich vorweg aus der Tabelle "Artikel" die Werte aus. Ich verwende hier die doppelte Pipe, um zur Bezeichnung den Text "zum Sonderpreis" zu ergänzen bevor ich ihn einfüge, führe nun die Anweisung aus und kontrolliere hier nun auch das Ergebnis. Da ist jetzt diese entsprechende Rechnungsposition eingefügt. Passen sie also bei Oracle auf, dass Sie hier die doppelte Pipe als Konkatenierungsoperator verwenden, dass Defaultwerte keine Constraints sind, aber "NOT NULL". Und wenn Sie möchten, können Sie es mit dem Zusatz "CONSTRAINT nn" und dem weiteren Constraint-Namen vorweg sauber definieren. Nachdem es ja nur "number" bei Oracle als numerischen Datentyp gibt, werden halt Währungsdatentypen und andere, die es bei anderen Systemen gibt, alle mit diesem hier abgebildet. Das ist eben die Lösung des zweiten Beispiels unter Oracle.

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!