BWL Datenbanksysteme Dozent Mohamed Naji [email protected] http://iba-nuernberg.fu-academy.de http://www.naji.net16.net http://infonaji.comlu.com 19. Oktober 2016 Internationale Berufsakademie (IBA) der F+U Unternehmensgruppe gGmbH University of Cooperative Education Vorwort Jedes Kapitel enthält eine Vielzahl von Beispielen und Aufgaben mit Lösungen, die das Gefühl für die Beherrschung und die Anwendbarkeit des fachlichen Kernstoffes stärken sollen. In vielen Fällen werden nur die Grundideen einer Lösung vorgestellt. Die fehlende Vorführung soll ein Anreiz für die Studierenden sein, sich diese selbst zu überlegen. Studieren bedeutet ja, eigenständig (unter Anleitung) Problemlösungsideen zu verstehen, anzuwenden und weiter zu entwickeln Zuhören bzw. das Lehrbuch lesen und Verstehen ist zwar wichtig, aber der Vorlesungsstoff anhand von Aufgaben selber machen und einüben ist noch viel wichtiger. Im Vergleich: Wenn Sie die Linksdrehung beim Tangotanzen lernen wollen, brauchen Sie jemanden, der Ihnen zeigt, wie’s geht und auf was es ankommt, aber Sie werden es nur durch viel eigenes Üben lernen und mit dem Vorlesungsstoff ist es genauso. Die Vorlesung macht nur die Tür auf zum Selbststudium. An den Hausaufgaben üben Sie nicht nur Begriffe, Konstruktionen und Konzepte der Vorlesung ein, Sie trainieren auch Ihre Problemlösefähigkeiten und das Übertragen von Lösungsstrategien aus einem Problemfeld in ein anderes, vornehm ausgedrückt den Transfer. Ganz wichtig auch: Richtiges Formulieren erwirbt man nicht allein durch Zuschauen, es muss durch eigenes Versuchen gelernt werden. Deswegen sollten Sie zwar mit anderen über den Vorlesungsstoff kommunizieren (das müssen Sie Ihr ganzes Leben lang tun), aber anschliessend müssen Sie selbständig und alleine Ihre Aufgaben aufschreiben. Im Vorlesungsstoff gibt es zwischen Unverständnis und Verständnis kaum Zwischenstufen. Ein Problem verursacht entweder Panik oder ist trivial, ein von Studenten häufig benutztes Wort. In vielen Fällen führt ein gutes Beispiel, aber vor allem ein selber gelöstes Problem, plötzlich zu einem grossen Fortschritt im Verständnis. Deswegen sind Übungsaufgaben zusammen mit Hilfen zur Lösung so wichtig für das Studium. Und: Sie dürfen sich nicht daran stören, wenn die Übungsaufgaben zu einfach sind. Das zeigt doch nur, das Sie bis jetzt über den Berg sind und sich die Bemerkung trivial erlauben können. Für andere ist dasselbe Problem ein Albtraum. Seien Sie ehrlich mit sich selber und lügen Sie sich nicht an, indem Sie sich vorgaukeln, die Aufgaben vollständig verstanden zu haben, obwohl Sie einen Lösungsweg „nur“nachvollzogen haben. Sie sind aus dem Sammler– und Jäger–Zeitalter heraus. Heutzutage wird entdeckt und entwickelt. Als zukünftiger Absolvent werden Sie entwickeln müssen und nicht nur nachlesen, was andere vor Ihnen bereits herausgefunden haben. Weiter möchte ich Sie auffordern, immer dann Fragen zu stellen, wenn Sie etwas nicht mehr verstehen. Sie müssen wissen, dass nur diejenigen, die auch etwas begreifen, Fragen stellen. Ich gehe davon aus, dass die Umkehrung dieser Aussage auch zutrifft. Berechnungen und Konstruktionen werden überwiegend mit Softwarewerkzeugen durchgeführt. Dadurch steht die Vermittlung von Rechenschemata und Rechentricks heute nicht mehr im Vordergrund. Computer machen den Stoff aber nicht überflüssig, im Gegenteil: Das Kapital des Studiums liegt im Verständnis des Lehrstoffs. Das Wissen über die Modellierung und die Kenntnis unterschiedlicher Berechnungsverfahren sowie die Fähigkeit zu einer souveränen Interpretation der Ergebnisse I zeichnen einen guten Absolventen aus. „Die Gesetze der Natur sind in der Sprache der Mathematik geschrieben.“(Galileo Galilei) Um die Lesbarkeit des Textes zu verbessern, wurde die äussere Form strukturiert: Definitionen, Sätze, Beispiele, Bemerkungen, Korollare, Lemmata und Propositionen sind in jedem erststelligen Unterkapitel ohne Rücksicht auf den Typ fortlaufend durchnummeriert. So folgen in Unterkapitel 2.3 nacheinander Beispiel 2.3.1, Bemerkung 2.3.2, Definition 2.3.3 usw. Formeln, Gleichungen, Tabellen, Algorithmen und Abbildungen sind fortlaufend durchnummeriert und zwar mit Rücksicht auf deren Typ und deren Unterkapitel. Zahlen in eckigen Klammern beziehen sich auf das Literaturverzeichnis am Schluss. ferner gelten die folgenden Typografische Konventionen: Zitaten und Aussagen sind Schräggestellt. Eigennamen z.B. von Personen werden in serifenlose Schrift gekennzeichnet. Schlüsselwörter und <tags> sind fett gedruckt. Kapitälchen Schrift wird verwendet für • Klassen– und methodenNamen • Pfad–, Datei–, Tool–, Firmen– und Programmnamen • Attributen–, Domain–, Variablen– und Packetnamen, Datenbanken, Datentypen, Umgebungsvariablen, Tags und Anweisungen kursive Schrift wird verwendet für • Neue Begriffe, die definiert werden • Betonungen im Fliesstext Schreibmaschinenschrift (also tt = Teletyper = Fernschreiber) wird verwendet für • Kommandozeilen und Optionen, die wörtlich eingetippt werden sollen • Erzeugte Ausgabe einer zuvor gemachten Eingabe oder eines erstellten Programms. externe Links z.B. zu einer Website sind in dieser Farbe markiert. . Im Symbolverzeichnis im Kapitel 56 ab Seite 193 sind viele Symbole auf einen Blick aufgelistet. im Kapitel Personverzeichnis habe ich die Geburts– und Todesjahre einiger bedeutender Mathematiker, Informatiker, Physiker, Chemiker, Wirtschaftler, Statistiker und anderer Wissenschaftler aufgelistet, die Sie von Zeit zu Zeit in diesem Skriptum finden werden. Damit haben Sie die Möglichkeit, sich ein Bild von der historischen Abfolge wissenschaftlicher Entdeckungen machen zu können. Auf der sehr interessanten Seite http://www-gap.dcs.st-and.ac.uk/~history/BiogIndex.html finden sich auch zahlreiche biografische Angaben zu den meisten berühmten Mathematikern. Viele Informatiker sind unter http://de.wikipedia.org/w/index.php?title=Kategorie:Informatiker zu finden Einige muslimische Wissenschaftler sind unter https://en.wikipedia.org/wiki/List_of_Muslim_scientists zu finden und noch ein Hinweis: Das Skriptum begleitet die Vorlesung, aber es soll sie nicht ersetzen. Die Hinweise vieler Leserinnen und Leser auf Fehler und Verbesserungsmöglichkeiten waren für mich sehr wertvoll. Oft existieren auch noch Schreibfehler, welche zu Verwechselungen führen können (z.B. w statt ω bzw. x1 statt x1 ). Da ich allerdings damit rechnen muss, dass trotz aller Sorgfalt der Fehlerteufel nicht untätig geblieben ist, danke ich schon jetzt allen Leserinnen und Lesern für entsprechende Korrekturhinweise, konstruktive Kritik oder Verbesserungsvorschläge, z.B. per Email ([email protected]). Als Textverarbeitung wurde eine LATEX-version (MikTex) eingesetzt. Inhaltsverzeichnis Vorwort . . . . . . . . . . . . . . . . . . . . . . . . Inhaltsverzeichnis . . . . . . . . . . . . . . . . . . Abbildungsverzeichnis . . . . . . . . . . . . . . . . Tabellenverzeichnis . . . . . . . . . . . . . . . . . . Listings . . . . . . . . . . . . . . . . . . . . . . . . 1 Datenbankentwicklung . . . . . . . . . . . 1.1 Der erste Versuch . . . . . . . . . . . . . 1.2 die erste Normalform 1NF . . . . . . . . . 1.3 die zweite Normalform 2NF . . . . . . . . 1.4 die dritte Normalform 3NF . . . . . . . . 1.5 kompletter Entwurf der Datenbanken . . . 1.6 Datenbankschema . . . . . . . . . . . . . 1.7 Zusammenfassung . . . . . . . . . . . . . 1.8 Vorteile und Grenzen der Normalisierung . 3 xampp . . . . . . . . . . . . . . . . . . . 3.1 Installation . . . . . . . . . . . . . . . . . 3.2 XAMPP starten . . . . . . . . . . . . . . 3.3 Datenbank anlegen . . . . . . . . . . . . . 3.4 Tabellen in Datenbank anlegen . . . . . . 3.5 Tabellen mit Daten füllen . . . . . . . . . 3.6 Exportieren . . . . . . . . . . . . . . . . . 3.7 Importieren . . . . . . . . . . . . . . . . . 3.8 Daten manipulieren . . . . . . . . . . . . 3.9 Abfrageergebnisse in einer Datei umleiten 4 Datenbanken über xampp . . . . . . . . . 4.1 Tabellen in Datenbank anlegen . . . . . . 4.2 Tabellen mit Daten füllen . . . . . . . . . 4.3 Exportieren . . . . . . . . . . . . . . . . . 4.4 Importieren . . . . . . . . . . . . . . . . . 4.5 Daten manipulieren . . . . . . . . . . . . 12 Tabellentypen (Storage–Engines) . . . . . 12.1 Einführung . . . . . . . . . . . . . . . . . 13 Datentypen . . . . . . . . . . . . . . . . . 13.1 Numerische Typen . . . . . . . . . . . . . 13.1.1 Ganze Zahlen . . . . . . . . . . . . . . . 13.1.2 Fliess– und Festkommazahlen . . . . . . . 13.2 Datum und Uhrzeit . . . . . . . . . . . . . 13.2.1 DATE . . . . . . . . . . . . . . . . . . . . 13.2.2 TIME . . . . . . . . . . . . . . . . . . . . 13.2.3 DATETIME/TIMESTAMP . . . . . . . . 13.2.4 YEAR . . . . . . . . . . . . . . . . . . . 13.3 Zeichenkette . . . . . . . . . . . . . . . . 13.3.1 CHAR . . . . . . . . . . . . . . . . . . . 13.3.2 VARCHAR . . . . . . . . . . . . . . . . . 13.3.3 TEXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III IV VII VIII IX 1 1 16 21 24 26 29 29 29 31 31 39 42 44 49 52 55 57 57 60 60 64 67 70 72 73 73 75 75 75 75 75 75 75 75 75 76 76 76 76 13.4 13.5 13.6 13.7 13.8 19 19.1 19.2 19.3 19.4 19.5 19.6 19.7 19.8 19.9 19.10 19.11 20 20.1 20.2 21 21.1 21.2 21.3 21.4 21.5 21.6 21.7 21.8 25 25.1 25.2 26 26.1 26.2 26.3 26.4 26.5 27 27.1 27.2 28 28.1 28.2 29 29.1 29.2 29.3 29.4 29.5 30 30.1 30.2 30.3 30.4 30.5 Binärdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ENUMs und SETs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Geometrieobjekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nullwerte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datenbankstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabellenanlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Erlaubte Zeichen und Namenslänge . . . . . . . . . . . . . . . . . . . . . . . . Gross- und Kleinschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . Konventionen zur Namenvereibarungen . . . . . . . . . . . . . . . . . . . . . . Tabellenstruktur abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Spalte in einer Tabelle hinzufügen, ändern, entfernen . . . . . . . . . . . . Tabelle kopieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Typ der Tabelle ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabelle leeren, löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabelle prüfen und reparieren . . . . . . . . . . . . . . . . . . . . . . . . . . . ganze Datenbank löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Primärschlüssel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Primärschlüssel über mehrere Spalten . . . . . . . . . . . . . . . . . . . . . . . Referenzielle Integrität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Foreign–Key–Regeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INSERT und Referenzielle Integrität . . . . . . . . . . . . . . . . . . . . . . . UPDATE und Referenzielle Integrität . . . . . . . . . . . . . . . . . . . . . . . DELETE und Referenzielle Integrität . . . . . . . . . . . . . . . . . . . . . . . INSERT und Referenzielle Integrität bei selbstreferenzierenden Fremdschlüssel UPDATE und Referenzielle Integrität bei selbstreferenzierenden Fremdschlüssel DELETE und Referenzielle Integrität bei selbstreferenzierenden Fremdschlüssel Wirkung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mathematical Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abfragen mit Bezug zu einer Tabelle verwenden . . . . . . . . . . . . . . . . . Date Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abfragen ohne Bezug zu einer Tabelle verwenden . . . . . . . . . . . . . . . . Abfragen mit Bezug zu einer Tabelle verwenden . . . . . . . . . . . . . . . . . Formatierungsfunktionen von Datum . . . . . . . . . . . . . . . . . . . . . . . Datum mit Formatierungsfunktionen zerlegen . . . . . . . . . . . . . . . . . . Datum mit String–Funktionen zerlegen . . . . . . . . . . . . . . . . . . . . . . Time Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abfragen ohne Bezug zu einer Tabelle verwenden . . . . . . . . . . . . . . . . Uhrzeiten und Sekunden ineinander konvertieren . . . . . . . . . . . . . . . . . String-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . REPLACE und Co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abfragen mit Bezug zu einer Tabelle verwenden . . . . . . . . . . . . . . . . . Statistische Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Berechnung deskriptiver Statistiken . . . . . . . . . . . . . . . . . . . . . . . . Gruppenbezogene deskriptive Statistiken . . . . . . . . . . . . . . . . . . . . . Generierung von Häufigkeitsverteilungen . . . . . . . . . . . . . . . . . . . . . Berechnung linerarer Regression . . . . . . . . . . . . . . . . . . . . . . . . . Kurze SQL–Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alle Zeilen einer Tabelle anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . Spalten auswählen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inhaltlich gleiche Zeilen von der Ausgabe ausschliessen . . . . . . . . . . . . . Spalten mit NULL–Werten abfragen . . . . . . . . . . . . . . . . . . . . . . . Spalten mit Leerzeichen abfragen . . . . . . . . . . . . . . . . . . . . . . . . . V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 77 77 77 77 79 79 79 80 81 82 83 83 87 88 88 89 90 90 91 92 92 93 95 99 99 101 102 103 112 112 113 115 115 118 118 120 121 123 123 123 125 125 128 130 130 130 132 134 137 139 139 140 140 140 143 30.6 Zeilen mit einer Bedingung auswählen . . . . . 30.7 Zeilen mit verbundenen Bedingungen auswählen 30.8 SELECT und Variablen . . . . . . . . . . . . . 30.9 SELECT . . . INTO–Anweisung . . . . . . . . . 31 Datensätze sortieren (ORDER BY) . . . . . . . 31.1 Einführung . . . . . . . . . . . . . . . . . . . . 31.2 ORDER BY und CONCAT . . . . . . . . . . . 31.3 ORDER BY und FIND_IN_SET . . . . . . . . 31.4 Sortieren mit Ausdrücken . . . . . . . . . . . . 31.5 Sortieren nach numerischen Platzhaltern . . . . 41 GROUP BY und Aggregatfunktionen . . . . . . 41.1 COUNT() . . . . . . . . . . . . . . . . . . . . 41.2 MIN() und MAX() . . . . . . . . . . . . . . . . 41.3 AVG() und STDDEV() . . . . . . . . . . . . . . 41.4 GROUP BY bei mehreren Spalten . . . . . . . . 41.5 Mehrere COUNT–Abfragen mit einer Abfrage . 41.6 GROUP BY Clause . . . . . . . . . . . . . . . 51 CROSS JOIN . . . . . . . . . . . . . . . . . . . 51.1 Einführung . . . . . . . . . . . . . . . . . . . . 51.2 Anwendung . . . . . . . . . . . . . . . . . . . 51.3 GROUP BY in JOIN . . . . . . . . . . . . . . . 51.4 HAVING in JOIN . . . . . . . . . . . . . . . . 52 NATURAL JOIN . . . . . . . . . . . . . . . . . 52.1 Einführung . . . . . . . . . . . . . . . . . . . . 52.2 Anwendung . . . . . . . . . . . . . . . . . . . 52.3 GROUP BY in JOIN . . . . . . . . . . . . . . . 52.4 HAVING in JOIN . . . . . . . . . . . . . . . . 53 INNER JOIN . . . . . . . . . . . . . . . . . . . 53.1 Einführung . . . . . . . . . . . . . . . . . . . . 53.2 Anwendung . . . . . . . . . . . . . . . . . . . 53.3 GROUP BY in JOIN . . . . . . . . . . . . . . . 53.4 HAVING in JOIN . . . . . . . . . . . . . . . . 54 LEFT OUTER JOIN . . . . . . . . . . . . . . . 54.1 Einführung . . . . . . . . . . . . . . . . . . . . 54.2 Anwendung . . . . . . . . . . . . . . . . . . . 54.3 GROUP BY in JOIN . . . . . . . . . . . . . . . 54.4 HAVING in JOIN . . . . . . . . . . . . . . . . 55 RIGHT OUTER JOIN . . . . . . . . . . . . . . 55.1 Einführung . . . . . . . . . . . . . . . . . . . . 55.2 Anwendung . . . . . . . . . . . . . . . . . . . 55.3 GROUP BY in JOIN . . . . . . . . . . . . . . . 55.4 HAVING in JOIN . . . . . . . . . . . . . . . . Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . 56 Symbolverzeichnis . . . . . . . . . . . . . . . . Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . Personverzeichnis . . . . . . . . . . . . . . . . . . . . . VI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 145 146 146 147 147 149 151 153 154 155 155 156 156 157 158 158 159 159 159 167 167 168 168 168 169 169 170 170 170 176 176 177 177 177 183 184 185 185 185 191 191 192 193 204 205 Abbildungsverzeichnis 1.6.0.1 UML universitaet_nf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.1.0.1 3.1.0.2 3.1.0.3 3.1.0.4 3.1.0.5 3.1.0.6 3.1.0.7 3.1.0.8 3.2.0.1 3.2.0.2 3.2.0.3 3.3.0.1 3.3.0.2 3.4.0.1 3.4.0.2 3.4.0.3 3.4.0.4 3.4.0.5 3.5.0.1 3.5.0.2 3.5.0.3 3.6.0.1 3.6.0.2 3.6.0.3 3.7.0.1 3.7.0.2 3.9.0.1 3.9.0.2 bild0020.eps . bild0021.eps . bild0022.eps . bild0023.eps . bild0024.eps . bild0025.eps . bild0026.eps . bild0027.eps . xampp001.eps xampp002.eps xampp003.eps xampp004.eps xampp005.eps xampp006.eps xampp007.eps xampp008.eps xampp009.eps xampp010.eps xampp011.eps xampp012.eps xampp013.eps xampp014.eps xampp015.eps xampp016.eps xampp017.eps xampp018.eps bild0310.eps . bild0311.eps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 4.1.0.1 4.1.0.2 4.1.0.3 4.1.0.4 4.1.0.5 4.2.0.1 4.2.0.2 4.2.0.3 4.3.0.1 4.3.0.2 4.3.0.3 4.4.0.1 4.4.0.2 xampp006.eps xampp007.eps xampp008.eps xampp009.eps xampp010.eps xampp011.eps xampp012.eps xampp013.eps xampp014.eps xampp015.eps xampp016.eps xampp017.eps xampp018.eps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 61 62 63 64 65 66 67 68 69 70 71 72 VII Tabellenverzeichnis 1.1.0.1 1.2.0.1 1.3.0.1 1.3.0.2 1.3.0.3 1.4.0.1 1.4.0.2 1.5.0.1 1.5.0.2 1.5.0.3 1.5.0.4 Kommiliton 0NF . . Kommiliton 1NF . . Kommiliton Ort 2NF Veranstaltung 2NF . Besucht 2NF . . . . Kommiliton 3NF . . Ort 3NF . . . . . . . Kommiliton . . . . . Ort . . . . . . . . . Veranstaltung 2NF . Besucht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2.0.1 19.3.0.1 Einige MySQL reservierte Wörter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Gross- und Kleinschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 41.6.0.1 Operatoren und Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 56.0.0.1 Notationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 VIII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 20 22 23 24 25 25 26 26 27 28 Listings 21.1 universitaet.sql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 IX Kapitel 1 Datenbankentwicklung Herr S. Tudent möchte einige Informationen über eine paar Mitstudenten EDVmässig speichern. Sein Ziel ist es, eine kleine Datenbank zu erstellen, in der Daten über Studenten gespeichert werden: Name, Geburtsdatum und PLZ (inkl. geographische Breite und Länge) des Studenten sowie die Veranstaltungen mit Arbeitsform und Wahlpflichtfach WPF, die jedes Studenten besucht. 1.1 Der erste Versuch Diese Daten können natürlich ganz ohne Datenbank gespeichert werden; in einer einfachen Liste im Textformat, wie Sie im folgenden Beispiel finden: • Kommiliton 1 ◦ anrede: Herr ◦ vorname: Adhelm ◦ nachname: Kirch ◦ geburtsDatum: ◦ Veranstaltung 1 ⋄ bezeichnung: Gestaltung ⋄ arbeitsform: Kolloqium ⋄ wpf: Gast ◦ Veranstaltung 2 ⋄ bezeichnung: Stochastik ⋄ arbeitsform: Vorkurs ⋄ wpf: Wahlfach ◦ Veranstaltung 3 ⋄ bezeichnung: Psychologie ⋄ arbeitsform: Seminar ⋄ wpf: Wahlfach ◦ Ort ⋄ plz: D-91256 ⋄ geoBreite: -19.425000 ⋄ geoLaenge: -39.261200 • Kommiliton 2 1 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ◦ anrede: Herr ◦ vorname: Apo ◦ nachname: Kohlund ◦ geburtsDatum: 1991-09-22 ◦ Veranstaltung 1 ⋄ bezeichnung: Drucktechnik ⋄ arbeitsform: Vorlesung ⋄ wpf: ◦ Veranstaltung 2 ⋄ bezeichnung: Mechanik ⋄ arbeitsform: Seminar ⋄ wpf: Pflichtfach ◦ Veranstaltung 3 ⋄ bezeichnung: Simulation Methods in Physics II ⋄ arbeitsform: Hauptseminar ⋄ wpf: Gast ◦ Ort ⋄ plz: D-25970 ⋄ geoBreite: -37.366800 ⋄ geoLaenge: -36.139400 • Kommiliton 3 ◦ anrede: Frau ◦ vorname: Ayan Sibel ◦ nachname: Maika ◦ geburtsDatum: 1992-12-11 ◦ Veranstaltung 1 ⋄ bezeichnung: Biochemie ⋄ arbeitsform: Kolloqium ⋄ wpf: Gast ◦ Veranstaltung 2 ⋄ bezeichnung: formale Sprachen ⋄ arbeitsform: Hauptseminar ⋄ wpf: ◦ Veranstaltung 3 ⋄ bezeichnung: Maschinenbau ⋄ arbeitsform: Vorbereitungs-kurs ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-25970 ⋄ geoBreite: -37.366800 ⋄ geoLaenge: -36.139400 • Kommiliton 4 2 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ◦ anrede: Herr ◦ vorname: Bent ◦ nachname: Chevi ◦ geburtsDatum: 1997-10-08 ◦ Veranstaltung 1 ⋄ bezeichnung: VWL ⋄ arbeitsform: Tutorium ⋄ wpf: Wahlfach ◦ Veranstaltung 2 ⋄ bezeichnung: Gestaltung ⋄ arbeitsform: Kolloqium ⋄ wpf: ◦ Veranstaltung 3 ⋄ bezeichnung: Stochastik ⋄ arbeitsform: Vorkurs ⋄ wpf: ◦ Ort ⋄ plz: D-93754 ⋄ geoBreite: -46.817700 ⋄ geoLaenge: -36.168500 • Kommiliton 5 ◦ anrede: Herr ◦ vorname: Borck ◦ nachname: Teufel ◦ geburtsDatum: 1995-03-06 ◦ Veranstaltung 1 ⋄ bezeichnung: formale Sprachen ⋄ arbeitsform: Hauptseminar ⋄ wpf: Pflichtfach ◦ Veranstaltung 2 ⋄ bezeichnung: Gestaltung ⋄ arbeitsform: Kolloqium ⋄ wpf: Gast ◦ Ort ⋄ plz: D-25970 ⋄ geoBreite: -37.366800 ⋄ geoLaenge: -36.139400 • Kommiliton 6 ◦ anrede: Frau ◦ vorname: Branwen ◦ nachname: Schulte 3 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ◦ geburtsDatum: 1996-07-19 ◦ Veranstaltung 1 ⋄ bezeichnung: BWL ⋄ arbeitsform: Proseminar ⋄ wpf: Pflichtfach ◦ Veranstaltung 2 ⋄ bezeichnung: Mechanik ⋄ arbeitsform: Seminar ⋄ wpf: Wahlfach ◦ Veranstaltung 3 ⋄ bezeichnung: Lineare Algebra ⋄ arbeitsform: Hauptseminar ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-31281 ⋄ geoBreite: -40.981100 ⋄ geoLaenge: -43.268900 • Kommiliton 7 ◦ anrede: Frau ◦ vorname: Branwen ◦ nachname: Schulte ◦ geburtsDatum: 1987-10-23 ◦ Veranstaltung 1 ⋄ bezeichnung: VWL ⋄ arbeitsform: Tutorium ⋄ wpf: ◦ Veranstaltung 2 ⋄ bezeichnung: Physik II ⋄ arbeitsform: Kolloqium ⋄ wpf: ◦ Veranstaltung 3 ⋄ bezeichnung: Forstwirtschaft ⋄ arbeitsform: Kolloqium ⋄ wpf: Wahlfach ◦ Ort ⋄ plz: D-80765 ⋄ geoBreite: -19.459100 ⋄ geoLaenge: -25.092300 • Kommiliton 8 ◦ anrede: Herr ◦ vorname: Gerasim ◦ nachname: Quack 4 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ◦ geburtsDatum: ◦ Veranstaltung 1 ⋄ bezeichnung: Analysis 1 ⋄ arbeitsform: Kolloqium ⋄ wpf: Pflichtfach ◦ Veranstaltung 2 ⋄ bezeichnung: Lineare Algebra ⋄ arbeitsform: Hauptseminar ⋄ wpf: ◦ Veranstaltung 3 ⋄ bezeichnung: Java ⋄ arbeitsform: Praktikum ⋄ wpf: Wahlfach ◦ Ort ⋄ plz: D-93754 ⋄ geoBreite: -46.817700 ⋄ geoLaenge: -36.168500 • Kommiliton 9 ◦ anrede: Frau ◦ vorname: Gondeline ◦ nachname: Bert ◦ geburtsDatum: 1989-03-20 ◦ Veranstaltung 1 ⋄ bezeichnung: Physik II ⋄ arbeitsform: Kolloqium ⋄ wpf: Gast ◦ Veranstaltung 2 ⋄ bezeichnung: Stochastik ⋄ arbeitsform: Vorkurs ⋄ wpf: Wahlfach ◦ Veranstaltung 3 ⋄ bezeichnung: VWL ⋄ arbeitsform: Tutorium ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-80765 ⋄ geoBreite: -19.459100 ⋄ geoLaenge: -25.092300 • Kommiliton 10 ◦ anrede: Frau ◦ vorname: Heimgard ◦ nachname: Wunder 5 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ◦ geburtsDatum: 1997-09-21 ◦ Veranstaltung 1 ⋄ bezeichnung: Drucktechnik ⋄ arbeitsform: Vorlesung ⋄ wpf: Wahlfach ◦ Veranstaltung 2 ⋄ bezeichnung: Simulation Methods in Physics II ⋄ arbeitsform: Vorlesung ⋄ wpf: Pflichtfach ◦ Veranstaltung 3 ⋄ bezeichnung: Statistik I ⋄ arbeitsform: Vorlesung ⋄ wpf: Wahlfach ◦ Ort ⋄ plz: D-93754 ⋄ geoBreite: -46.817700 ⋄ geoLaenge: -36.168500 • Kommiliton 11 ◦ anrede: Herr ◦ vorname: Jack ◦ nachname: Mortimar Hahn ◦ geburtsDatum: 1988-11-17 ◦ Veranstaltung 1 ⋄ bezeichnung: Biochemie ⋄ arbeitsform: Kolloqium ⋄ wpf: Wahlfach ◦ Veranstaltung 2 ⋄ bezeichnung: VWL ⋄ arbeitsform: Tutorium ⋄ wpf: Gast ◦ Veranstaltung 3 ⋄ bezeichnung: Statistik I ⋄ arbeitsform: Vorlesung ⋄ wpf: Gast ◦ Ort ⋄ plz: D-31281 ⋄ geoBreite: -40.981100 ⋄ geoLaenge: -43.268900 • Kommiliton 12 ◦ anrede: Frau ◦ vorname: Jocelin ◦ nachname: Leon Bardot 6 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ◦ geburtsDatum: 1997-02-08 ◦ Veranstaltung 1 ⋄ bezeichnung: Maschinenbau ⋄ arbeitsform: Vorbereitungs-kurs ⋄ wpf: ◦ Veranstaltung 2 ⋄ bezeichnung: VWL ⋄ arbeitsform: Tutorium ⋄ wpf: ◦ Veranstaltung 3 ⋄ bezeichnung: Mechanik ⋄ arbeitsform: Seminar ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-91256 ⋄ geoBreite: -19.425000 ⋄ geoLaenge: -39.261200 • Kommiliton 13 ◦ anrede: Herr ◦ vorname: Joseph ◦ nachname: Cheree ◦ geburtsDatum: 1990-06-26 ◦ Veranstaltung 1 ⋄ bezeichnung: English I ⋄ arbeitsform: Tutorium ⋄ wpf: ◦ Veranstaltung 2 ⋄ bezeichnung: Lineare Algebra ⋄ arbeitsform: Hauptseminar ⋄ wpf: Gast ◦ Veranstaltung 3 ⋄ bezeichnung: Stochastik ⋄ arbeitsform: Vorkurs ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-31281 ⋄ geoBreite: -40.981100 ⋄ geoLaenge: -43.268900 • Kommiliton 14 ◦ anrede: Frau ◦ vorname: Mechtild ◦ nachname: Lehner 7 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ◦ geburtsDatum: 1997-09-08 ◦ Veranstaltung 1 ⋄ bezeichnung: Mechanik ⋄ arbeitsform: Seminar ⋄ wpf: Wahlfach ◦ Veranstaltung 2 ⋄ bezeichnung: Simulation Methods in Physics II ⋄ arbeitsform: Hauptseminar ⋄ wpf: Wahlfach ◦ Veranstaltung 3 ⋄ bezeichnung: Psychologie ⋄ arbeitsform: Seminar ⋄ wpf: ◦ Ort ⋄ plz: D-91256 ⋄ geoBreite: -19.425000 ⋄ geoLaenge: -39.261200 • Kommiliton 15 ◦ anrede: Herr ◦ vorname: Ruthard Alfrad ◦ nachname: Nieminen ◦ geburtsDatum: 1996-05-10 ◦ Veranstaltung 1 ⋄ bezeichnung: Drucktechnik ⋄ arbeitsform: Vorlesung ⋄ wpf: ◦ Veranstaltung 2 ⋄ bezeichnung: Stochastik ⋄ arbeitsform: Vorkurs ⋄ wpf: Gast ◦ Veranstaltung 3 ⋄ bezeichnung: Maschinenbau ⋄ arbeitsform: Vorbereitungs-kurs ⋄ wpf: ◦ Ort ⋄ plz: D-31281 ⋄ geoBreite: -40.981100 ⋄ geoLaenge: -43.268900 • Kommiliton 16 ◦ anrede: Herr ◦ vorname: Sieghelm ◦ nachname: Schilling 8 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ◦ geburtsDatum: 1989-10-23 ◦ Veranstaltung 1 ⋄ bezeichnung: Analysis 1 ⋄ arbeitsform: Kolloqium ⋄ wpf: ◦ Veranstaltung 2 ⋄ bezeichnung: VWL ⋄ arbeitsform: Tutorium ⋄ wpf: ◦ Veranstaltung 3 ⋄ bezeichnung: Lineare Algebra ⋄ arbeitsform: Hauptseminar ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-91256 ⋄ geoBreite: -19.425000 ⋄ geoLaenge: -39.261200 • Kommiliton 17 ◦ anrede: Herr ◦ vorname: Sieghelm ◦ nachname: Schilling ◦ geburtsDatum: 1989-12-07 ◦ Veranstaltung 1 ⋄ bezeichnung: Biochemie ⋄ arbeitsform: Kolloqium ⋄ wpf: Wahlfach ◦ Veranstaltung 2 ⋄ bezeichnung: formale Sprachen ⋄ arbeitsform: Hauptseminar ⋄ wpf: Gast ◦ Veranstaltung 3 ⋄ bezeichnung: Forstwirtschaft ⋄ arbeitsform: Kolloqium ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-33229 ⋄ geoBreite: -45.098800 ⋄ geoLaenge: -24.101100 • Kommiliton 18 ◦ anrede: Frau ◦ vorname: Sieglinde ◦ nachname: Schmidtke 9 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 10 ◦ geburtsDatum: 1989-01-12 ◦ Veranstaltung 1 ⋄ bezeichnung: Simulation Methods in Physics II ⋄ arbeitsform: Vorlesung ⋄ wpf: Pflichtfach ◦ Veranstaltung 2 ⋄ bezeichnung: BWL ⋄ arbeitsform: Proseminar ⋄ wpf: Pflichtfach ◦ Veranstaltung 3 ⋄ bezeichnung: Psychologie ⋄ arbeitsform: Seminar ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-91256 ⋄ geoBreite: -19.425000 ⋄ geoLaenge: -39.261200 • Kommiliton 19 ◦ anrede: Herr ◦ vorname: Uke ◦ nachname: Schmieder ◦ geburtsDatum: 1989-12-08 ◦ Veranstaltung 1 ⋄ bezeichnung: Gestaltung ⋄ arbeitsform: Kolloqium ⋄ wpf: Pflichtfach ◦ Veranstaltung 2 ⋄ bezeichnung: BWL ⋄ arbeitsform: Proseminar ⋄ wpf: ◦ Veranstaltung 3 ⋄ bezeichnung: Stochastik ⋄ arbeitsform: Vorkurs ⋄ wpf: Pflichtfach ◦ Ort ⋄ plz: D-25970 ⋄ geoBreite: -37.366800 ⋄ geoLaenge: -36.139400 An sich enthält solch eine Liste erforderlichen Informationen. Warum sollten Wir sich also überhaupt die Mühe machen, den Text in einer Datenbank umzuwandeln? Nun, es gibt eine Menge Gründe. Die Liste ermöglichst zwar ein einfaches Suchen, es ist aber nicht möglich, die Daten anders zu organisieren: beispielsweise um eine Teilliste aller Veranstaltungen des Studenten X zu erstellen oder die Liste nach Vornamen des Studenten zu sortieren. Die Liste wird einfach in einer Tabelle umgewandelt: Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Kommiliton anrede: Herr vorname: Adhelm nachname: Kirch geburtsDatum: anrede: Herr vorname: Apo nachname: Kohlund geburtsDatum: 199109-22 Veranstaltung 1 Veranstaltung 2 Veranstaltung 3 11 Ort • bezeichnung: Gestaltung • bezeichnung: Stochastik • bezeichnung: Psychologie • arbeitsform: Kolloqium • arbeitsform: Vorkurs • arbeitsform: Seminar • wpf: Gast • wpf: Wahlfach • wpf: Wahlfach • bezeichnung: Drucktechnik • bezeichnung: Mechanik • plz: D-25970 • arbeitsform: Vorlesung • arbeitsform: Seminar • bezeichnung: Simulation Methods in Physics II • wpf: • wpf: fach • arbeitsform: Hauptseminar • geoLaenge: -36.139400 Pflicht- • plz: D-91256 • geoBreite: -19.425000 • geoLaenge: -39.261200 • geoBreite: -37.366800 • wpf: Gast anrede: Frau vorname: Ayan Sibel nachname: Maika geburtsDatum: 199212-11 • bezeichnung: Biochemie • arbeitsform: Kolloqium • bezeichnung: formale Sprachen • arbeitsform: Hauptseminar • bezeichnung: Maschinenbau • arbeitsform: Vorbereitungskurs • wpf: Gast anrede: Herr vorname: Bent nachname: Chevi geburtsDatum: 199710-08 • wpf: • wpf: fach • bezeichnung: VWL • bezeichnung: Gestaltung • bezeichnung: Stochastik • arbeitsform: Tutorium • arbeitsform: Kolloqium • arbeitsform: Vorkurs • wpf: Wahlfach • wpf: • wpf: • plz: D-25970 • geoBreite: -37.366800 • geoLaenge: -36.139400 Pflicht- • plz: D-93754 • geoBreite: -46.817700 • geoLaenge: -36.168500 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net anrede: Herr vorname: Borck nachname: Teufel geburtsDatum: 199503-06 • bezeichnung: formale Sprachen • arbeitsform: Hauptseminar • bezeichnung: Gestaltung • plz: D-25970 • geoBreite: -37.366800 • arbeitsform: Kolloqium • geoLaenge: -36.139400 • wpf: Gast • wpf: fach anrede: Frau vorname: Branwen nachname: Schulte geburtsDatum: 199607-19 anrede: Frau vorname: Branwen nachname: Schulte geburtsDatum: 198710-23 anrede: Herr vorname: Gerasim nachname: Quack geburtsDatum: Pflicht- • bezeichnung: BWL • bezeichnung: Mechanik • arbeitsform: Proseminar • arbeitsform: Seminar • wpf: fach • wpf: Wahlfach Pflicht- • arbeitsform: Hauptseminar • wpf: fach • bezeichnung: Forstwirtschaft • arbeitsform: Tutorium • arbeitsform: Kolloqium • arbeitsform: Kolloqium • wpf: • wpf: • wpf: Wahlfach • bezeichnung: Analysis 1 • bezeichnung: Lineare Algebra • bezeichnung: Java • arbeitsform: Hauptseminar • arbeitsform: Praktikum • wpf: Wahlfach Pflicht- • plz: D-31281 • geoBreite: -40.981100 • geoLaenge: -43.268900 Pflicht- • bezeichnung: Physik II • arbeitsform: Kolloqium anrede: Frau vorname: Gondeline nachname: Bert geburtsDatum: 198903-20 • bezeichnung: Lineare Algebra • bezeichnung: VWL • wpf: fach 12 • plz: D-80765 • geoBreite: -19.459100 • geoLaenge: -25.092300 • plz: D-93754 • geoBreite: -46.817700 • geoLaenge: -36.168500 • wpf: • bezeichnung: Physik II • bezeichnung: Stochastik • bezeichnung: VWL • arbeitsform: Kolloqium • arbeitsform: Vorkurs • arbeitsform: Tutorium • wpf: Gast • wpf: Wahlfach • wpf: fach Pflicht- • plz: D-80765 • geoBreite: -19.459100 • geoLaenge: -25.092300 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net anrede: Frau vorname: Heimgard nachname: Wunder geburtsDatum: 199709-21 • bezeichnung: Drucktechnik • arbeitsform: Vorlesung • wpf: Wahlfach • bezeichnung: Simulation Methods in Physics II • arbeitsform: Vorlesung • wpf: fach anrede: Herr vorname: Jack nachname: Mortimar Hahn geburtsDatum: 198811-17 anrede: Frau vorname: Jocelin nachname: Leon Bardot geburtsDatum: 199702-08 • arbeitsform: Vorlesung • wpf: Wahlfach • bezeichnung: Biochemie • bezeichnung: VWL • bezeichnung: Statistik I • arbeitsform: Kolloqium • arbeitsform: Tutorium • arbeitsform: Vorlesung • wpf: Wahlfach • wpf: Gast • wpf: Gast • bezeichnung: Maschinenbau • bezeichnung: VWL • bezeichnung: Mechanik • arbeitsform: Vorbereitungskurs • arbeitsform: Tutorium • arbeitsform: Seminar • wpf: • wpf: fach • bezeichnung: Lineare Algebra • bezeichnung: Stochastik • bezeichnung: English I • arbeitsform: Tutorium • plz: D-93754 • geoBreite: -46.817700 • geoLaenge: -36.168500 Pflicht- • wpf: anrede: Herr vorname: Joseph nachname: Cheree geburtsDatum: 199006-26 • bezeichnung: Statistik I 13 • arbeitsform: Hauptseminar • wpf: • wpf: Gast Pflicht- • arbeitsform: Vorkurs • wpf: fach Pflicht- • plz: D-31281 • geoBreite: -40.981100 • geoLaenge: -43.268900 • plz: D-91256 • geoBreite: -19.425000 • geoLaenge: -39.261200 • plz: D-31281 • geoBreite: -40.981100 • geoLaenge: -43.268900 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net anrede: Frau vorname: Mechtild nachname: Lehner geburtsDatum: 199709-08 • bezeichnung: Mechanik • arbeitsform: Seminar • wpf: Wahlfach • bezeichnung: Simulation Methods in Physics II • arbeitsform: Hauptseminar • bezeichnung: Psychologie • arbeitsform: Seminar 14 • plz: D-91256 • geoBreite: -19.425000 • geoLaenge: -39.261200 • wpf: • wpf: Wahlfach anrede: Herr vorname: Ruthard Alfrad nachname: Nieminen geburtsDatum: 199605-10 • bezeichnung: Drucktechnik • bezeichnung: Stochastik • bezeichnung: Maschinenbau • arbeitsform: Vorlesung • arbeitsform: Vorkurs • arbeitsform: Vorbereitungskurs • wpf: • wpf: Gast • plz: D-31281 • geoBreite: -40.981100 • geoLaenge: -43.268900 • wpf: anrede: Herr vorname: Sieghelm nachname: Schilling geburtsDatum: 198910-23 • bezeichnung: Analysis 1 • bezeichnung: VWL • arbeitsform: Kolloqium • arbeitsform: Tutorium • wpf: • wpf: • bezeichnung: Lineare Algebra • arbeitsform: Hauptseminar • wpf: fach anrede: Herr vorname: Sieghelm nachname: Schilling geburtsDatum: 198912-07 • bezeichnung: Biochemie • arbeitsform: Kolloqium • bezeichnung: formale Sprachen • arbeitsform: Hauptseminar • wpf: Wahlfach • wpf: Gast • geoBreite: -19.425000 • geoLaenge: -39.261200 Pflicht- • bezeichnung: Forstwirtschaft • arbeitsform: Kolloqium • wpf: fach • plz: D-91256 Pflicht- • plz: D-33229 • geoBreite: -45.098800 • geoLaenge: -24.101100 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net anrede: Frau vorname: Sieglinde nachname: Schmidtke geburtsDatum: 198901-12 • bezeichnung: Simulation Methods in Physics II • arbeitsform: Vorlesung • wpf: fach anrede: Herr vorname: Uke nachname: Schmieder geburtsDatum: 198912-08 • bezeichnung: BWL • bezeichnung: Psychologie • arbeitsform: Proseminar • arbeitsform: Seminar • wpf: fach • wpf: fach Pflicht- Pflicht- 15 • plz: D-91256 • geoBreite: -19.425000 • geoLaenge: -39.261200 Pflicht- • bezeichnung: Gestaltung • bezeichnung: BWL • bezeichnung: Stochastik • arbeitsform: Kolloqium • arbeitsform: Proseminar • arbeitsform: Vorkurs • wpf: fach • wpf: • wpf: fach Pflicht- Pflicht- • plz: D-25970 • geoBreite: -37.366800 • geoLaenge: -36.139400 Tabelle 1.1.0.1: Kommiliton 0NF Diese Tabelle ist offensichtlich problematisch: Schon auf den ersten Blick fällt auf, dass die Limitierung auf drei Veranstaltungen pro Student willkürlich ist, Was tun Wir mit einem Student, der vier oder mehr Veranstaltungen besucht? Einfach immer mehr Veranstaltung–Spalten einfügen, von denen dann die meisten leer bleiben? Ferner ist der vollständiger Name (Anrede, Nachname und Vorname) jedes Student steht in einer einzigen Spalte. Wir sollten Nachname, Vorname, eventuell Namenszusatz (. . . van der . . . ) in ein eigenes Feld trennen, also Vergrösserung der Zahl der Spalten. Wird beim Namenszusatz auf eine eigene Spalte verzichtet, so kann es später zu inkonsistenten Einträgen kommen. Einmal wird der Vorname um den Namenszusatz ergänzt (Schmidt, Sybille van der), andere Varianten sind (van der Schmidt, Sybille) oder (Schmidt van der, Sybille). In sämtlichen Fällen können bei Suchabfragen nach (Schmidt) oder (Sybille) Zeilen ignoriert werden, so dass der Datensatz nicht gefunden und ein zweites Mal eingetragen wird. Es gibt verschiedenen Personen mit dem gleichen Vornamen und Nachname Es ist auch üblich, dass viele Vorname auch als Nachname vorkommen, wie etwa Alexander Albrecht, Julia Otto, Thomas Christian, Frank Walter, Walter Otto, Ralf Bastian Bei vielen Personen (z.B. aus Südamerika) besteht der Name aus mehreren Wörtern, so dass fremde nicht den Vorname und den Nachname eingrenzen können. Beispiele sind: Poliesportiu Juan Antonio Samaranch, Joan Antoni Samaranch i Torelló, Samaranch Garcia Perez Del Ingerto Jose Luis, Jose Luis Resendez, Gabriel García Márquez, Javier Pérez de Cuéllar, Alejandro González Iñárritu Es gibt auch viele Geschlechtslose Namen (Kim, Michelle, Sascha, René, Maria, Robin , Ashley, Avery, Alex, Sam, Eike) Einige Namen enthalten Sonderzeichen: Dragoş Grigore, Matúš Kozác̆ikký, Zdzisław Styczeń, Gergő Lovrencsics, Noël Le Graët, Łukasz Podolski, Bärbel, Käthe, Lätizia, Jürgen, Jörg, Eyüp, Gül, Jérôme, Léo, Codruţa Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 16 1.2 die erste Normalform 1NF Die Regeln für die erste Normalform lauten (aus der Sprache der Theoretiker in verständliches Deutsch übersetzt): 1. Spalten mit gleichartigem Inhalt müssen entfernt werden. Wiederholende Gruppen, also mehrwertige Relationen, sind in eine eigene Tabelle auszulagern und zu verknüpfen. Bsp: Schauspieler zu einem Film, an einem Projekt beteiligte Mitarbeiter, Etagen in einem Haus, Zimmer einer Etage: Eine handschriftliche Aufzeichnung würde die beteiligten Personen / Etagen / Zimmer der Reihe nach aufführen, sie damit alle in eine Zelle schreiben. Die Lösung, mehrere Spalten für mehrere Teilnehmer usw. anzufügen, ist ungeeignet, da entweder zu viele Zellen leer bleiben oder zu wenige Spalten vorhanden sind. Also wird eine Detailtabelle (Mitwirkende, Projektbeteiligte, Etagen, Zimmer) erstellt, die in einer n:1 - Beziehung zur Grundtabelle (Filme, Projekte, Häuser, Etagen) steht. Die Gruppe dieser gleichartig strukturierten Detail-Informationen wird in diese Detail-Tabelle ausgelagert. 2. Attribute müssen atomar sein ✄ 3. Jeder Datensatz muss durch einen so genannten Primärschlüssel (mit pp gekennzeichnet) eindeutig identifizierbar sein. ✂ ✁ Die erste Regel bezieht sich offensichtlich auf die Spalten Veranstaltungen und Semester der Tabelle 1.1.0.1 auf Seite 15 Die zweite Regel bezieht sich offensichtlich auf die Spalte Student. Die wird atomarisiert: nur atomare Werte zulassen Als Primärschlüssel dient das Paar KommilitonID und VeranstaltungID ✄ pp ✂ ✁ 1019 ✄ pp ✂ ✁ 1019 ✄ pp ✂ ✁ 1019 ✄ pp ✂ ✁ 1018 ✄ pp ✂ ✁ 1018 ✄ pp ✂ ✁ 1018 ✄ pp ✂ ✁ 1004 ✄ pp ✂ ✁ 1004 ✄ pp ✂ ✁ 1011 anrede vorname nachname Herr Adhelm Kirch Herr Adhelm Herr geburtsDatum Veranstaltung ID Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Publikation ID ✄ pp ✂ ✁ 1005 ✄ pp ✂ ✁ 1005 ✄ pp ✂ ✁ 1005 ✄ pp ✂ ✁ 1015 ✄ pp ✂ ✁ 1015 ✄ pp ✂ ✁ 1015 bezeichnung arbeitsform wpf plz geoBreite geoLaenge ✄ pp 21 ✂ ✁ Gestaltung Kolloqium Gast D91256 19.425000 39.261200 Kirch ✄ pp 30 ✂ ✁ Stochastik Vorkurs Wahlfach D91256 19.425000 39.261200 Adhelm Kirch ✄ pp 33 ✂ ✁ Psychologie Seminar Wahlfach D91256 19.425000 39.261200 Herr Apo Kohlund 1991-09-22 ✄ pp 11 ✂ ✁ Drucktechnik Vorlesung D25970 37.366800 36.139400 Herr Apo Kohlund 1991-09-22 ✄ pp 19 ✂ ✁ Mechanik Seminar Pflichtfach D25970 37.366800 36.139400 Herr Apo Kohlund 1991-09-22 ✄ pp 28 ✂ ✁ Simulation Methods in Physics II Hauptseminar Gast D25970 37.366800 36.139400 Frau Ayan Sibel Maika 1992-12-11 ✄ pp 13 ✂ ✁ Biochemie Kolloqium Gast D25970 37.366800 36.139400 Frau Ayan Sibel Maika 1992-12-11 ✄ pp 23 ✂ ✁ formale Sprachen Hauptseminar D25970 37.366800 36.139400 Frau Ayan Sibel Maika 1992-12-11 ✄ pp 31 ✂ ✁ Maschinenbau Vorbereitungskurs Pflichtfach D25970 37.366800 36.139400 Herr Bent Chevi 1997-10-08 ✄ pp 15 ✂ ✁ VWL Tutorium Wahlfach D93754 46.817700 36.168500 Herr Bent Chevi 1997-10-08 ✄ pp 21 ✂ ✁ Gestaltung Kolloqium D93754 46.817700 36.168500 Herr Bent Chevi 1997-10-08 ✄ pp 30 ✂ ✁ Stochastik Vorkurs D93754 46.817700 36.168500 Herr Borck Teufel 1995-03-06 ✄ pp 23 ✂ ✁ formale Sprachen Hauptseminar Pflichtfach D25970 37.366800 36.139400 Herr Borck Teufel 1995-03-06 ✄ pp 21 ✂ ✁ Gestaltung Kolloqium Gast D25970 37.366800 36.139400 Frau Branwen Schulte 1996-07-19 ✄ pp 16 ✂ ✁ BWL Proseminar Pflichtfach D31281 40.981100 43.268900 17 ✄ pp ✂ ✁ 1009 ✄ pp ✂ ✁ 1001 ✄ pp ✂ ✁ 1001 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ pp ✂ ✁ 1011 ✄ pp ✂ ✁ 1011 ✄ pp ✂ ✁ 1002 ✄ pp ✂ ✁ 1002 ✄ pp ✂ ✁ 1002 ✄ pp ✂ ✁ 1016 ✄ pp ✂ ✁ 1016 ✄ pp ✂ ✁ 1016 ✄ pp ✂ ✁ 1012 ✄ pp ✂ ✁ 1012 ✄ pp ✂ ✁ 1012 ✄ pp ✂ ✁ 1009 ✄ pp ✂ ✁ 1009 Frau Branwen Schulte 1996-07-19 ✄ pp 19 ✂ ✁ Mechanik Seminar Wahlfach D31281 40.981100 43.268900 Frau Branwen Schulte 1996-07-19 ✄ pp 22 ✂ ✁ Lineare Algebra Hauptseminar Pflichtfach D31281 40.981100 43.268900 Frau Branwen Schulte 1987-10-23 ✄ pp 15 ✂ ✁ VWL Tutorium D80765 19.459100 25.092300 Frau Branwen Schulte 1987-10-23 ✄ pp 20 ✂ ✁ Physik II Kolloqium D80765 19.459100 25.092300 Frau Branwen Schulte 1987-10-23 ✄ pp 27 ✂ ✁ Forstwirtschaft Kolloqium Wahlfach D80765 19.459100 25.092300 Herr Gerasim Quack ✄ pp 12 ✂ ✁ Analysis 1 Kolloqium Pflichtfach D93754 46.817700 36.168500 Herr Gerasim Quack ✄ pp 22 ✂ ✁ Lineare Algebra Hauptseminar D93754 46.817700 36.168500 Herr Gerasim Quack ✄ pp 29 ✂ ✁ Java Praktikum Wahlfach D93754 46.817700 36.168500 Frau Gondeline Bert 1989-03-20 ✄ pp 20 ✂ ✁ Physik II Kolloqium Gast D80765 19.459100 25.092300 Frau Gondeline Bert 1989-03-20 ✄ pp 30 ✂ ✁ Stochastik Vorkurs Wahlfach D80765 19.459100 25.092300 Frau Gondeline Bert 1989-03-20 ✄ pp 15 ✂ ✁ VWL Tutorium Pflichtfach D80765 19.459100 25.092300 Frau Heimgard Wunder 1997-09-21 ✄ pp 11 ✂ ✁ Drucktechnik Vorlesung Wahlfach D93754 46.817700 36.168500 Frau Heimgard Wunder 1997-09-21 ✄ pp 14 ✂ ✁ Simulation Methods in Physics II Vorlesung Pflichtfach D93754 46.817700 36.168500 Frau Heimgard Wunder 1997-09-21 ✄ pp 24 ✂ ✁ Statistik I Vorlesung Wahlfach D93754 46.817700 36.168500 Herr Jack Mortimar Hahn 1988-11-17 ✄ pp 13 ✂ ✁ Biochemie Kolloqium Wahlfach D31281 40.981100 43.268900 Herr Jack Mortimar Hahn 1988-11-17 ✄ pp 15 ✂ ✁ VWL Tutorium Gast D31281 40.981100 43.268900 18 ✄ pp ✂ ✁ 1014 ✄ pp ✂ ✁ 1008 ✄ pp ✂ ✁ 1008 ✄ pp ✂ ✁ 1008 ✄ pp ✂ ✁ 1007 ✄ pp ✂ ✁ 1007 ✄ pp ✂ ✁ 1007 Herr Jack Mortimar Hahn 1988-11-17 ✄ pp 24 ✂ ✁ Statistik I Vorlesung Frau Jocelin Leon Bardot 1997-02-08 ✄ pp 31 ✂ ✁ Maschinenbau Frau Jocelin Leon Bardot 1997-02-08 ✄ pp 15 ✂ ✁ Frau Jocelin Leon Bardot 1997-02-08 Herr Joseph Cheree Herr Joseph Herr Gast Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ pp ✂ ✁ 1001 ✄ pp ✂ ✁ 1017 ✄ pp ✂ ✁ 1017 ✄ pp ✂ ✁ 1017 ✄ pp ✂ ✁ 1013 ✄ pp ✂ ✁ 1013 ✄ pp ✂ ✁ 1013 ✄ pp ✂ ✁ 1014 ✄ pp ✂ ✁ 1014 D31281 40.981100 43.268900 Vorbereitungskurs D91256 19.425000 39.261200 VWL Tutorium D91256 19.425000 39.261200 ✄ pp 19 ✂ ✁ Mechanik Seminar D91256 19.425000 39.261200 1990-06-26 ✄ pp 18 ✂ ✁ English I Tutorium D31281 40.981100 43.268900 Cheree 1990-06-26 ✄ pp 22 ✂ ✁ Lineare Algebra Hauptseminar Gast D31281 40.981100 43.268900 Joseph Cheree 1990-06-26 ✄ pp 30 ✂ ✁ Stochastik Vorkurs Pflichtfach D31281 40.981100 43.268900 Frau Mechtild Lehner 1997-09-08 ✄ pp 19 ✂ ✁ Mechanik Seminar Wahlfach D91256 19.425000 39.261200 Frau Mechtild Lehner 1997-09-08 ✄ pp 28 ✂ ✁ Simulation Methods in Physics II Hauptseminar Wahlfach D91256 19.425000 39.261200 Frau Mechtild Lehner 1997-09-08 ✄ pp 33 ✂ ✁ Psychologie Seminar D91256 19.425000 39.261200 Herr Ruthard Alfrad Nieminen 1996-05-10 ✄ pp 11 ✂ ✁ Drucktechnik Vorlesung D31281 40.981100 43.268900 Herr Ruthard Alfrad Nieminen 1996-05-10 ✄ pp 30 ✂ ✁ Stochastik Vorkurs D31281 40.981100 43.268900 Herr Ruthard Alfrad Nieminen 1996-05-10 ✄ pp 31 ✂ ✁ Maschinenbau Vorbereitungskurs D31281 40.981100 43.268900 Herr Sieghelm Schilling 1989-10-23 ✄ pp 12 ✂ ✁ Analysis 1 Kolloqium D91256 19.425000 39.261200 Herr Sieghelm Schilling 1989-10-23 ✄ pp 15 ✂ ✁ VWL Tutorium D91256 19.425000 39.261200 Herr Sieghelm Schilling 1989-10-23 ✄ pp 22 ✂ ✁ Lineare Algebra Hauptseminar D91256 19.425000 39.261200 Pflichtfach Gast Pflichtfach 19 ✄ pp ✂ ✁ 1010 ✄ pp ✂ ✁ 1010 ✄ pp ✂ ✁ 1006 ✄ pp ✂ ✁ 1006 ✄ pp ✂ ✁ 1006 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ pp ✂ ✁ 1003 ✄ pp ✂ ✁ 1003 ✄ pp ✂ ✁ 1003 ✄ pp ✂ ✁ 1010 Herr Sieghelm Schilling 1989-12-07 ✄ pp 13 ✂ ✁ Biochemie Kolloqium Wahlfach D33229 45.098800 24.101100 Herr Sieghelm Schilling 1989-12-07 ✄ pp 23 ✂ ✁ formale Sprachen Hauptseminar Gast D33229 45.098800 24.101100 Herr Sieghelm Schilling 1989-12-07 ✄ pp 27 ✂ ✁ Forstwirtschaft Kolloqium Pflichtfach D33229 45.098800 24.101100 Frau Sieglinde Schmidtke 1989-01-12 ✄ pp 14 ✂ ✁ Simulation Methods in Physics II Vorlesung Pflichtfach D91256 19.425000 39.261200 Frau Sieglinde Schmidtke 1989-01-12 ✄ pp 16 ✂ ✁ BWL Proseminar Pflichtfach D91256 19.425000 39.261200 Frau Sieglinde Schmidtke 1989-01-12 ✄ pp 33 ✂ ✁ Psychologie Seminar Pflichtfach D91256 19.425000 39.261200 Herr Uke Schmieder 1989-12-08 ✄ pp 21 ✂ ✁ Gestaltung Kolloqium Pflichtfach D25970 37.366800 36.139400 Herr Uke Schmieder 1989-12-08 ✄ pp 16 ✂ ✁ BWL Proseminar D25970 37.366800 36.139400 Herr Uke Schmieder 1989-12-08 ✄ pp 30 ✂ ✁ Stochastik Vorkurs D25970 37.366800 36.139400 Tabelle 1.2.0.1: Kommiliton 1NF Pflichtfach 20 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 21 Diese Relation ist jedoch redundant, weil die Daten zu den Veranstaltungen für jeden Student (der die Veranstaltung besucht) repliziert werden. Dadurch können Anomalien auftreten: • Update–Anomalien: wenn man die Bezeichnung einer Veranstaltung ändern will, muss man diese Änderungen an alle Tupel für Studenten dieser Veranstaltung weitergeben. Andersfalls wird die Datenbank inkonsistent. • Einfüge–Anomalien: nehmen wir an, dass einen Student namens Eppler in der Tabelle 1.2.0.1 auf Seite 20 aufgenommen werden soll, man kann dies in der Tabelle 1.2.0.1 auf Seite 20 einfügen, wenn es eine Veranstaltung gibt, die vom Student Eppler besucht wird. • Lösch–Anomalien: Ein der grössten Probleme der Tabelle 1.2.0.1 auf Seite 20 besteht darin, dass sie für die Studenten ohne Veranstaltungen keine Daten enthält. Würde man die Veranstaltung mit der Bezeichnung Mathematik 1 löschen, würde alle Informationen über die Studenten, die gerade diese Veranstaltung besuchten, verloren gehen. 1. Minimaler Einsatz von Null–Werten. Für ein Veranstaltung kann kein Student eingetragen werden. Selbst wenn man von der Redundanz absieht, sind Null–Werte in relationalen Datenbanken problematisch, weil ihre exakte Bedeutung nicht zu ermitteln ist. Gibt es für diese Veranstaltung keinen Student, oder ist der Name des Student einfach unbekannt ist, so das das Attribut hier keine Bedeutung hat? Diese Schwierigkeiten bei der Interpretation lassen es wünschenswert erscheinen, den Einsatz von Null–Werten zu minimieren. 2. Prozessdaten sind Daten, die durch einen Rechenprozess aus gespeicherten Attributen gewonnen werden. Folgendes einfaches Beispiel: Neben dem Geburtsdatum wird auch noch das Alter gespeichert. Spätestens nach einem Jahr ist dieser Eintrag falsch. Deshalb sollten diese Prozessdaten bei jeder Abfrage neu errechnet werden. Das Problem mit der Tabelle 1.2.0.1 auf Seite 20 ist vor allem darauf zurückzuführen, dass die Tabelle 1.2.0.1 auf Seite 20 mit mehr als eine Sache (einer Entity) gleichzeitig zu tun hat. Die Tabelle 1.2.0.1 auf Seite 20 verzeichnet einerseits die Veranstaltungen und andererseits die Studenten, die die Veranstaltungen besuchen. Man kann sich intuitiv dafür entscheiden, die Daten in zwei Relationen umzusetzen: Auf der einen Seite die Relation Veranstaltung, die die Informationen zu allen Veranstaltungen enthält, und auf der anderen Seite die Relation Studenten, die die Veranstaltungen besuchen. 1.3 die zweite Normalform 2NF Eine Relation ist in der Zweiten Normalform, wenn sie in der Ersten Normalform ist und jedes Nicht–Schlüsselattribut von jedem Schlüsselkandidaten vollständig funktional abhängig ist. Eigentlich spielt die 2NF nur dann eine Rolle, wenn der Primärschlüssel einer Tabelle aus mehreren Spalten zusammengesetzt ist. Besteht der Primärschlüssel nur aus einer Spalte, so erfüllt die Tabelle immer die 2NF. Die zu speichernden Daten sind so in Tabellen aufzuteilen, dass jedes Nichtschlüsselattribut voll von einem Primärschlüssel abhängig ist Studenten und Veranstaltungen werden in eigenen Tabellen ausgelagert. Nun aber weis man nicht: Welche Student welche Veranstaltung besucht. ✄ Daher sollte man ein sog. Fremdschlüssel einführen. Man würde „Fremdschlüssel (mit ✂F ✁ gekennzeichnet)“wohl besser mit „Querverweis“übersetzen: Es handelt sich ganz einfach um einen Verweis auf eine Zeile in einer anderen Tabelle. man erhält die folgenden Tabellen Publikation ID anrede vorname nachname geburtsDatum plz geoBreite geoLaenge Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ ✂P ✁ 1005 ✄ ✂P ✁ 1015 ✄ ✂P ✁ 1019 ✄ ✂P ✁ 1018 ✄ ✂P ✁ 1004 ✄ ✂P ✁ 1011 ✄ ✂P ✁ 1002 ✄ ✂P ✁ 1016 ✄ ✂P ✁ 1012 ✄ ✂P ✁ 1009 ✄ ✂P ✁ 1001 ✄ ✂P ✁ 1017 ✄ ✂P ✁ 1013 ✄ ✂P ✁ 1014 ✄ ✂P ✁ 1008 ✄ ✂P ✁ 1007 ✄ ✂P ✁ 1003 ✄ ✂P ✁ 1010 ✄ ✂P ✁ 1006 Herr Adhelm Kirch D91256 19.425000 39.261200 Herr Apo Kohlund 1991-09-22 D25970 37.366800 36.139400 Frau Ayan Sibel Maika 1992-12-11 D25970 37.366800 36.139400 Herr Bent Chevi 1997-10-08 D93754 46.817700 36.168500 Herr Borck Teufel 1995-03-06 D25970 37.366800 36.139400 Frau Branwen Schulte 1996-07-19 D31281 40.981100 43.268900 Frau Branwen Schulte 1987-10-23 D80765 19.459100 25.092300 Herr Gerasim Quack D93754 46.817700 36.168500 Frau Gondeline Bert 1989-03-20 D80765 19.459100 25.092300 Frau Heimgard Wunder 1997-09-21 D93754 46.817700 36.168500 Herr Jack Mortimar Hahn 1988-11-17 D31281 40.981100 43.268900 Frau Jocelin Leon Bardot 1997-02-08 D91256 19.425000 39.261200 Herr Joseph Cheree 1990-06-26 D31281 40.981100 43.268900 Frau Mechtild Lehner 1997-09-08 D91256 19.425000 39.261200 Herr Ruthard Alfrad Nieminen 1996-05-10 D31281 40.981100 43.268900 Herr Sieghelm Schilling 1989-10-23 D91256 19.425000 39.261200 Herr Sieghelm Schilling 1989-12-07 D33229 45.098800 24.101100 Frau Sieglinde Schmidtke 1989-01-12 D91256 19.425000 39.261200 Herr Uke Schmieder 1989-12-08 D25970 37.366800 36.139400 Tabelle 1.3.0.1: Kommiliton Ort 2NF Veranstaltung ID ✄ P 21 ✄✂ ✁ P 30 ✄✂ ✁ P 33 ✄✂ ✁ P 11 ✄✂ ✁ ✂P ✁19 bezeichnung arbeitsform Gestaltung Kolloqium Stochastik Vorkurs Psychologie Seminar Drucktechnik Vorlesung Mechanik Seminar 22 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ ✂P ✁28 ✄ P 13 ✄✂ ✁ P 23 ✄✂ ✁ P 31 ✄✂ ✁ ✂✄P ✁15 ✂✄P ✁16 ✂✄P ✁22 ✂✄P ✁20 ✂✄P ✁27 P 12 ✄✂ ✁ P 29 ✄✂ ✁ ✂P ✁14 ✄ ✂✄P ✁24 ✂P ✁18 Simulation Methods in Physics II Hauptseminar Biochemie Kolloqium formale Sprachen Hauptseminar Maschinenbau Vorbereitungs-kurs VWL Tutorium BWL Proseminar Lineare Algebra Hauptseminar Physik II Kolloqium Forstwirtschaft Kolloqium Analysis 1 Kolloqium Java Praktikum Simulation Methods in Physics II Vorlesung Statistik I Vorlesung English I Tutorium Tabelle 1.3.0.2: Veranstaltung 2NF Besucht ID ✄ ✂✄P ✁1000101 ✂✄P ✁1000102 P 1000103 ✄✂ ✁ P 1000201 ✄✂ ✁ P 1000202 ✄✂ ✁ P 1000203 ✄✂ ✁ ✂✄P ✁1000301 ✂✄P ✁1000302 ✂✄P ✁1000303 ✂✄P ✁1000401 P 1000402 ✄✂ ✁ P 1000403 ✄✂ ✁ P 1000501 ✄✂ ✁ P 1000502 ✄✂ ✁ ✂✄P ✁1000601 ✂✄P ✁1000602 ✂✄P ✁1000603 ✂✄P ✁1000701 ✂✄P ✁1000702 P 1000703 ✄✂ ✁ P 1000801 ✄✂ ✁ ✂P ✁1000802 kommilitonID ✄ ✂✄F ✁1005 ✂✄F ✁1005 F 1005 ✄✂ ✁ F 1015 ✄✂ ✁ F 1015 ✄✂ ✁ F 1015 ✄✂ ✁ ✂✄F ✁1019 ✂✄F ✁1019 ✂✄F ✁1019 ✂✄F ✁1018 F 1018 ✄✂ ✁ F 1018 ✄✂ ✁ F 1004 ✄✂ ✁ F 1004 ✄✂ ✁ ✂✄F ✁1011 ✂✄F ✁1011 ✂✄F ✁1011 ✂✄F ✁1002 ✂✄F ✁1002 F 1002 ✄✂ ✁ F 1016 ✄✂ ✁ ✂F ✁1016 Veranstaltung ID ✄ ✂✄F ✁21 ✂✄F ✁30 F 33 ✄✂ ✁ F 11 ✄✂ ✁ F 19 ✄✂ ✁ F 28 ✄✂ ✁ ✂✄F ✁13 ✂✄F ✁23 ✂✄F ✁31 ✂✄F ✁15 F 21 ✄✂ ✁ F 30 ✄✂ ✁ F 23 ✄✂ ✁ F 21 ✄✂ ✁ ✂✄F ✁16 ✂✄F ✁19 ✂✄F ✁22 ✂✄F ✁15 ✂✄F ✁20 F 27 ✄✂ ✁ F 12 ✄✂ ✁ ✂F ✁22 wpf Gast Wahlfach Wahlfach Pflichtfach Gast Gast Pflichtfach Wahlfach Pflichtfach Gast Pflichtfach Wahlfach Pflichtfach Wahlfach Pflichtfach 23 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ ✂✄P ✁1000803 P 1000901 ✄✂ ✁ P 1000902 ✄✂ ✁ P 1000903 ✄✂ ✁ P 1001001 ✄✂ ✁ ✂✄P ✁1001002 ✂✄P ✁1001003 ✂✄P ✁1001101 ✂✄P ✁1001102 P 1001103 ✄✂ ✁ P 1001201 ✄✂ ✁ P 1001202 ✄✂ ✁ P 1001203 ✄✂ ✁ P 1001301 ✄✂ ✁ ✂✄P ✁1001302 ✂✄P ✁1001303 ✂✄P ✁1001401 ✂✄P ✁1001402 P 1001403 ✄✂ ✁ P 1001501 ✄✂ ✁ P 1001502 ✄✂ ✁ P 1001503 ✄✂ ✁ ✂✄P ✁1001601 ✂✄P ✁1001602 ✂✄P ✁1001603 ✂✄P ✁1001701 ✂✄P ✁1001702 P 1001703 ✄✂ ✁ P 1001801 ✄✂ ✁ P 1001802 ✄✂ ✁ P 1001803 ✄✂ ✁ ✂✄P ✁1001901 ✂✄P ✁1001902 ✂P ✁1001903 ✄ ✂✄F ✁1016 F 1012 ✄✂ ✁ F 1012 ✄✂ ✁ F 1012 ✄✂ ✁ F 1009 ✄✂ ✁ ✂✄F ✁1009 ✂✄F ✁1009 ✂✄F ✁1001 ✂✄F ✁1001 F 1001 ✄✂ ✁ F 1017 ✄✂ ✁ F 1017 ✄✂ ✁ F 1017 ✄✂ ✁ F 1013 ✄✂ ✁ ✂✄F ✁1013 ✂✄F ✁1013 ✂✄F ✁1014 ✂✄F ✁1014 F 1014 ✄✂ ✁ F 1008 ✄✂ ✁ F 1008 ✄✂ ✁ F 1008 ✄✂ ✁ ✂✄F ✁1007 ✂✄F ✁1007 ✂✄F ✁1007 ✂✄F ✁1003 ✂✄F ✁1003 F 1003 ✄✂ ✁ F 1010 ✄✂ ✁ F 1010 ✄✂ ✁ F 1010 ✄✂ ✁ ✂✄F ✁1006 ✂✄F ✁1006 ✂F ✁1006 ✄ ✂✄F ✁29 F 20 ✄✂ ✁ F 30 ✄✂ ✁ F 15 ✄✂ ✁ F 11 ✄✂ ✁ ✂✄F ✁14 ✂✄F ✁24 ✂✄F ✁13 ✂✄F ✁15 F 24 ✄✂ ✁ F 31 ✄✂ ✁ F 15 ✄✂ ✁ F 19 ✄✂ ✁ F 18 ✄✂ ✁ ✂✄F ✁22 ✂✄F ✁30 ✂✄F ✁19 ✂✄F ✁28 F 33 ✄✂ ✁ F 11 ✄✂ ✁ F 30 ✄✂ ✁ F 31 ✄✂ ✁ ✂✄F ✁12 ✂✄F ✁15 ✂✄F ✁22 ✂✄F ✁13 ✂✄F ✁23 F 27 ✄✂ ✁ F 14 ✄✂ ✁ F 16 ✄✂ ✁ F 33 ✄✂ ✁ ✂✄F ✁21 ✂✄F ✁16 ✂F ✁30 24 Wahlfach Gast Wahlfach Pflichtfach Wahlfach Pflichtfach Wahlfach Wahlfach Gast Gast Pflichtfach Gast Pflichtfach Wahlfach Wahlfach Gast Pflichtfach Wahlfach Gast Pflichtfach Pflichtfach Pflichtfach Pflichtfach Pflichtfach Pflichtfach Tabelle 1.3.0.3: Besucht 2NF 1.4 die dritte Normalform 3NF Offensichtlich lässt sich die geographische Breite und Länge aus der PLZ bestimmen. Das Problem ist hierbei wieder Datenredundanz. Wird zum Beispiel ein neu Student mit einem existierenden PLZ eingeführt, so wird die geographische Breite und Länge redundant gespeichert. Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 25 Die 3NF besagt: Spalten, die nicht in unmittelbarer Abhängigkeit zum Primärschlüssel einer Tabelle stehen, müssen eliminiert werden (also in eine eigene Tabelle ausgelagert werden). In der Tabelle Kommiliton 2NF hängen die Spalten Stadt und Land von der Spalte PLZ ab, die wiederum von Primärschlüssel KommilitonID abhängt. Städte und Länder sind von der Liste der Studenten unabhängig und sollten daher getrennt werden. Natürlich soll auch weiterhin bei jeder Student vermerkt werden, in welchem Stadt (und in welchem Land) er wohnt – aber dazu muss nicht jedes Mal die ganze Stadt genannt werden, es reicht ein Fremdschlüssel (also ein Verweis). Die Tabelle Kommiliton 2NF wird in zwei Tabellen aufgeteilt: Publi-kation ID ✄ P 1005 ✄✂ ✁ P 1015 ✄✂ ✁ P 1019 ✄✂ ✁ P 1018 ✄✂ ✁ ✂✄P ✁1004 ✂✄P ✁1011 ✂✄P ✁1002 ✂✄P ✁1016 P 1012 ✄✂ ✁ P 1009 ✄✂ ✁ P 1001 ✄✂ ✁ P 1017 ✄✂ ✁ ✂✄P ✁1013 ✂✄P ✁1014 ✂✄P ✁1008 ✂✄P ✁1007 ✂✄P ✁1003 P 1010 ✄✂ ✁ ✂P ✁1006 anrede vorname nachname geburtsDatum Herr Adhelm Kirch Herr Apo Kohlund 1991-09-22 Frau Ayan Sibel Maika 1992-12-11 Herr Bent Chevi 1997-10-08 Herr Borck Teufel 1995-03-06 Frau Branwen Schulte 1996-07-19 Frau Branwen Schulte 1987-10-23 Herr Gerasim Quack Frau Gondeline Bert 1989-03-20 Frau Heimgard Wunder 1997-09-21 Herr Jack Mortimar Hahn 1988-11-17 Frau Jocelin Leon Bardot 1997-02-08 Herr Joseph Cheree 1990-06-26 Frau Mechtild Lehner 1997-09-08 Herr Ruthard Alfrad Nieminen 1996-05-10 Herr Sieghelm Schilling 1989-10-23 Herr Sieghelm Schilling 1989-12-07 Frau Sieglinde Schmidtke 1989-01-12 Herr Uke Schmieder 1989-12-08 Tabelle 1.4.0.1: Kommiliton 3NF plz ✄ ✂✄P ✁D-91256 P D-25970 ✄✂ ✁ P D-93754 ✄✂ ✁ P D-31281 ✄✂ ✁ P D-80765 ✄✂ ✁ ✂P ✁D-33229 geoBreite geoLaenge -19.425000 -39.261200 -37.366800 -36.139400 -46.817700 -36.168500 -40.981100 -43.268900 -19.459100 -25.092300 -45.098800 -24.101100 Tabelle 1.4.0.2: Ort 3NF Ort ✄ F D-91256 ✄✂ ✁ F D-25970 ✄✂ ✁ F D-25970 ✄✂ ✁ F D-93754 ✄✂ ✁ ✂✄F ✁D-25970 ✂✄F ✁D-31281 ✂✄F ✁D-80765 ✂✄F ✁D-93754 F D-80765 ✄✂ ✁ F D-93754 ✄✂ ✁ F D-31281 ✄✂ ✁ F D-91256 ✄✂ ✁ ✂✄F ✁D-31281 ✂✄F ✁D-91256 ✂✄F ✁D-31281 ✂✄F ✁D-91256 ✂✄F ✁D-33229 F D-91256 ✄✂ ✁ ✂F ✁D-25970 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 1.5 kompletter Entwurf der Datenbanken Publi-kation ID ✄ ✂✄P ✁1005 ✂✄P ✁1015 ✂✄P ✁1019 P 1018 ✄✂ ✁ P 1004 ✄✂ ✁ P 1011 ✄✂ ✁ P 1002 ✄✂ ✁ ✂✄P ✁1016 ✂✄P ✁1012 ✂✄P ✁1009 ✂✄P ✁1001 P 1017 ✄✂ ✁ P 1013 ✄✂ ✁ P 1014 ✄✂ ✁ P 1008 ✄✂ ✁ P 1007 ✄✂ ✁ ✂✄P ✁1003 ✂✄P ✁1010 ✂P ✁1006 anrede vorname nachname geburtsDatum Herr Adhelm Kirch Herr Apo Kohlund 1991-09-22 Frau Ayan Sibel Maika 1992-12-11 Herr Bent Chevi 1997-10-08 Herr Borck Teufel 1995-03-06 Frau Branwen Schulte 1996-07-19 Frau Branwen Schulte 1987-10-23 Herr Gerasim Quack Frau Gondeline Bert 1989-03-20 Frau Heimgard Wunder 1997-09-21 Herr Jack Mortimar Hahn 1988-11-17 Frau Jocelin Leon Bardot 1997-02-08 Herr Joseph Cheree 1990-06-26 Frau Mechtild Lehner 1997-09-08 Herr Ruthard Alfrad Nieminen 1996-05-10 Herr Sieghelm Schilling 1989-10-23 Herr Sieghelm Schilling 1989-12-07 Frau Sieglinde Schmidtke 1989-01-12 Herr Uke Schmieder 1989-12-08 Tabelle 1.5.0.1: Kommiliton plz ✄ ✂✄P ✁D-91256 ✂✄P ✁D-25970 ✂✄P ✁D-93754 ✂✄P ✁D-31281 P D-80765 ✄✂ ✁ ✂P ✁D-33229 geoBreite geoLaenge -19.425000 -39.261200 -37.366800 -36.139400 -46.817700 -36.168500 -40.981100 -43.268900 -19.459100 -25.092300 -45.098800 -24.101100 Tabelle 1.5.0.2: Ort Veranstaltung ID ✄ ✂✄P ✁21 P 30 ✄✂ ✁ P 33 ✄✂ ✁ P 11 ✄✂ ✁ ✂P ✁19 bezeichnung arbeitsform Gestaltung Kolloqium Stochastik Vorkurs Psychologie Seminar Drucktechnik Vorlesung Mechanik Seminar Ort ✄ ✂✄F ✁D-91256 ✂✄F ✁D-25970 ✂✄F ✁D-25970 F D-93754 ✄✂ ✁ F D-25970 ✄✂ ✁ F D-31281 ✄✂ ✁ F D-80765 ✄✂ ✁ ✂✄F ✁D-93754 ✂✄F ✁D-80765 ✂✄F ✁D-93754 ✂✄F ✁D-31281 F D-91256 ✄✂ ✁ F D-31281 ✄✂ ✁ F D-91256 ✄✂ ✁ F D-31281 ✄✂ ✁ F D-91256 ✄✂ ✁ ✂✄F ✁D-33229 ✂✄F ✁D-91256 ✂F ✁D-25970 26 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ ✂P ✁28 ✄ P 13 ✄✂ ✁ P 23 ✄✂ ✁ P 31 ✄✂ ✁ ✂✄P ✁15 ✂✄P ✁16 ✂✄P ✁22 ✂✄P ✁20 ✂✄P ✁27 P 12 ✄✂ ✁ P 29 ✄✂ ✁ ✂P ✁14 ✄ ✂✄P ✁24 ✂P ✁18 Simulation Methods in Physics II Hauptseminar Biochemie Kolloqium formale Sprachen Hauptseminar Maschinenbau Vorbereitungs-kurs VWL Tutorium BWL Proseminar Lineare Algebra Hauptseminar Physik II Kolloqium Forstwirtschaft Kolloqium Analysis 1 Kolloqium Java Praktikum Simulation Methods in Physics II Vorlesung Statistik I Vorlesung English I Tutorium Tabelle 1.5.0.3: Veranstaltung 2NF Besucht ID ✄ ✂✄P ✁1000101 ✂✄P ✁1000102 P 1000103 ✄✂ ✁ P 1000201 ✄✂ ✁ P 1000202 ✄✂ ✁ P 1000203 ✄✂ ✁ ✂✄P ✁1000301 ✂✄P ✁1000302 ✂✄P ✁1000303 ✂✄P ✁1000401 P 1000402 ✄✂ ✁ P 1000403 ✄✂ ✁ P 1000501 ✄✂ ✁ P 1000502 ✄✂ ✁ ✂✄P ✁1000601 ✂✄P ✁1000602 ✂✄P ✁1000603 ✂✄P ✁1000701 ✂✄P ✁1000702 P 1000703 ✄✂ ✁ P 1000801 ✄✂ ✁ ✂P ✁1000802 kommilitonID ✄ ✂✄F ✁1005 ✂✄F ✁1005 F 1005 ✄✂ ✁ F 1015 ✄✂ ✁ F 1015 ✄✂ ✁ F 1015 ✄✂ ✁ ✂✄F ✁1019 ✂✄F ✁1019 ✂✄F ✁1019 ✂✄F ✁1018 F 1018 ✄✂ ✁ F 1018 ✄✂ ✁ F 1004 ✄✂ ✁ F 1004 ✄✂ ✁ ✂✄F ✁1011 ✂✄F ✁1011 ✂✄F ✁1011 ✂✄F ✁1002 ✂✄F ✁1002 F 1002 ✄✂ ✁ F 1016 ✄✂ ✁ ✂F ✁1016 Veranstaltung ID ✄ ✂✄F ✁21 ✂✄F ✁30 F 33 ✄✂ ✁ F 11 ✄✂ ✁ F 19 ✄✂ ✁ F 28 ✄✂ ✁ ✂✄F ✁13 ✂✄F ✁23 ✂✄F ✁31 ✂✄F ✁15 F 21 ✄✂ ✁ F 30 ✄✂ ✁ F 23 ✄✂ ✁ F 21 ✄✂ ✁ ✂✄F ✁16 ✂✄F ✁19 ✂✄F ✁22 ✂✄F ✁15 ✂✄F ✁20 F 27 ✄✂ ✁ F 12 ✄✂ ✁ ✂F ✁22 wpf Gast Wahlfach Wahlfach Pflichtfach Gast Gast Pflichtfach Wahlfach Pflichtfach Gast Pflichtfach Wahlfach Pflichtfach Wahlfach Pflichtfach 27 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ ✂✄P ✁1000803 P 1000901 ✄✂ ✁ P 1000902 ✄✂ ✁ P 1000903 ✄✂ ✁ P 1001001 ✄✂ ✁ ✂✄P ✁1001002 ✂✄P ✁1001003 ✂✄P ✁1001101 ✂✄P ✁1001102 P 1001103 ✄✂ ✁ P 1001201 ✄✂ ✁ P 1001202 ✄✂ ✁ P 1001203 ✄✂ ✁ P 1001301 ✄✂ ✁ ✂✄P ✁1001302 ✂✄P ✁1001303 ✂✄P ✁1001401 ✂✄P ✁1001402 P 1001403 ✄✂ ✁ P 1001501 ✄✂ ✁ P 1001502 ✄✂ ✁ P 1001503 ✄✂ ✁ ✂✄P ✁1001601 ✂✄P ✁1001602 ✂✄P ✁1001603 ✂✄P ✁1001701 ✂✄P ✁1001702 P 1001703 ✄✂ ✁ P 1001801 ✄✂ ✁ P 1001802 ✄✂ ✁ P 1001803 ✄✂ ✁ ✂✄P ✁1001901 ✂✄P ✁1001902 ✂P ✁1001903 ✄ ✂✄F ✁1016 F 1012 ✄✂ ✁ F 1012 ✄✂ ✁ F 1012 ✄✂ ✁ F 1009 ✄✂ ✁ ✂✄F ✁1009 ✂✄F ✁1009 ✂✄F ✁1001 ✂✄F ✁1001 F 1001 ✄✂ ✁ F 1017 ✄✂ ✁ F 1017 ✄✂ ✁ F 1017 ✄✂ ✁ F 1013 ✄✂ ✁ ✂✄F ✁1013 ✂✄F ✁1013 ✂✄F ✁1014 ✂✄F ✁1014 F 1014 ✄✂ ✁ F 1008 ✄✂ ✁ F 1008 ✄✂ ✁ F 1008 ✄✂ ✁ ✂✄F ✁1007 ✂✄F ✁1007 ✂✄F ✁1007 ✂✄F ✁1003 ✂✄F ✁1003 F 1003 ✄✂ ✁ F 1010 ✄✂ ✁ F 1010 ✄✂ ✁ F 1010 ✄✂ ✁ ✂✄F ✁1006 ✂✄F ✁1006 ✂F ✁1006 ✄ ✂✄F ✁29 F 20 ✄✂ ✁ F 30 ✄✂ ✁ F 15 ✄✂ ✁ F 11 ✄✂ ✁ ✂✄F ✁14 ✂✄F ✁24 ✂✄F ✁13 ✂✄F ✁15 F 24 ✄✂ ✁ F 31 ✄✂ ✁ F 15 ✄✂ ✁ F 19 ✄✂ ✁ F 18 ✄✂ ✁ ✂✄F ✁22 ✂✄F ✁30 ✂✄F ✁19 ✂✄F ✁28 F 33 ✄✂ ✁ F 11 ✄✂ ✁ F 30 ✄✂ ✁ F 31 ✄✂ ✁ ✂✄F ✁12 ✂✄F ✁15 ✂✄F ✁22 ✂✄F ✁13 ✂✄F ✁23 F 27 ✄✂ ✁ F 14 ✄✂ ✁ F 16 ✄✂ ✁ F 33 ✄✂ ✁ ✂✄F ✁21 ✂✄F ✁16 ✂F ✁30 Tabelle 1.5.0.4: Besucht Wahlfach Gast Wahlfach Pflichtfach Wahlfach Pflichtfach Wahlfach Wahlfach Gast Gast Pflichtfach Gast Pflichtfach Wahlfach Wahlfach Gast Pflichtfach Wahlfach Gast Pflichtfach Pflichtfach Pflichtfach Pflichtfach Pflichtfach Pflichtfach 28 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 29 1.6 Datenbankschema «table» Kommiliton InnoDB, utf8 ✄ ✂P ✁ Publi-kation anrede vorname nachname geburtsDatum «table» Veranstaltung InnoDB, utf8 ID a..* a..* ✄ ✂P ✁ Veranstaltung ID bezeichnung arbeitsform ✄ ✂F ✁ Ort * a..* a..* b..* «table» Ort InnoDB, utf8 «table» Besucht InnoDB, utf8 ✄ ✂P ✁ plz ✄ ✄✂P ✁ Besucht ID ✄✂F ✁ kommilitonID ✂F ✁ Veranstaltung ID geoBreite geoLaenge wpf Abbildung 1.6.0.1: UML universitaet_nf 1.7 Zusammenfassung Die Entwicklung einer DB vollzieht sich in mehreren Schritten. Zunächst ist festzustellen, welche Informationen die Anwender vom DBS erwarten. Aufgrund dieser Erhebung kann man sich dann überlegen, welche Tabellen benötigt werden. Ferner muss festgelegt werden, welche Datentypen für die einzelnen Tabellenspalten benötigt werden. Diesen Prozess bezeichnet man als Datenmodellierung. Erst wenn die Datenmodellierung abgeschlossen ist, können die Tabellen angelegt werden. Man sollte sich für diesen Schritt ruhig ein wenig Zeit nehmen, weil es nachher häufig unmöglich ist, ohne grossen Aufwand Fehler zu beheben. Um sich einigen Ärger zu ersparen, empfiehlt es sich, ein paar Grundsätze bei der Datenmodellierung zu beachten Redundanz vermeiden: Unter Redundanz versteht man das doppelte Vorhandensein einzelner Daten. Redundanz vergeudet nicht nur Speicherplatz, es eröffnet auch die Möglichkeit inkonsistenter und mehrdeutiger Daten. 1.8 Vorteile und Grenzen der Normalisierung Mit Hilfe der Normalisierung wollen wir sicherstellen, dass die Datenstrukturen über die wir die relationale Datenbank bilden, möglichst effizient formuliert werden. Denn dadurch erreichen wir folgende Eigenschaften in unserem Datenbanksystem: • Verminderung der Redundanz, • Vermeidung von Inkosistenzen und Anomalien, • Übersichtlichkeit hinsichtlich der Attributanzahl durch Bildung (kleinerer) Tabellen. Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 30 Wie bereits durch den letzten Punkt ersichtlich wird, hat die Normalisierung allerdings auch einige Nachteile und Grenzen: • Der Realweltausschnitt wird oftmals durch die Transformation bis zur dritten Normalform in zu viele und teilweise sehr kleine Tabellen (zerstückelt), wodurch möglicherweise der Überblick durch die Vielzahl an Tabellen und das Verständnis für den Zusammenhang zwischen diesen Tabellen verloren gehen können. • Bei Abfragen, für deren Beantwortung auf Bestandteile mehrerer verschiedener Tabellen zugegriffen werden muss, ist eine aufwändige Wiedervereinigung der benötigten Tabellen erforderlich (Join- Bildung wird in den beiden folgenden Kapiteln besprochen). Gerade dieser zuletzt genannte Punkt setzt der Normalisierung in der Praxis Grenzen. Die Theorie und Literatur empfiehlt zwar eine Normalisierung bis in die dritte Normalform. Hierbei wird jedoch bereits bei recht einfachen Abfragen Information aus mehreren Tabellen benötigt, deren Vereinigung allerdings gerade bei grossem Datenbestand meist eine enorm intensive Rechenleistung fordert. Aus diesem Grund werden relationale Datenbanksysteme in der Praxis nur selten bis in die dritte Normalform umgewandelt. Daher ist die Normalisierung in gewisser Weise ein Balanceakt zwischen Nutzen und Aufwand und wird im Zusammenhang mit der Designfrage eines Datenbanksystems auch in Fachkreisen heiss diskutiert. In der Regeln muss immer aktuell anhand des gegebenen Projektes beurteilt werden, welche Vorgehensweise sinnvoller ist und wie weit normlisiert werden soll. Dabei gilt natürlich zu beachten, dass eine totale Normalisierung auf allen Ebenen der Programmieraufwand steigt, zum anderen die Geschwindigkeit von Abfragen darunter leidet. Hierzu muss man ein guten Kompromiss finden, der beide Gesichtspunkte dieses Problems berücksichtigt. Kapitel 3 xampp 3.1 Installation Sie müssen nicht XAMPP installieren. Alternativ können Sie bei einem Webhoster (der MySQL anbietet z.B. bei https://www.000webhost.com/) anmelden. XAMPP aus http://www.apachefriends.org/index.html runterladen und installieren. Die Pakete haben den Nachteil: sie enthalten neben Apache, PHP und MySQL unzählige weitere Komponenten, die man wahrscheinlich nicht brauchen. 31 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.1.0.1: bild0020.eps 32 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.1.0.2: bild0021.eps 33 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.1.0.3: bild0022.eps 34 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.1.0.4: bild0023.eps 35 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.1.0.5: bild0024.eps 36 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.1.0.6: bild0025.eps 37 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.1.0.7: bild0026.eps 38 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.1.0.8: bild0027.eps 3.2 XAMPP starten Wechseln Sie im Ordner, wo Sie XAMPP installiert haben; In der Regel C:\xampp; 39 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.2.0.1: xampp001.eps und starten Sie XAMPP, in dem Sie den [StartButton sowohl für Apache als auch für MySQL klicken 40 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 41 Abbildung 3.2.0.2: xampp002.eps . Öffnen Sie nun ein Browser Ihrer Wahl z.B. Firefox und Geben Sie http://localhost/phpmyadmin/index.php ein. Im Normalfall erhalten Sie Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.2.0.3: xampp003.eps . 3.3 Datenbank anlegen Wir legen unsere erste Datenbank mit dem Namen bibliografie_nf an. 42 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.3.0.1: xampp004.eps . 43 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 44 Abbildung 3.3.0.2: xampp005.eps . 3.4 Tabellen in Datenbank anlegen Wechseln Sie nun zu der neu angelegten Datenbank bibliografie_nf und legen Sie dort eine Tabelle namens Fachkraft mit 4 Spalten. Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.4.0.1: xampp006.eps . 45 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.4.0.2: xampp007.eps Als Spalten der Tabelle Fachkraft wählen Sie. • fachkraftID INT • anrede ENUM(’Frau’, ’Herr’) • nachname VARCHAR(250) • vorname VARCHAR(250) 46 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.4.0.3: xampp008.eps Nicht vergessen: Auf [Speichern]klicken. 47 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.4.0.4: xampp009.eps In best–case erhalten Sie. 48 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 49 Abbildung 3.4.0.5: xampp010.eps Verfahren Sie genau so mit den weiteren Tabellen Hersteller, Publikation und Beteiligter. 3.5 Tabellen mit Daten füllen Nachdem man eine Tabelle erstellt kann man die Tabelle mit Daten füllen. Klicken zuerst auf die Tabelle, die Sie mit Daten füllen möchten und Klicken Sie auf die Schaltfläche [Einfügen] Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.5.0.1: xampp011.eps . 50 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.5.0.2: xampp012.eps Ein Klick auf [OK]und schon wird den Datensatz in der Tabelle eingefügt. 51 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 52 Abbildung 3.5.0.3: xampp013.eps Verfahren Sie genau so mit den weiteren Daten der Tabellen Hersteller, Publikation und Beteiligter. 3.6 Exportieren Nachdem Sie die Daten in der Tabelle mühsam eingegeben haben. vielleicht wollen Sie mit den Daten auf ein andere Notebook arbeiten oder gar auf Ihrer USB Stick sichern. XAMPP bietet dazu die sog. Export–Funktion. Klicken Sie nun auf die Datenbank bibliografie_nf in de rLinke Leiste vom XAMPP und klicken Sie danach auf die Button [Exportieren] Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.6.0.1: xampp014.eps . 53 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.6.0.2: xampp015.eps Ein Klick auf [OK]und schon werden alle Daten gesichert. 54 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 55 Abbildung 3.6.0.3: xampp016.eps . 3.7 Importieren Wenn Sie die Datenbank als SQL–Datei haben, könne Sie die Datenbank einfach in XAMPP importieren. Klicken auf [OK]und die Daten einfach in der Maske einfügen Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.7.0.1: xampp017.eps Ein Klick auf [OK]und schon werden alle Daten eingefügt. 56 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.7.0.2: xampp018.eps . 3.8 Daten manipulieren Mit Hilfe von XAMPP lassen sich bereits eingefügten Daten nachträglich aendern, ergänzen oder gar löschen Datenbank, Tabellen– und Spalten kann man mit Hilfe von XAMPP umbenennen und gar löschen Attribute von Spalten lassen mit einigen Mausklicken anpassen. 3.9 Abfrageergebnisse in einer Datei umleiten Manchmal möchte man die Abfrageergebnisse in einer Datei haben. Dies erläutern wir anhand von einem Beispiel Die filgende SQL–Abfrage SELECT fachkraftID, anrede, vorname, nachname FROM Fachkraft 57 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net LIMIT 10 INTO OUTFILE ’SQLErgebnis1.txt’; Abbildung 3.9.0.1: bild0310.eps 58 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 3.9.0.2: bild0311.eps im Ordner C:\xampp\mysql \data\bibliografie\ findet man die Datei SQLErgebnis1.txt mit dem Inhalt 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 Herr Herr Herr Herr Herr Herr Herr Herr Frau Herr Cyrus Achouri Ralf Adams Robert R. Agular Alfred V. Aho Martin Aigner Michael Scholz Helmut Alt Michael Amberg Nina Amenta David R. Anderson man kann auch die Ausgabeordner bestimmen SELECT fachkraftID, anrede, vorname, nachname FROM Fachkraft LIMIT 10 INTO OUTFILE ’c:/FFFFFFF/Skripte/IBABWLDatenbanksysteme/quellcode/kap003/SQLErgebnis2.txt’; 59 Kapitel 4 Datenbanken über xampp 4.1 Tabellen in Datenbank anlegen Wechseln Sie nun zu der neu angelegten Datenbank bibliografie_nf und legen Sie dort eine Tabelle namens Fachkraft mit 4 Spalten. Abbildung 4.1.0.1: xampp006.eps . 60 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.1.0.2: xampp007.eps Als Spalten der Tabelle Fachkraft wählen Sie. • fachkraftID INT • anrede ENUM(’Frau’, ’Herr’) • nachname VARCHAR(250) • vorname VARCHAR(250) 61 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.1.0.3: xampp008.eps Nicht vergessen: Auf [Speichern]klicken. 62 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.1.0.4: xampp009.eps In best–case erhalten Sie. 63 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 64 Abbildung 4.1.0.5: xampp010.eps Verfahren Sie genau so mit den weiteren Tabellen Hersteller, Publikation und Beteiligter. 4.2 Tabellen mit Daten füllen Nachdem man eine Tabelle erstellt kann man die Tabelle mit Daten füllen. Klicken zuerst auf die Tabelle, die Sie mit Daten füllen möchten und Klicken Sie auf die Schaltfläche [Einfügen] Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.2.0.1: xampp011.eps . 65 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.2.0.2: xampp012.eps Ein Klick auf [OK]und schon wird den Datensatz in der Tabelle eingefügt. 66 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 67 Abbildung 4.2.0.3: xampp013.eps Verfahren Sie genau so mit den weiteren Daten der Tabellen Hersteller, Publikation und Beteiligter. 4.3 Exportieren Nachdem Sie die Daten in der Tabelle mühsam eingegeben haben. vielleicht wollen Sie mit den Daten auf ein andere Notebook arbeiten oder gar auf Ihrer USB Stick sichern. XAMPP bietet dazu die sog. Export–Funktion. Klicken Sie nun auf die Datenbank bibliografie_nf in de rLinke Leiste vom XAMPP und klicken Sie danach auf die Button [Exportieren] Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.3.0.1: xampp014.eps . 68 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.3.0.2: xampp015.eps Ein Klick auf [OK]und schon werden alle Daten gesichert. 69 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 70 Abbildung 4.3.0.3: xampp016.eps . 4.4 Importieren Wenn Sie die Datenbank als SQL–Datei haben, könne Sie die Datenbank einfach in XAMPP importieren. Klicken auf [OK]und die Daten einfach in der Maske einfügen Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.4.0.1: xampp017.eps Ein Klick auf [OK]und schon werden alle Daten eingefügt. 71 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Abbildung 4.4.0.2: xampp018.eps . 4.5 Daten manipulieren Mit Hilfe von XAMPP lassen sich bereits eingefügten Daten nachträglich aendern, ergänzen oder gar löschen Datenbank, Tabellen– und Spalten kann man mit Hilfe von XAMPP umbenennen und gar löschen Attribute von Spalten lassen mit einigen Mausklicken anpassen. 72 Kapitel 12 Tabellentypen (Storage–Engines) 12.1 Einführung MySQL bietet verschiedene Tabellentypen bzw. –formate. Als Standard wird MyISAM verwendet, aber daneben gibt es auch InnoDB, BDB, MemoryDB und andere. Dieser Artikel soll die Eigenschaften der verschiedenen Systeme vorstellen und sie miteinander vergleichen. Grundlegend wird in transaktionsbasierte (z.B. InnoDB, BDB, Gemini) und nicht–transaktionsbasierte Formate (z.B. MyISAM, ISAM, HEAP, MERGE) unterschieden. Transaktionen sind untrennbare Blöcke. MyISAM (stellvertetend für nicht–transaktionsorientierte Tabellentypen) • gute Kompatibilität aufgrund der Little–Endian–Architektur. Das bedeutet, dass alle Daten mit dem niederwertigsten Bit zuerst gespeicheichert werden. Dadurch sind die Daten MyISAM maschinen– und betriebssystemunabhängig. • eine MyISAM–Tabelle kann maximal 64 Indizes haben, was sich aber durch Rekompilieren ändern lässt: Ab Version MySQL 5.1.4 kann configure mit der Option with–max–indexes=N aufgerufen werden, wobei N die Höchstzahl der pro MyISAM–Tabelle zulässigen Indizes ist. N muss kleiner oder gleich 128 sein. • Pro Index sind maximal 16 Spalten möglich • Intern wird eine AUTO_INCREMENT–Spalte pro Tabelle unterstützt. Diese Spalte wird bei INSERT– und UPDATE– Operationen automatisch eingefügt. Das macht AUTO_INCREMENT–Spalten schneller (um mindestens 10%) als wenn man das Verwalten der IDs selbst übernimmt. • NULL–Werte in indizierten Spalten sind zulässig. Hierfür werden 0 bis 1 Byte pro Schlüssel gebraucht. InnoDB (stellvertetend für transaktionsorientierte Tabellentypen) • transaktionssicher (inklusive Rollback–, Commit– und Datenwiederherstellungsfähigkeit) • Zeilensperren möglich (statt Tabellensperren bei MyISAM), konsistentes Auslesen (SELECT) ohne Sperren möglich –> Beschleunigung paralleler Abfragen • Unterstützung von Fremdschlüsseln • sehr effiziente Ausnutzung der CPU Memory–Engine (Heap–Tabellen) Diese Tabellen existieren vollständig im RAM. Das ist gleichzeitig Fluch und Segen: • sehr schneller Zugriff • nach Absturz nicht wiederherstellbar 73 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 74 InnoDB, Gemini und BDB sollten dann eingesetzt werden, wenn die Konsistenz der Datenbank auf keinen Fall gefährdet werden darf. Die Daten können nach einem Absturz von MySQL automatisch wiederhergestellt werden. Zugleich stellen Transaktionen sicher, dass nicht mehrere Anwender simultan Datensätze verändern, und sichern damit die Integrität der Datenbank. Verknüpfte Tabellen verweisen nur auf tatsächlich existierende Datensätze und nicht ins Leere. Transaktions–sichere Tabellen sind aber langsamer als das am häufigsten verwendete MyISAM–Format. Noch schneller als diese sind Heap Tables, die vollständig im Speicher residieren, aber nach einem Absturz oder Reboot natürlich verschwunden sind und sich deshalb nur für eine temporäre Datenhaltung eigen. Kapitel 13 Datentypen 13.1 Numerische Typen 13.1.1 Ganze Zahlen . 13.1.2 Fliess– und Festkommazahlen . 13.2 Datum und Uhrzeit 13.2.1 DATE . 13.2.2 TIME . 13.2.3 DATETIME/TIMESTAMP . 13.2.4 YEAR . 75 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 76 13.3 Zeichenkette 13.3.1 CHAR . 13.3.2 VARCHAR . 13.3.3 TEXT . 13.4 Binärdaten Ein BLOB* ist ein binäres grosses Objekt, welches eine variable Menge von Daten aufnehmen kann. Die vier BLOB-Typen sind TINYBLOB, BLOB, MEDIUMBLOB und LONGBLOB. Sie unterscheiden sich lediglich in der maximalen Länge der Werte, die sie aufnehmen können. Beim Speichern und Abrufen von BLOB-Spalten erfolgt keine Wandlung der Gross-/Kleinschreibung. BLOB-Spalten werden als binäre Strings (Byte-Strings) behandelt, BLOB-Spalten haben keinen Zeichensatz, und die Sortierung basiert auf den numerischen Werten der Bytes in den Spaltenwerten. Viele Vorteile ergeben sich aus dem Fakt, dass Informationen (Artikel, Texte etc) zusammen in einer Datenbank abgespeichert werden. Dadurch können Bilder nicht ohne weiteres einfach verwaisen und es wird die Integrität der Daten vereinfacht. Metadaten können ebenfalls problemlos mit den Bildern verknüpft werden. Die Speicherung in einer Datenbanken bringt aber auch noch andere Vorteile mit sich. So können sehr schnell und einfach Load-Balancing-Systeme auf Datenbank-Ebene eingeführt werden. Eine Portierung von einem System auf ein anderes ist ebenfalls sehr einfach, da einfach ein Backup der Datenbank erstellt und auf einen anderen Server übertragen werden kann - die Anwendung ist dann sofort wieder einsatzbereit. Auch ist die Rechteverwaltung innerhalb einer Datenbank leichter umzusetzen, als auf Dateisystem-Ebene. Das Auslesen von Bildern aus einer Datenbank ist im Gegensatz zu einem direkten Zugriff auf das Dateisystem deutlich langsamer, da zunächst immer die Datenbankabfrage durchgeführt werden muss. Zudem kann ein Browser die Bilder nicht ohne weiteres zwischenspeichern, da der Webserver nicht erkennen kann, ob das Bild seit dem letzten Besuch verändert wurde. Die Backup-Strategie muss auch angepasst werden, da Bilder in Datenbanken als BLOBs (Binary Large Objects) abgelegt werden. Dadurch ist es nicht mehr so einfach möglich, textbasierte, inkrementelle Sicherungen zu erstellen. Diese Nachteile können jedoch durch intelligente Lösungen drastisch reduziert werden. So kann man z.B. per PHP-Script überprüfen, ob sich das Bild in der Datenbank verändert hat und entsprechende Header zurückgeben. Für die Datenbank-Sicherung kann z.B. ein Point-in-Time Recovery verwendet werden. * Binary Large Object; dabei steht CLOB für Character Large Objects Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 77 13.5 Zusammenfassung . Datentyp Beshreibung Wertebereich CHAR(m) 0. . . 255 Zeichen VARCHAR(m) 0. . . 255 Zeichen TEXT 0. . . 65535 Zeichen DATE 1000-01-01. . . 9999-12-31 TIME -838:59:59. . . 838:59:59 TIMESTAMP 1970-01-01 00:00:00. . . 2037-1231 23:59:59 DATETIME 1000-01-01 00:00:00. . . 9999-1231 23:59:59 YEAR BOOL, BOOLEAN: 1901. . . 2155 INTEGER(m) INT(m) FLOAT(M,D) DECIMAL(M,D) DOUBLE(M,D) REAL(M,D) Synonym für DOUBLE BOOLEAN 0,1 bzw. true, false BLOB(m) 0. . . 65535 Bytes Diese Typen sind Synonyme für TINYINT(1). Der Wert Null wird als falsch ausgewertet, Werte ungleich null als wahr. Die Implementierung der vollständigen Verarbeitung boolescher Typen entsprechend dem SQL-Standard ist für die Zukunft vorgesehen. 13.6 ENUMs und SETs SET(m): 64 Elemente mit 0. . . 255 Zeichen. A consequence of this is that SET member values should not themselves contain commas. in der SQL–Datei Werte von SET ohne Zwischenräume eingeben; also etwa a,b,c nicht aber a,b,c 13.7 Geometrieobjekte Geometrieobjekte wie POINT, GEOMETRY werden in einer separate Kapitel behandelt 13.8 Nullwerte DATETIME ’0000-00-00 00:00:00’ DATE ’0000-00-00’ Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net TIMESTAMP ’0000-00-00 00:00:00’ TIME ’00:00:00’ YEAR 0000 In JDBC kann mit jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull in NULL konvertiert werden 78 Kapitel 19 Datenbankstrukturen bisher haben wir uns kurz mit Änderung, Einfügen und Anzeigen von Daten beschäftigt. Nun wollen wir ein kurze Einführung in die Tabellentechnik beschäftigt. 19.1 Tabellenanlegen Mit dem Kommando CREATE TABLE kann man eine Tabelle in einer Datenbank erzeugen. . Um eine Tabelle zu erzeugen, müssen Sie u.a. eine Tabellenname und Spaltenname (inkl. deren datentypen) ausdenken. Tabellenname und Spaltenname sind sog. Bezeichner in MySQL und die unterlegen u.a. folgende Regeln 19.2 Erlaubte Zeichen und Namenslänge Syntax 19.2.0.1: <alias>::=ncs {a- z|A- Z|0- 9|\$}1,256 | ‘ <keyword>‘ /* der <alias> darf jedoch nicht ausschliesslich aus Ziffern bestehen */ . Syntax 19.2.0.2: <bezeichner>::=ncs {a- z|A - Z|0- 9|_|\$}1,256 | ‘ <keyword>‘ /* der <bezeichner> darf jedoch nicht ausschliesslich aus Ziffern bestehen */ . 79 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 80 der Bezeichner darf jedoch nicht ausschliesslich aus Ziffern bestehen gültige Namen: buch, buch_titel, buch10, 1buch12, $buch, ungültige Namen: 123456, buch titel, buch(10), Ferner darf ein Bezeichner nicht ausschliesslich aus sog. MySQL reservierte Wörter bestehen, Es sei dann in Accent grave–Zeichen eingeschlossen werden. Das Accent grave–Zeichen erreichen Sie bei Alt + Num 9 + Num 6 auf dem Nummernblock Einige MySQL reservierte Wörter sind in folgenden Tabelle aufgelistet. Anweisung Beschreibung GRANT Zugriffsrechte festlegen REVOKE Zugriffsrechte aufheben CREATE DATABASE Datenbank anlegen DROP DATABASE Datenbank löschen USE Datenbank auswählen SHOW DATABASES Datenbanken anzeigen CREATE USER Datenbankbenutzer einrichten DROP USER Datenbankbenutzer löschen CREATE TABLE Tabellenstruktur anlegen DROP TABLE Tabellenstruktur löschen ALTER TABLE Tabellenstruktur verändern SHOW TABLES Tabellenstruktur anzeigen EXPLAIN Datenbanken anzeigen DROP DATABASE Datenbank löschen CREATE INDEX Index anlegen DROP INDEX Index löschen CREATE PROCEDURE Prozedur definieren DROP PROCEDURE Prozedur löschen CREATE FUNCTION Funktion definieren DROP FUNCTION Funktion löschen CREATE TRIGGER Trigger definieren DROP TRIGGER TRigger löschen SELECT Datenbankabfragen INSERT Datensätze in Tabellen einfügen DELETE Datensätze aus Tabellen löschen UPDATE Einträge in Datenfeldern verändern Tabelle 19.2.0.1: Einige MySQL reservierte Wörter 19.3 Gross- und Kleinschreibung Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 81 Element Regel SQL Schlüsselwörter Gross- und Kleinschreibung wird nicht unterschieden Datenbank-/Tebellennamen Gross- und Kleinschreibung hängt vom Betriebssystem ab: Unter UNIX wird Gross- und Kleinschreibung unterschieden, unter Windows dagegen nicht Spaltennamen Gross- und Kleinschreibung wird nicht unterschieden Indexnamen Gross- und Kleinschreibung wird nicht unterschieden Aliasnamen Gross- und Kleinschreibung wird unterschieden Tabelle 19.3.0.1: Gross- und Kleinschreibung bezeichnerMit255Zeichen= azaVa5aFadaiaLaXa_akaxaQa1aPa7aBaCa5aLaLaqahaBapa7azaUaSaIaVaKaaa3ayaLaDaQa5alanaSakasaCaqaXa0a9aCaz aealaWaCaeaza1ajaWapa9abaEaTaGakasa3ayaCaRa_aKahagaKaqaTa1ataoaTaBaZaNa6azaGama8aKaraZaraGaoa$a4araB aRaaahagaAaoa9anaAa6a2a0a9abaRaba1alaNaKa7aka7aIaSa8azaxaKa0adagaJajaXanaUaTaDaBaKaFaNaEa0aCa1aDaNa5 aCa6azaVataCaMagadaVaraya_ahamaVaFaNaVaRaZaUa6aKafahaWaGaqa3agaXamadaRa9aDaBaVa3aha9aDa9a$akabaDaqai aQa2aNaSaKa$aEaWafaJaNa0ajaGaJaeaSaBaiaLa9a5aTaqaYaNazaGagaTafara3aRaBaZaiaoasaiaLacaWaqaaacacaHaba$ apaHaNaG C C C C C 19.4 Konventionen zur Namenvereibarungen MySQL–Schlüsselwörter sind unabhängig von der verwendeten Gross– und Kleinschreibung. Dieses Skript verwendet ausschliesslich zur besseren Kenntlichmachung Grossschreibung. In MySQL ist neben den sonst üblichen Zeichen* auch ein Dollarzeichen in Bezeichnern erlaubt. Jedoch wird von der Verwendung des Dollarzeichens in Namen abgeraten. Das Dollarzeichen sollte nur für Namen verwendet werden, die in bestimmten maschinell erzeugtem Quellcode definiert werden. Es werden grundsätzlich sprechende Bezeichner verwendet, d. h., solche, die bereits deutlich auf ihre Bedeutung schliessen lassen. Das gilt auch, falls die Bezeichner dadurch recht lang geraten. Die Namen der einfachen Datentypen wie INT VARCHAR usw. werden vollständig gross geschrieben (INT, CHAR, VARCHAR, . . . ). Bezeichner von Tabellenname/Views haben stets einen grossen Anfangsbuchstaben und werden ansonsten klein geschrieben. Wenn der Bezeichner sich aus mehreren Wörtern zusammensetzt, werden die jeweiligen Anfangsbuchstaben gross geschrieben (MeineTabelleNummerEins). Bezeichner Spaltenname, Trigger, Funktionen, Prozeduren beginnen stets mit einem Kleinbuchstaben. Setzt sich der Bezeichner aus mehreren Wörten zusammen, so werden die Anfangsbuchstaben der weiteren Wörter gross geschrieben (dieSpalteVonEinerTabelle). FOREIGN KEY werden wie folgend geschrieben: Tabellename_indexname_fore. Besteht ein indexname aus mehrere Wörtern, so werden diese hintereinander geschrieben. FULL KEY werden wie folgend geschrieben: Tabellename_indexname_full. Besteht ein indexname aus mehrere Wörtern, so werden diese hintereinander geschrieben. * Windows verbietet im Dateinamen die folgenden Zeichen / \: * ? "<>|. Länge des Dateinamens 255 Zeichen. Ebenfalls unzulässig sind folgende, wie schon zuvor als Gerätenamen reservierte Dateinamen: CON, PRN, AUX, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, und LPT9. Die Dateibezeichnung NUL.txt ist also unzulässig. Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 82 SPATIAL KEY werden wie folgend geschrieben: Tabellename_indexname_spat. Besteht ein indexname aus mehrere Wörtern, so werden diese hintereinander geschrieben. INDEX werden wie folgend geschrieben: Tabellename_indexname_ind. Besteht ein indexname aus mehrere Wörtern, so werden diese hintereinander geschrieben. Datenbanknamen sind kleingeschrieben. Besteht ein Datenbankname aus mehrere Wörtern, so werden diese durch Unterstrich (_) geteilt. meine_erste_datenbank Werden mehrere Tabellen in einer einzigen Abfrage verbunden, muss herauszufinden sein, welche Tabelle gemeint ist, wenn in den Klauseln SELECT, WHERE, GROUP BY, HAVING und ORDER BY Spalten angesprochen werden. Wenn Sie eine Tabelle ausserhalb der FROM–Klausel referenzieren, haben Sie zwei Möglichkeiten • Sie verwenden den vollständigen Namen der Tabelle, wie in Student.hauptfach. • Sie weisen den Tabellen Aliasnamen zu und verwenden in der Abfrage die Aliase. Tabellen–Kürzel wird in Kleinschreibung: SELECT . . . FROM Student st. . . Namen für Tabellen und Co werden grundsätzlich in Singular und sind möglichst aussagefähig sein bezüglich der inhaltlich Bedeutung. Zeichenketten werden in einfache Anführungszeichen gesetzt. Auch doppelte Anführungszeichen sind erlaubt, haben aber den Nachteil, dass Sie diese als Sonderzeichen mit einem vorangestellten Backslash (\) maskieren müssen, wenn Sie die SELECT–Kommandos in PHP bzw. Java als Zeichenkette zusammensetzen oder einfach bei INSERT–Kommandos Einzeilige Kommentare können in SQL mit doppelter Bindestrich (- -) vorangestellt. Bei MySQL erfordert der Kommentarstil - - (doppelter Bindestrich) mindestens ein nachfolgendes Whitespace- oder Steuerzeichen (z. B. ein Leerzeichen, einen Tabulator, einen Zeilenwechsel usw.). Diese Syntax unterscheidet sich leicht von der SQL-Standardkommentarsyntax. Mehrzeilige Kommentare müssen mit /* und */ 19.5 Tabellenstruktur abfragen Mit der MySQL Abfrage EXPLAIN Ort; erhält man. COLUMN_NAME COLUMN_TYPE IS_NULLABLECOLUMN_KEYCOLUMN_DEFAULT EXTRA plz varchar(13) NO PRI NULL geoBreite decimal(9,6) NO NULL geoLaenge decimal(9,6) NO NULL Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . Mit der MySQL Abfrage SHOW COLUMNS FROM Ort; erhält man. COLUMN_NAME COLUMN_TYPE IS_NULLABLECOLUMN_KEYCOLUMN_DEFAULT EXTRA plz varchar(13) NO PRI NULL geoBreite decimal(9,6) NO NULL geoLaenge decimal(9,6) NO NULL 19.6 Eine Spalte in einer Tabelle hinzufügen, ändern, entfernen Mit der MySQL Abfrage ALTER TABLE Ort ADD COLUMN status VARCHAR(200) AFTER plz; kann man die Spalte status in der Tabelle Ort hinzufügen, und zwar nach die Spalte plz. . Mit der MySQL Abfrage ALTER TABLE Ort CHANGE COLUMN status verwaltung ENUM(’Gosser Stadt’, ’klein Dorf’, ’Landeshaupstadt’, ’Bundeshauptstadt’) FIRST; kann man die Spalte status der Tabelle Ort in verwaltung umbenennen. . Mit der MySQL Abfrage ALTER TABLE Ort DROP COLUMN verwaltung; kann man die Spalte verwaltung aus der Tabelle Ort entfernen. . . 19.7 Tabelle kopieren Mit der MySQL Abfrage CREATE TABLE Chat2 SELECT * FROM Chat; kann man die Tabelle aus einer andere Tabelle erzeugen. . Mit der MySQL Abfrage SHOW CREATE TABLE Chat; erhält man. 83 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Table Create Table Chat CREATE TABLE ‘chat‘ ( Break ‘chatID‘ bigint(20) NOT NULL AUTO_INCREMENT, Break ‘student1‘ char(15) NOT NULL, Break ‘student2‘ char(15) NOT NULL, Break ‘datumUndZeit‘ timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, Break PRIMARY KEY (‘chatID‘), Break KEY ‘Chat_student1_fore‘ (‘student1‘), Break KEY ‘Chat_student2_fore‘ (‘student2‘), Break CONSTRAINT ‘Chat_student1_fore‘ FOREIGN KEY (‘student1‘) REFERENCES ‘student‘ (‘studentID‘) ON DELETE CASCADE ON UPDATE CASCADE, Break CONSTRAINT ‘Chat_student2_fore‘ FOREIGN KEY (‘student2‘) REFERENCES ‘student‘ (‘studentID‘) ON DELETE CASCADE ON UPDATE CASCADE Break ) ENGINE=InnoDB AUTO_INCREMENT=10000785 DEFAULT CHARSET=utf8 84 . Mit der MySQL Abfrage SHOW CREATE TABLE Chat2; erhält man. Table Create Table Chat2 CREATE TABLE ‘chat2‘ ( Break ‘chatID‘ bigint(20) NOT NULL DEFAULT '0', Break ‘student1‘ char(15) CHARACTER SET utf8 NOT NULL, Break ‘student2‘ char(15) CHARACTER SET utf8 NOT NULL, Break ‘datumUndZeit‘ timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP Break ) ENGINE=InnoDB DEFAULT CHARSET=latin1 Vergleich man die Tabellendesign der Original– und Kopietabelle, so stellt man fest, dass beim Kopieren des Indizes, das AUTO_INCREMENT–Attribut fuer die Spalte chatID sowie einige TIMESTAMP–Attribut verloren gegangen sind. Ausserdem hat sich der Tabellentyp von InnoDB zu MyISAM geändert. Um solche ungewollten Änderungen in der Tabellenstruktur zu vermeiden, kann man die neue Tablle aus der alten Tabelle wie folgend erzeugen CREATE TABLE Chat3 LIKE Chat; . . Mit der MySQL Abfrage SHOW CREATE TABLE Chat; erhält man. Table Create Table Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Chat 85 CREATE TABLE ‘chat‘ ( Break ‘chatID‘ bigint(20) NOT NULL AUTO_INCREMENT, Break ‘student1‘ char(15) NOT NULL, Break ‘student2‘ char(15) NOT NULL, Break ‘datumUndZeit‘ timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, Break PRIMARY KEY (‘chatID‘), Break KEY ‘Chat_student1_fore‘ (‘student1‘), Break KEY ‘Chat_student2_fore‘ (‘student2‘), Break CONSTRAINT ‘Chat_student1_fore‘ FOREIGN KEY (‘student1‘) REFERENCES ‘student‘ (‘studentID‘) ON DELETE CASCADE ON UPDATE CASCADE, Break CONSTRAINT ‘Chat_student2_fore‘ FOREIGN KEY (‘student2‘) REFERENCES ‘student‘ (‘studentID‘) ON DELETE CASCADE ON UPDATE CASCADE Break ) ENGINE=InnoDB AUTO_INCREMENT=10000785 DEFAULT CHARSET=utf8 . Mit der MySQL Abfrage SHOW CREATE TABLE Chat3; erhält man. Table Create Table Chat3 CREATE TABLE ‘chat3‘ ( Break ‘chatID‘ bigint(20) NOT NULL AUTO_INCREMENT, Break ‘student1‘ char(15) NOT NULL, Break ‘student2‘ char(15) NOT NULL, Break ‘datumUndZeit‘ timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, Break PRIMARY KEY (‘chatID‘), Break KEY ‘Chat_student1_fore‘ (‘student1‘), Break KEY ‘Chat_student2_fore‘ (‘student2‘) Break ) ENGINE=InnoDB DEFAULT CHARSET=utf8 . Bemerkung 19.7.0.1 Wenn Sie eine Tabelle erzeugen (CREATE TABLE) oder ändern (ALTER TABLE) führt MySQL u.U. automatische Änderung am Tabellendesign durch. Die folgende Liste fasst einige Designänderungen zusammen, die MySQL durchführt • VARCHAR(n)–Spalten mit n ≤ 4 werden in CHAR(n)–Spalten umgewandelt • CHAR(n)–Spalten mit n > 3 werden in VARCHAR(n)–Spalten umgewandelt, falls weitere VARCHAR–, TEXT– oder BLOB–Spalten gibt • Bei TIMESTAMP–Spalten werden die Attribute NULL bzw. NOT NULL eliminiert • Bei PRIMARY KEY–Spalten wird automatisch das Attribut NOT NULL hinzugefügt • Wenn Sie keinen DEFAULT–wert für die Spalte einfügen, definiert MySQL selbst eine passende Wert Mehr dazu unter https://dev.mysql.com/doc/refman/5.0/en/silent-column-changes.html Mit der MySQL Abfrage INSERT INTO Chat3 SELECT * FROM Chat; kopiert man die Daten von Tabelle Chat lassen sich in die Tabelle Chat3. . Mit der MySQL Abfrage Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net SELECT * FROM Chat3; erhält man. chatID student1 student2 datumUndZeit 10000719 ry307-0065-8575 sv377-8994-1980 2016-07-12 09:53:39.0 10000720 ry307-0065-8575 sv377-8994-1980 2015-07-08 07:00:48.0 10000721 ap256-3212-3933 tr133-3852-1694 2015-07-12 04:34:31.0 10000722 ap256-3212-3933 tr133-3852-1694 2015-07-02 23:57:35.0 10000723 mh303-5086-2257 vu769-2638-9984 2015-07-14 02:33:27.0 10000724 mh303-5086-2257 vu769-2638-9984 2015-07-25 13:39:47.0 10000725 ap256-3212-3933 tr133-3852-1694 2015-07-27 07:07:02.0 10000726 ap256-3212-3933 tr133-3852-1694 2015-07-15 17:25:55.0 10000727 rf900-2826-3516 wm793-9705-1200 2016-07-06 07:01:57.0 10000728 rf900-2826-3516 wm793-9705-1200 2015-07-23 05:41:28.0 10000729 xn096-9487-6455 qb395-9858-6804 2015-07-24 00:54:58.0 10000730 xn096-9487-6455 qb395-9858-6804 2015-07-23 08:20:30.0 10000731 kz977-7624-2277 zr166-3038-2048 2015-07-05 18:35:23.0 10000732 kz977-7624-2277 zr166-3038-2048 2015-07-08 08:52:20.0 10000733 rf900-2826-3516 ap256-3212-3933 2016-07-26 23:38:32.0 10000734 rf900-2826-3516 ap256-3212-3933 2015-07-26 19:27:23.0 10000735 wq561-0592-3410 sv377-8994-1980 2016-07-08 09:57:20.0 10000736 wq561-0592-3410 sv377-8994-1980 2015-07-03 15:49:12.0 10000737 xn096-9487-6455 da363-9840-1688 2015-07-12 01:41:36.0 10000738 xn096-9487-6455 da363-9840-1688 2015-07-09 00:30:31.0 10000739 da363-9840-1688 gg525-7926-7879 2015-07-15 05:24:53.0 10000740 da363-9840-1688 gg525-7926-7879 2015-07-25 20:56:09.0 10000741 tr133-3852-1694 mh303-5086-2257 2015-07-05 19:15:36.0 10000742 tr133-3852-1694 mh303-5086-2257 2015-07-06 06:18:43.0 10000743 ui175-6966-6040 sv377-8994-1980 2016-07-08 15:43:17.0 10000744 ui175-6966-6040 sv377-8994-1980 2015-07-05 15:24:03.0 10000745 xn096-9487-6455 mh303-5086-2257 2015-07-17 18:27:03.0 10000746 xn096-9487-6455 mh303-5086-2257 2015-07-21 14:51:19.0 10000747 fn610-3893-2306 ap256-3212-3933 2015-07-27 11:57:00.0 10000748 fn610-3893-2306 ap256-3212-3933 2015-07-25 22:12:13.0 10000749 ry307-0065-8575 zr166-3038-2048 2015-07-25 06:23:41.0 10000750 ry307-0065-8575 zr166-3038-2048 2015-07-19 05:07:24.0 10000751 rx816-9173-9273 vu769-2638-9984 2016-07-20 00:54:56.0 10000752 rx816-9173-9273 vu769-2638-9984 2015-07-21 05:41:21.0 10000753 md503-8006-7828 gg525-7926-7879 2015-07-27 13:09:27.0 10000754 md503-8006-7828 gg525-7926-7879 2015-07-23 23:43:29.0 10000755 qb395-9858-6804 da363-9840-1688 2015-07-19 08:58:11.0 10000756 qb395-9858-6804 da363-9840-1688 2015-07-03 15:21:57.0 10000757 ry307-0065-8575 mh303-5086-2257 2014-07-12 11:56:22.0 10000758 ry307-0065-8575 mh303-5086-2257 2015-07-24 07:55:57.0 86 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 10000759 xn096-9487-6455 mh303-5086-2257 2015-07-11 20:04:42.0 10000760 xn096-9487-6455 mh303-5086-2257 2015-07-09 00:37:11.0 10000761 tr133-3852-1694 ap256-3212-3933 2015-07-25 19:04:48.0 10000762 tr133-3852-1694 ap256-3212-3933 2015-07-16 20:56:56.0 10000763 qb395-9858-6804 md503-8006-7828 2014-07-13 21:21:09.0 10000764 qb395-9858-6804 md503-8006-7828 2015-07-04 16:16:42.0 10000765 zr166-3038-2048 sv377-8994-1980 2016-07-24 10:55:30.0 10000766 zr166-3038-2048 sv377-8994-1980 2015-07-07 16:24:51.0 10000767 vw937-4659-4381 fn610-3893-2306 2014-07-09 10:17:59.0 10000768 vw937-4659-4381 fn610-3893-2306 2015-07-15 05:18:54.0 10000769 ui175-6966-6040 xn096-9487-6455 2015-07-15 00:58:13.0 10000770 ui175-6966-6040 xn096-9487-6455 2015-07-17 00:09:12.0 10000773 qa922-4226-3460 ry307-0065-8575 2015-07-08 20:21:11.0 10000774 qa922-4226-3460 ry307-0065-8575 2015-07-16 12:09:28.0 10000775 kz977-7624-2277 rx816-9173-9273 2016-07-10 17:23:54.0 10000776 kz977-7624-2277 rx816-9173-9273 2015-07-06 03:33:27.0 10000777 kz977-7624-2277 tr133-3852-1694 2015-07-16 17:51:11.0 10000778 kz977-7624-2277 tr133-3852-1694 2015-07-18 00:45:47.0 10000779 rx816-9173-9273 sv377-8994-1980 2016-07-16 20:41:22.0 10000780 rx816-9173-9273 sv377-8994-1980 2015-07-19 10:15:06.0 10000783 qy806-8809-2873 md503-8006-7828 2014-07-16 19:28:17.0 10000784 qy806-8809-2873 md503-8006-7828 2015-07-03 11:35:15.0 . 19.8 Typ der Tabelle ändern Mit der MySQL Abfrage ALTER TABLE Chat3 ENGINE MyISAM; kann man den Typ der Tabelle ändern. . Mit der MySQL Abfrage SHOW CREATE TABLE Chat3; erhält man. Table Create Table Chat3 CREATE TABLE ‘chat3‘ ( Break ‘chatID‘ bigint(20) NOT NULL AUTO_INCREMENT, Break ‘student1‘ char(15) NOT NULL, Break ‘student2‘ char(15) NOT NULL, Break ‘datumUndZeit‘ timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, Break PRIMARY KEY (‘chatID‘), Break KEY ‘Chat_student1_fore‘ (‘student1‘), Break KEY ‘Chat_student2_fore‘ (‘student2‘) Break ) ENGINE=MyISAM AUTO_INCREMENT=10000785 DEFAULT CHARSET=utf8 87 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 88 . 19.9 Tabelle leeren, löschen Mit der MySQL Abfrage DELETE FROM Chat2; kann man die Tabelle Chat2 leere. . Mit der MySQL Abfrage DROP TABLE Chat2; kann man die Tabelle Chat2 löschen. . Mit der MySQL Abfrage DROP TABLE Chat3; kann man die Tabelle Chat3 direkt löschen, ohne vorher zu leeren. . . 19.10 Tabelle prüfen und reparieren Tabellen bzw. die Dateien, die Tabellendaten speichern, sind hoch dynamisch Objekte. Sie werden in der Regel sehr häufig geändert und müssen daher regelmässig ganz oder teilweise auf die Festplatte geschrieben werden. Wenn dabei unvorhergesehene Ereignisse auftreten, etwa Absturz des Systems, wird möglicherweise auch die Tabelle beschädigt. Ein solcher Zwischenfall muss keinen vollständigen Datenverlust zur Folge haben. Nicht selten lassen sich die meisten Daten noch retten. Für die Prüfung und Reparatur stellt MySQL daher die Befehle CHECK und REPAIR zur Verfügung CHECK gilt sowohl für MyISAM als auch InnoDB Tabell Syntax 19.10.0.1: <CHECK TABLE>::=ncs CHECK TABLE <tbl_name>[, <tbl_name>] * ( FOR UPGRADE ? QUICK ? FAST ? CHANGED ? MEDIUM ? EXTENDED ? ) . REPAIR gilt sowohl für MyISAM als auch InnoDB Tabell Syntax 19.10.0.2: <REPAIR TABLE>::=ncs REPAIR[ NO_WRITE_TO_BINLOG|LOCAL ] TABLE <tbl_name>[, <tbl_name>] * [ QUICK ] [ EXTENDED ] [ USE_FRM ] Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 19.11 ganze Datenbank löschen Mit dem SQL Kommando Syntax 19.11.0.1: <DROP DATABASE>::=ncs DROP{DATABASE|SCHEMA }[ IF EXISTS ] <db_name> . kann man eine ganze Datenbank löschen 89 Kapitel 20 Primärschlüssel 20.1 Einführung Der Primärschlüssel – PRIMARY KEY mit PK als gängiger Abkürzung ist das wichtigste Mittel, mit dem die Datenbank alle Einträge verwaltet. Ohne PK sind weder Änderungen noch Löschungen einzelner Datensätze möglich, ohne alle Spalten anzugeben. Im praktischen Einsatz haben Tabellen ohne Primärschlüssel keinen Sinn. Fremdschlüssel (FOREIGN KEYs, FK) wären ohne Primärschlüssel nicht möglich.. Als Primärschlüssel geeignet sind folgende Arten von Spalten: • der Datentyp GUID • eine Spalte mit einem INTEGER-Datentyp, der als AUTO_INCREMENT verwendet wird oder ersatzweise durch eine SEQUENCE bestimmt wird Die Beispieldatenbank benutzt ausnahmslos eine solche Spalte namens ID. • eine Spalte mit einem INTEGER-Datentyp, sofern die Werte nach Lage der Dinge eindeutig sind und während der Lebenszeit der Datenbank nicht mehr geändert werden. Die Beispieldatenbank enthält in der Tabelle Mitarbeiter die Spalte Personalnummer. Diese ist eigentlich eindeutig und dürfte deshalb als PK verwendet werden. Da die Firma aber ihre interne Struktur ändern und die Personalnummern anpassen könnte, scheidet diese Spalte als PK aus. • eine Kombination aus zwei Spalten, von denen jede dem PK jeweils einer anderen Tabelle entspricht, wenn die neue Tabelle nur die Zuordnungen zwischen den beiden anderen Tabellen darstellt. Die Tabelle Zuordnung_SF_FZ der Beispieldatenbank enthält die Zuordnungen Fahrzeuge/Schadensfälle; anstelle einer eigenen ID wäre auch ein Primärschlüssel aus Fahrzeug_ID plus Schadensfall_ID möglich und sinnvoll. Als Primärschlüssel ungeeignet oder unmöglich sind folgende Arten von Spalten: • Unmöglich sind sämtliche Spalten, bei denen mehrere Datensätze mit dem gleichen Wert vorkommen können. • Unmöglich ist eine Kombination von Name/Vorname bei allen Tabellen mit Namen, weil über kurz oder lang ein Müller, Hans doppelt vorkommen dürfte. • Auch eine Kombination von Name/Vorname/Geburtstag scheidet aus dem gleichen Grund aus. • Eine Kombination von Name/Geburtstag/Region/lfdNr. (ähnlich wie bei der Versicherungsnummer der deutschen Rentenversicherung) ist zwar eindeutig, aber als Kombination von vier Spalten äusserst unpraktisch. • Eine Spalte, deren Werte sich ändern können, ist zwar möglich, aber nicht geeignet. Das gilt z.B. für das Kfz-Kennzeichen, aber auch (wie schon gesagt) für etwas wie die Personalnummer. Der Primärschlüssel kann wie folgt festgelegt werden: • im CREATE TABLE-Befehl bei einer einzelnen Spalte als Zuordnung für diese Spalte • im CREATE TABLE-Befehl in der Liste der CONSTRAINT 90 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 91 • im ALTER TABLE-Befehl durch ADD CONSTRAINT: Die Tabelle erhält zunächst noch keinen PK, auch wenn das durch AUTO_INCREMENT suggeriert und vorbereitet wird. Vielmehr wird der PK anschliessend (mit eigenem Namen) definiert; der Vermerk in Klammern führt die Spalten auf, die als PK verwendet werden. versuchen wir einen neuen Student unter desselbe primary key eines schon vorhandenen Studenten einzufügen INSERT INTO Student VALUES (aep256-3212-3933", "Frau", "Mariechen", "Chaney", "1990-02-20", \"{A}rabienstrasse 97", "CH-1273", "Basel", "Schweiz", "SS2012", "Bioinformatik", "FB04", "[email protected]", "Kurdisch,Maltesisch", "Wasserski,Segeln", NULL, "M\_SYq|JBYb"); so erhalten wir. . Mit der MySQL Abfrage SHOW WARNINGS; erhält man. Level Code Message Error 1062 Duplicate entry 'ap256-3212-3933'for key 'PRIMARY' Level Code Message Error 1062 Duplicate entry 'ap256-3212-3933'for key 'PRIMARY' . Mit der MySQL Abfrage SHOW ERRORS; erhält man. . 20.2 Primärschlüssel über mehrere Spalten . Kapitel 21 Referenzielle Integrität 21.1 Foreign–Key–Regeln referenzielle Integrität betrifft den Gebrauch von Fremdschlüssel. In unserer Tabelle Student kommt pLZ als Fremdschlüssel vor. Wenn Sie aus der Tabelle Ort einen Ort x löschen, werden wir in der Folge bei vielen SQL–Abfragen Probleme bekommen, die auf die Studenten y des Orts x zugreifen: um sicher zu stellen, dass in dieser Tabelle nur gültige verweise stehen, müssen wir die Regel der referentziellen Integrität anwenden. Referenzielle Integrität bedeutet, dass jeder von Null abweichende Wert in einem Fremdschlüsselattribut auch in der Relation vorkommen muss, in der dieses Attribut als Primärschlüssel auftritt. Wir können also keine pLZ in Student haben, die nicht auch in Ort vorkäme. Aber wir können Studenten haben, mit NULL als pLZ. Als Datenbankentwickler sind Sie dafür verantwortlich, dass so etwas nicht passieren kann. Sie müssen also vor dem Löschen eines Datensatzes immer überprüfen, ob es nicht in einer anderen Tabelle einen Verweis auf gerade diesen Datensatz gibt. Da auf Programmierer nicht immer Verlass ist (und Datenbanken manchmal auch manuell verändert werden müssen), sehen viele Datenbanken Regeln zur Einhaltung der referenziellen Integrität vor. So genannte Foreign–Key–Regeln (Integritätsregeln) überprüfen bei jeder Veränderung der Datenbank, ob dadurch Querverweise zwischen Tabellen betroffen sind. Je nach Deklaration des Fremdschlüssels gibt es dann vier mögliche Konsequenzen: 1. NO ACTION: Dieses Verfahren unterbindet jegliche Änderung eines Primärschlüssels, solange Fremdschlüsselreferenzen darauf existieren. Es wäre dann verboten, pLZ aus der Tabelle Ort zu entfernen oder zu ändern. Man kann nur pLZ von solchen Orten ändern oder löschen, für die keine Einträge in Student existieren 2. CASCADE: Hierbei setzt man die Änderung an der ursprünglichen Zeile auf alle Zeilen in allen referenzierenden Tabellen fort. Daraus ergeben sich auch Konsequenzen für die Reihenfolge von Operationen: Wenn Sie einen neuen pLZ für einen neuen Student speichern möchten, müssen Sie zuerst die pLZ und dann den Student eintragen. Wenn Sie Student und pLZ wieder löschen möchten, müssen Sie dagegen zuerst den Student und dann die pLZ löschen. (Letzteres ist natürlich nur möglich, wenn es keinen anderen Student gibt, der in diesem pLZ erschienen ist 3. SET NULL: Hiermit erlaubt man die Änderung oder Löschung in der ursprünglichen Tabelle. Um die referenzielle Integrität zu erhalten, werden danach alle entsprechenden Werte von Fremdschlüsseln auf Null gesetzt. 4. RESTRICT ist das Defaultverhalten. Das DELETE–Kommando verursacht einen Fehler, der Datensatz wird nicht gelöscht. (Durch den Fehler kommt es übrigens nicht automatisch zum Ende einer gerade laufenden Transaktion. Das Kommando wird einfach nicht ausgeführt. Die Transaktion muss wie üblich durch COMMIT oder ROLLBACK abgeschlossen werden.) Auch MySQL bietet einen derartigen Kontrollmechanismus, momentan allerdings nur dann, wenn Sie InnoDB–Tabellen einsetzen. Ein Fremdschlüssel kann während des Datenbankdesign 92 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Syntax 21.1.0.1: <FOREIGN KEY Constraints>::=ncs [ CONSTRAINT[ <symbol>] ] FOREIGN KEY [ <index_name>] \( <index_col_name>[ , <index_col_name>] * \) REFERENCES <tbl_name>\( <index_col_name>[ , <index_col_name>] * \) [ ON DELETE <reference_option>] [ ON UPDATE <reference_option>] . oder nachträglich Syntax 21.1.0.2: <Fremdschlussel KEY in einer Tabelle einfuegen>::=ncs ALTER TABLE[ <tbl_name>] ADD CONTRAINT[ <contraintBezeichnung>] [ FOREIGN KEY [ <fremdschlusselBezeichnung>] \( <col_name>\) REFERENCES <tbl_name>\( <index_col_name>[ , <index_col_name>] * \) [ ON DELETE <reference_option>] [ ON UPDATE <reference_option>] ]+ . eingerichtet werden Diese vier Aktionen auch können angegeben werden (wobei per Default RESTRICT gilt). 21.2 INSERT und Referenzielle Integrität Wir wollen nun die Studentin INSERT INTO Student VALUES ("mc121-0102-0386", "Frau", "Mariechen", "Chaney", "1990-02-20", \"{A}rabienstrasse 97", "CH-1273", "Basel", "Schweiz", "SS2012", "Bioinformatik", "FB04", "[email protected]", "Kurdisch,Maltesisch", "Wasserski,Segeln", NULL, "M\_SYq|JBYb"); . . inklusive ihren Ort INSERT INTO Ort SET 93 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net pLZ="CH-1273", geoBreite=134.12, geoLaenge=23.45; . in unserem Datenbank einfügen Versuchen wir zuerst den Datensatz der Studentin einzufügen. INSERT INTO Student VALUES ("mc121-0102-0386", "Frau", "Mariechen", "Chaney", "1990-02-20", \"{A}rabienstrasse 97", "CH-1273", "Basel", "Schweiz", "SS2012", "Bioinformatik", "FB04", "[email protected]", "Kurdisch,Maltesisch", "Wasserski,Segeln", NULL, "M\_SYq|JBYb"); . . Mit der MySQL Abfrage SHOW WARNINGS; erhält man. Level Code Message Error 1062 Duplicate entry 'mc121-0102-0386'for key 'PRIMARY' Level Code Message Error 1062 Duplicate entry 'mc121-0102-0386'for key 'PRIMARY' . Mit der MySQL Abfrage SHOW ERRORS; erhält man. Aber wenn wir zuerst den Ort und dann die Studentin einfügen, dann klappt es alles. Mit der MySQL Abfrage INSERT INTO Ort SET pLZ="CH-1273", geoBreite=134.12, geoLaenge=23.45; kann man einen neuen Ort einfügen. 94 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . Mit der MySQL Abfrage INSERT INTO Student VALUES ("mc121-0102-0386", "Frau", "Mariechen", "Chaney", "1990-02-20", \"{A}rabienstrasse 97", "CH-1273", "Basel", "Schweiz", "SS2012", "Bioinformatik", "FB04", "[email protected]", "Kurdisch,Maltesisch", "Wasserski,Segeln", NULL, "M\_SYq|JBYb"); kann man ein neuen Student einfügen. . . Mit der MySQL Abfrage SELECT studentID, anrede, vorname, nachname, plz FROM Student WHERE fachrichtung=’Bioinformatik’ OR studiengang=’FB04’; erhält man. studentID anrede vorname nachname plz ap256-3212-3933 Herr Gianni Briland D-93754 kz977-7624-2277 Herr Aster Frantzen D-80765 mc121-0102-0386 Frau Mariechen Chaney CH-1273 mh303-5086-2257 Herr Mathis Looschelders D-33229 tr133-3852-1694 Frau Trudhildis Winkel D-91256 xx292-1755-8089 Frau Luitgard Krumm D-91256 . 21.3 UPDATE und Referenzielle Integrität Mit der MySQL Abfrage SELECT studentID, anrede, vorname, nachname FROM Student WHERE fachrichtung=’Bioinformatik’ OR studiengang=’FB04’; erhält man. studentID anrede vorname nachname 95 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ap256-3212-3933 Herr Gianni Briland kz977-7624-2277 Herr Aster Frantzen mc121-0102-0386 Frau Mariechen Chaney mh303-5086-2257 Herr Mathis Looschelders tr133-3852-1694 Frau Trudhildis Winkel xx292-1755-8089 Frau Luitgard Krumm . Mit der MySQL Abfrage UPDATE Student SET studiengang=’FB07’ WHERE studentID=’mc121-0102-0386’; kann man den studiengang eines Studenten ändern. . Mit der MySQL Abfrage SELECT studentID, anrede, vorname, nachname FROM Student WHERE fachrichtung=’Bioinformatik’ OR studiengang=’FB04’; erhält man. studentID anrede vorname nachname ap256-3212-3933 Herr Gianni Briland kz977-7624-2277 Herr Aster Frantzen mc121-0102-0386 Frau Mariechen Chaney mh303-5086-2257 Herr Mathis Looschelders tr133-3852-1694 Frau Trudhildis Winkel xx292-1755-8089 Frau Luitgard Krumm . Die Uni will den Fachbereich FB04 in FB24 ändern: UPDATE Fachbereich SET fbID=’FB24 WHERE fbID=’FB04’; . . Mit der MySQL Abfrage SELECT studentID, anrede, vorname, nachname FROM Student WHERE fachrichtung=’Bioinformatik’ OR studiengang=’FB04’; erhält man. 96 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net studentID anrede vorname nachname ap256-3212-3933 Herr Gianni Briland kz977-7624-2277 Herr Aster Frantzen mc121-0102-0386 Frau Mariechen Chaney mh303-5086-2257 Herr Mathis Looschelders tr133-3852-1694 Frau Trudhildis Winkel xx292-1755-8089 Frau Luitgard Krumm 97 . Mit der MySQL Abfrage SELECT studentID, anrede, vorname, nachname FROM Student WHERE hauptfach=’FB24’ OR studiengang=’FB24’; erhält man. . Leider ist Frau Mariechen Chaney einen Fehler bezüglich der PLZ ihres Orts unterlaufen. Die richtige PLZ lautet nicht CH-1273 sondern CH-1272 UPDATE Ort SET pLZ=’CH-1272’ WHERE pLZ=’CH-1273’; . . Mit der MySQL Abfrage SHOW WARNINGS; erhält man. Level Code Message Error 1451 Cannot delete or update a parent row: a foreign key constraint fails (‘universitaet‘.‘student‘, CONSTRAINT ‘Student_pLZ_fore‘ FOREIGN KEY (‘plz‘) REFERENCES ‘ort‘ (‘plz‘)) . Mit der MySQL Abfrage SHOW ERRORS; erhält man. Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Level Code Message Error 1451 Cannot delete or update a parent row: a foreign key constraint fails (‘universitaet‘.‘student‘, CONSTRAINT ‘Student_pLZ_fore‘ FOREIGN KEY (‘plz‘) REFERENCES ‘ort‘ (‘plz‘)) . Diese Fehlermeldung war zu erwarten. Die Änderung geht in 2 Schritte 1. zuerst muss einen neuen Ort mit der PLZ CH-3272 eingefügt werden 2. dann muss den Ort von Frau Mariechen Chaney auf diesen neuen Ort aktualisert werden 3. Am Ende kann man den Ort mit den falschen PLZ entfernen. Mit der MySQL Abfrage INSERT INTO Ort VALUES ( "CH-1272", 134.12, 23.45); kann man ein neuen Ort einfügen. . Mit der MySQL Abfrage UPDATE Student SET pLZ=’CH-1272’ WHERE pLZ=’CH-1273’; ann man den Ort eines Studenten ändern. . Mit der MySQL Abfrage SELECT studentID, anrede, vorname, nachname, pLZ FROM Student WHERE studentID=’mc121-0102-0386’; erhält man. . studentID anrede vorname nachname plz mc121-01020386 Frau Mariechen Chaney CH-1272 98 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 99 21.4 DELETE und Referenzielle Integrität In der Nähe von PLZ D-25970 hat man eine neue Uni eröffnet, so dass alle Studenten dieses Ort dort umgezogen sind man kann nicht zuerst den Ort mit der PLZ D-25970 entfernen und dann deren Studenten, sondern muss man dies in umgekehrten Reihenfolge tun: Zuerst die Studenten und dann den Ort Mit der MySQL Abfrage DELETE FROM Student WHERE pLZ=’D-25970’; entfernt man ein Datensatz aus Student. . Mit der MySQL Abfrage DELETE FROM Ort WHERE pLZ=’D-25970’; entfernt man ein Datensatz aus Ort. . . 21.5 INSERT und Referenzielle Integrität bei selbstreferenzierenden Fremdschlüssel Eine Tabelle kann sogar mit sich selbst verbunden werden. Zunächst mag das seltsam klingen, aber es gibt gute Gründe, dies gelegentlich zu tun. Die Lehrkraft–Tabelle (unserer Beispieldatenbank) enthält beispielsweise einen selbstreferenzierenden Fremdschlüssel: eine Spalte seinChefIst, die auf den Primärschlüssel lehrkraftID derselben Tabelle verweist. Diese Spalte referenziert auf den jeweiligen Vorgesetzten eines Lehrkrafts (wenn der Lehrkraft nicht selbst der Chef des Ganzen ist; dann ist die Spalte natürlich NULL). Versuchen wir unseren neuen Mitarbeiter (1029,Dr.Herr Sixt Lauterbach) sowie seine neue Chefin (1033, Dr. Prof. Frau Margret Columb) in der Tabelle Lehrkraft einzufügen INSERT INTO Lehrkraft VALUES (1029, "Dr.", "Herr", "Sixt", "Lauterbach", "N.163", 1033, "1969-10-04", "http://www.naji.webatu.com/", "[email protected]", "mann\_xy1029.jpeg"); . . Mit der MySQL Abfrage SHOW WARNINGS; erhält man. Level Code Message Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Error 1452 Cannot add or update a child row: a foreign key constraint fails (‘universitaet‘.‘lehrkraft‘, CONSTRAINT ‘Lehrkraft_seinChefIst_fore‘ FOREIGN KEY (‘seinChefIst‘) REFERENCES ‘lehrkraft‘ (‘lehrkraftID‘) ON DELETE CASCADE ON UPDATE CASCADE) Level Code Message Error 1452 Cannot add or update a child row: a foreign key constraint fails (‘universitaet‘.‘lehrkraft‘, CONSTRAINT ‘Lehrkraft_seinChefIst_fore‘ FOREIGN KEY (‘seinChefIst‘) REFERENCES ‘lehrkraft‘ (‘lehrkraftID‘) ON DELETE CASCADE ON UPDATE CASCADE) . Mit der MySQL Abfrage SHOW ERRORS; erhält man. . Mit der MySQL Abfrage INSERT INTO Lehrkraft SET lehrkraftID=1033, titel="Dr. Prof.", anrede="Frau", vorname="Margret", nachname="Columb", buero="M.243", seinChefIst=1033, geburtsDatum="1979-01-04", webAdresse="http://www.naji.webatu.com/", email="[email protected]", portrait="frau\_xy1033.jpeg"; fügen wir zuerst den Chef in der Tabelle ein. . Mit der MySQL Abfrage SELECT lehrkraftID, titel, anrede, vorname, nachname, seinChefIst FROM Lehrkraft WHERE lehrkraftID>1028; erhält man. lehrkraftID titel anrede vorname nachname seinChefIst 1033 Dr. Prof. Frau Margret Columb 1033 . 100 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 101 Danach fügen wir den Mitarbeiter in der Tabelle ein INSERT INTO Lehrkraft VALUES (1029, "Dr.", "Herr", "Sixt", "Lauterbach", "N.163", 1033, "1969-10-04", "http://www.naji.webatu.com/", "[email protected]", "mann\_xy1029.jpeg"); . . Mit der MySQL Abfrage SELECT lehrkraftID, titel, anrede, vorname, nachname, seinChefIst FROM Lehrkraft WHERE lehrkraftID>1028; erhält man. lehrkraftID titel anrede vorname nachname seinChefIst 1029 Dr. Herr Sixt Lauterbach 1033 1033 Dr. Prof. Frau Margret Columb 1033 . 21.6 UPDATE und Referenzielle Integrität bei selbstreferenzierenden Fremdschlüssel Der lehrkraftID von Chef ist nicht 1033 sondern 1030. würden Wir zuerst das seinChefIst bei Mitarbeiter ändern versuchen, würde das nicht gehen UPDATE Lehrkraft SET seinChefIst=1130 WHERE lehrkraftID=1029; . . Mit der MySQL Abfrage SHOW WARNINGS; erhält man. Level Code Message Error 1452 Cannot add or update a child row: a foreign key constraint fails (‘universitaet‘.‘lehrkraft‘, CONSTRAINT ‘Lehrkraft_seinChefIst_fore‘ FOREIGN KEY (‘seinChefIst‘) REFERENCES ‘lehrkraft‘ (‘lehrkraftID‘) ON DELETE CASCADE ON UPDATE CASCADE) Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 102 . Mit der MySQL Abfrage SHOW ERRORS; erhält man. Level Code Message Error 1452 Cannot add or update a child row: a foreign key constraint fails (‘universitaet‘.‘lehrkraft‘, CONSTRAINT ‘Lehrkraft_seinChefIst_fore‘ FOREIGN KEY (‘seinChefIst‘) REFERENCES ‘lehrkraft‘ (‘lehrkraftID‘) ON DELETE CASCADE ON UPDATE CASCADE) . Aber wenn wir das lehrkraftID vom Chef ändern UPDATE Lehrkraft SET lehrkraftID=1130 WHERE lehrkraftID=1033; . . Mit der MySQL Abfrage SELECT lehrkraftID, titel, anrede, vorname, nachname, seinChefIst FROM Lehrkraft WHERE lehrkraftID>1028; erhält man. lehrkraftID titel anrede vorname nachname seinChefIst 1029 Dr. Herr Sixt Lauterbach 1033 1033 Dr. Prof. Frau Margret Columb 1033 . 21.7 DELETE und Referenzielle Integrität bei selbstreferenzierenden Fremdschlüssel . DELETE FROM Lehrkraft WHERE lehrkraftID=1033; . . Mit der MySQL Abfrage SHOW WARNINGS; Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 103 erhält man. Level Code Message Code Message . Mit der MySQL Abfrage SHOW ERRORS; erhält man. Level . Mit der MySQL Abfrage SELECT lehrkraftID, titel, anrede, vorname, nachname, seinChefIst FROM Lehrkraft WHERE lehrkraftID>1028; erhält man. lehrkraftID titel anrede vorname nachname seinChefIst . 21.8 Wirkung Wir haben gesehen, dass es bei Referenzielle Integrität sehr auf die Reihenfolge der Insert–Operation aufkommt. Für die Speicherung von Datenbank SQL Dateien, kann man zunächst die Tabellen (ohne Referenzielle Integrität) erzeugen, dann diese mit Daten füllen und erst zum Schluss Referenzielle Integrität einführen, wie in folgenden Listing Listing 21.1: universitaet.sql 1 2 3 4 5 6 7 8 /* Datenbank u n i v e r s i t a e t e r s t e l l e n */ DROP DATABASE I F EXISTS u n i v e r s i t a e t ; 9 10 11 12 13 CREATE DATABASE u n i v e r s i t a e t ; Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 14 15 16 17 104 /* Mit dem D a t e n b a n k u n i v e r s i t a e t a r b e i t e n */ USE u n i v e r s i t a e t ; 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 −− T a b l e : F a c h b e r e i c h −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS F a c h b e r e i c h ; CREATE TABLE F a c h b e r e i c h ( f b I D CHAR( 4 ) NOT NULL, b e z e i c h n u n g VARCHAR( 2 5 0 ) NOT NULL, webAdresse VARCHAR( 2 5 3 ) DEFAULT NULL, g r u e n d u n g s J a h r YEAR( 4 ) NOT NULL, dekan VARCHAR( 2 5 0 ) DEFAULT "" , a b s c h l u s s SET ( ’Master of Arts’ , ’Internationaler Master of Science ’ , ’L2 Haupt - und Realschule’ , ’L3 Gymnasien’ , ’ Bachelor of Arts’ , ’ Bachelor of Science ’ , ’ Magister’ , ’ Master of Education’ , ’Master of Science ’ , ’ Staatsexamen’ , ’Neues Lehramt ’ ) NOT NULL, PRIMARY KEY ( f b I D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 −− T a b l e : O r t −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS Ort ; CREATE TABLE Ort ( p l z VARCHAR( 1 3 ) NOT NULL, g e o B r e i t e DECIMAL ( 9 , 6 ) NOT NULL, g e o L a e n g e DECIMAL ( 9 , 6 ) NOT NULL, PRIMARY KEY ( p l z ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 −− T a b l e : Raum −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS Raum ; CREATE TABLE Raum ( raumID CHAR( 5 ) NOT NULL, a n z a h l T u e r e n SMALLINT DEFAULT NULL, b r e i t e DOUBLE( 4 , 2 ) NOT NULL, l a e n g e REAL ( 4 , 2 ) NOT NULL, PRIMARY KEY ( raumID ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 105 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 −− T a b l e : L e h r k r a f t −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS L e h r k r a f t ; CREATE TABLE L e h r k r a f t ( l e h r k r a f t I D INT ( 7 ) NOT NULL, t i t e l VARCHAR( 2 5 0 ) NOT NULL, a n r e d e ENUM( ’Frau’ , ’Herr’ ) , vorname VARCHAR( 2 5 0 ) NOT NULL, nachname VARCHAR( 2 5 0 ) NOT NULL, b u e r o VARCHAR( 2 5 0 ) DEFAULT NULL, s e i n C h e f I s t INT ( 7 ) DEFAULT NULL, geburtsDatum DATE DEFAULT " 0000 -00 -00" , webAdresse VARCHAR( 2 5 3 ) NOT NULL, e m a i l VARCHAR( 2 3 0 ) NOT NULL, p o r t r a i t VARCHAR( 2 3 0 ) NOT NULL, FOREIGN KEY L e h r k r a f t _ s e i n C h e f I s t _ f o r e ( s e i n C h e f I s t ) REFERENCES L e h r k r a f t ( l e h r k r a f t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( l e h r k r a f t I D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 −− T a b l e : V e r a n s t a l t u n g −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS V e r a n s t a l t u n g ; CREATE TABLE V e r a n s t a l t u n g ( v e r a n s t a l t u n g I D INT ( 8 ) , l e h r k r a f t I D INT ( 7 ) NOT NULL, b e z e i c h n u n g VARCHAR( 2 5 0 ) NOT NULL, s e m e s t e r CHAR( 6 ) DEFAULT NULL, s c h e i n v e r g a b e VARCHAR( 2 5 0 ) DEFAULT NULL, wo chenStunden FLOAT DEFAULT NULL, maxAnzahl TINYINT NOT NULL, tatAnzahl TINYINT DEFAULT NULL, art ENUM( ’Klausur ’ , ’ Vorlesung’ , ’Vortrag ’ , ’ Praktikum’ , ’ Hauptseminar’ , ’Seminar ’ , ’ Tutorium’ , ’Vorkurs ’ , ’Proseminar’ , ’ Kolloqium’ , ’ Vorbereitungskurs’ , ’ Laborpraktikum’ ) , h i n w e i s TEXT DEFAULT NULL, INDEX V e r a n s t a l t u n g _ v e r a n s t a l t u n g I D _ i n d e ( v e r a n s t a l t u n g I D ) , FOREIGN KEY V e r a n s t a l t u n g _ l e h r k r a f t I D _ f o r e ( l e h r k r a f t I D ) REFERENCES L e h r k r a f t ( l e h r k r a f t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( v e r a n s t a l t u n g I D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 106 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 −− T a b l e : S t u d e n t −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS S t u d e n t ; CREATE TABLE S t u d e n t ( s t u d e n t I D CHAR( 1 5 ) DEFAULT NULL, a n r e d e ENUM( ’Frau’ , ’Herr’ ) , vorname VARCHAR( 2 5 0 ) NOT NULL, nachname VARCHAR( 2 5 0 ) NOT NULL, geburtsDatum DATE DEFAULT NULL, strasseHNr VARCHAR( 2 5 3 ) DEFAULT "" , p l z VARCHAR( 1 3 ) NOT NULL, s t a d t VARCHAR( 2 3 0 ) NOT NULL, l a n d VARCHAR( 2 3 0 ) NOT NULL, s t u d i e n b e g i n n CHAR( 6 ) NOT NULL, f a c h r i c h t u n g VARCHAR( 2 3 0 ) NOT NULL, s t u d i e n g a n g CHAR( 4 ) NOT NULL, e m a i l VARCHAR( 2 3 0 ) NOT NULL, s p r a c h e VARCHAR( 2 3 0 ) NOT NULL, ho bby VARCHAR( 2 3 0 ) NOT NULL, f o t o VARCHAR( 2 3 0 ) DEFAULT NULL, s t r i c h c o d e VARCHAR( 1 2 ) NOT NULL, UNIQUE S t u d e n t _ e m a i l _ u n i q ( e m a i l ) , INDEX S t u d e n t _ s t u d e n t I D _ i n d e ( s t u d e n t I D ) , FOREIGN KEY S t u d e n t _ s t u d i e n g a n g _ f o r e ( s t u d i e n g a n g ) REFERENCES F a c h b e r e i c h ( f b I D ) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY S t u d e n t _ p L Z _ f o r e ( pLZ ) REFERENCES Ort ( pLZ ) , PRIMARY KEY ( s t u d e n t I D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 −− T a b l e : B e s u c h t −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS B e s u c h t ; CREATE TABLE B e s u c h t ( s t u d e n t CHAR( 1 5 ) NOT NULL, v e r a n s t a l t u n g INT ( 8 ) , wPF ENUM( ’Wahlfach’ , ’Pflichtfach’ , ’Gast’ ) DEFAULT NULL, p u n k t e SMALLINT DEFAULT NULL, FOREIGN KEY B e s u c h t _ v e r a n s t a l t u n g _ f o r e ( v e r a n s t a l t u n g ) REFERENCES V e r a n s t a l t u n g ( v e r a n s t a l t u n g I D ) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY B e s u c h t _ s t u d e n t _ f o r e ( s t u d e n t ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( s t u d e n t , v e r a n s t a l t u n g ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 107 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 −− T a b l e : S p r e c h s t u n d e −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS S p r e c h s t u n d e ; CREATE TABLE S p r e c h s t u n d e ( l e h r k r a f t I D INT ( 7 ) NOT NULL, nummer SMALLINT NOT NULL, s e m e s t e r CHAR( 6 ) NOT NULL, wo chentag ENUM( ’Montag ’ , ’ Dienstag’ , ’ Mittwoch’ , ’ Donnerstag’ , ’Freitag ’ ) NOT NULL, u h r Z e i t TIME DEFAULT NULL, FOREIGN KEY S p r e c h s t u n d e _ l e h r k r a f t I D _ f o r e ( l e h r k r a f t I D ) REFERENCES L e h r k r a f t ( l e h r k r a f t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( l e h r k r a f t I D , nummer ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 −− T a b l e : Z u g a n g s D a t e n −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS ZugangsDaten ; CREATE TABLE ZugangsDaten ( p e r s o n CHAR( 1 5 ) NOT NULL, l a u f z a h l INT ( 4 ) , u s e r n a m e VARCHAR( 3 0 ) NOT NULL, p a s s w o r t CHAR( 1 2 ) NOT NULL, datumUndZeit TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , d a s I P VARCHAR( 2 5 0 ) DEFAULT NULL, HTTP_ACCEPT_LANGUAGE VARCHAR( 2 5 0 ) DEFAULT NULL, HTTP_USER_AGENT VARCHAR( 2 5 0 ) DEFAULT NULL, SERVER_NAME VARCHAR( 2 5 0 ) DEFAULT NULL, SERVER_SOFTWARE VARCHAR( 2 5 0 ) DEFAULT NULL, SERVER_PROTOCOL VARCHAR( 2 5 0 ) DEFAULT NULL, FOREIGN KEY Z u g a n g s D a t e n _ p e r s o n _ f o r e ( p e r s o n ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( p e r s o n , l a u f z a h l ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 214 215 216 217 218 219 220 221 222 223 224 225 −− T a b l e : K o n t a k t D e t a i l s −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS K o n t a k t D e t a i l s ; CREATE TABLE K o n t a k t D e t a i l s ( ko ntakt INT ( 4 ) , Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 226 227 228 229 230 231 108 s t u d e n t I D CHAR( 1 5 ) NOT NULL, nummer VARCHAR( 3 0 ) NOT NULL, art ENUM( ’Fax’ , ’Handy ’ , ’ FestNetz’ , ’ Smartphone’ , ’Telefon ’ , ’Telefon und Fax’ ) NOT NULL, FOREIGN KEY K o n t a k t D e t a i l s _ s t u d e n t I D _ f o r e ( s t u d e n t I D ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( kontakt , s t u d e n t I D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 −− T a b l e : Rad io −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS R a d i o ; CREATE TABLE R a d i o ( r a d i o I D INT ( 8 ) NOT NULL, s t u d e n t I D CHAR( 1 5 ) NOT NULL, c h a n s o n VARCHAR( 2 5 0 ) NOT NULL, r e g i s t r i r e n A m DATETIME NOT NULL, v o t e SMALLINT UNSIGNED DEFAULT 0 , FOREIGN KEY R a d i o _ s t u d e n t I D _ f o r e ( s t u d e n t I D ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( r a d i o I D , s t u d e n t I D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 −− T a b l e : Cinema −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS Cinema ; CREATE TABLE Cinema ( c i n e m a I D INT ( 8 ) NOT NULL, s t u d e n t I D CHAR( 1 5 ) NOT NULL, v i d e o c l i p VARCHAR( 2 5 0 ) NOT NULL, datum DATE NOT NULL, z e i t TIME DEFAULT " 00:00:00" , v o t e SMALLINT UNSIGNED DEFAULT 0 , FOREIGN KEY C i n e m a _ s t u d e n t I D _ f o r e ( s t u d e n t I D ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( c i n e m a I D , s t u d e n t I D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 271 272 273 274 275 276 277 278 −− T a b l e : G e p r u e f t Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 279 280 281 282 283 284 285 286 287 288 289 290 291 292 109 −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS G e p r u e f t ; CREATE TABLE G e p r u e f t ( s t u d e n t I D CHAR( 1 5 ) NOT NULL, v e r a n s t a l t u n g I D INT ( 8 ) , l e h r k r a f t I D INT ( 7 ) NOT NULL, datum DATE NOT NULL, u h r z e i t TIME NOT NULL, n o t e FLOAT NOT NULL, FOREIGN KEY G e p r u e f t _ s t u d e n t I D _ f o r e ( s t u d e n t I D ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY G e p r u e f t _ v e r a n s t a l t u n g I D _ f o r e ( v e r a n s t a l t u n g I D ) REFERENCES V e r a n s t a l t u n g ( v e r a n s t a l t u n g I D ) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY G e p r u e f t _ l e h r k r a f t I D _ f o r e ( l e h r k r a f t I D ) REFERENCES L e h r k r a f t ( l e h r k r a f t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( s t u d e n t I D , v e r a n s t a l t u n g I D , l e h r k r a f t I D , datum ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 −− T a b l e : Ch at −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS Chat ; CREATE TABLE Chat ( chatI D BIGINT NOT NULL AUTO_INCREMENT , s t u d e n t 1 CHAR( 1 5 ) NOT NULL, s t u d e n t 2 CHAR( 1 5 ) NOT NULL, datumUndZeit TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , FOREIGN KEY C h a t _ s t u d e n t 1 _ f o r e ( s t u d e n t 1 ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY C h a t _ s t u d e n t 2 _ f o r e ( s t u d e n t 2 ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY ( chatI D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 312 313 314 315 316 317 318 319 320 321 322 323 324 325 −− T a b l e : Mensa −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− DROP TABLE I F EXISTS Mensa ; CREATE TABLE Mensa ( mensaI D BIGINT NOT NULL, k o n s e r v i e r u n g s s t o f f e SET ( ’Antioxidationsmittel’ , ’ Backtriebmittel’ , ’ Emulgatoren’ , ’ Farbstoffe’ , ’ Festigungsmittel’ , ’Feuchthaltemittel’ , ’ Geliermittel’ , ’ Komplexbildner’ , ’ Konservierungsstoffe’ , ’ Mehlbehandlungsmittel’ , ’ Schaummittel’ , ’Schmelzsalze’ , ’ Stabilisatoren’ , ’ Treibgase’ , ’ Trennmittel’ , ’Verdickungsmittel’ ) NOT NULL, menue TEXT , Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 326 327 328 110 datum DATE NOT NULL, PRIMARY KEY ( mensaI D ) ) ENGINE=InnoDB DEFAULT CHARSET=u t f 8 ; 329 330 331 332 333 334 /* insgesamt 9 Zeilen */ 335 336 337 338 339 340 341 342 343 344 INSERT INTO F a c h b e r e i c h VALUES ( " FB02" , " Mathematik" , " http :// wwwFB02 - frankfurt.de" , 1 9 9 1 , " Herr Weber" , " Internationaler Master of Science ,L2 Haupt - und Realschule ,L3 Gymnasien , Bachelor of Arts , Bachelor of Science ,Magister , Neues Lehramt " ) ; INSERT INTO F a c h b e r e i c h VALUES ( " FB03" , " Informatik" , " http :// wwwFB03 - frankfurt.de" , 2 0 0 0 , " Frau Magdolt " , " Internationaler Master of Science ,L2 Haupt - und Realschule , L3 Gymnasien , Bachelor of Arts" ) ; INSERT INTO F a c h b e r e i c h VALUES ( " FB04" , " Physik " , " http :// wwwFB04 - frankfurt.de" , 2 0 0 0 , " Herr Altens " , " Master of Arts , Internationaler Master of Science ,L2 Haupt und Realschule , Bachelor of Arts ,Magister , Master of Science ,Staatsexamen , Neues Lehramt " ) ; INSERT INTO F a c h b e r e i c h VALUES ( " FB05" , " Sprach -, Kulturwissenschaften und Gestaltung " , " http ://wwwFB05 - frankfurt.de" , 2 0 0 1 , " Herr Berger " , " Master of Arts , Internationaler Master of Science ,L2 Haupt - und Realschule , Bachelor of Arts , Master of Science " ) ; INSERT INTO F a c h b e r e i c h VALUES ( " FB06" , " Mathematik und Naturwissenschaften" , " http :// wwwFB06 - frankfurt.de" , 1 9 9 1 , " Herr Alfred " , "Master of Arts , Bachelor of Arts , Bachelor of Science , Master of Education" ) ; INSERT INTO F a c h b e r e i c h VALUES ( " FB07" , " Biologie" , "http ://wwwFB07 - frankfurt.de" , 1 9 9 9 , " Herr Ludwig " , " Master of Arts , Internationaler Master of Science ,L3 Gymnasien , Neues Lehramt " ) ; INSERT INTO F a c h b e r e i c h VALUES ( " FB11" , " Wirtschaftswissenschaften" , " http ://wwwFB11 frankfurt.de" , 1 9 9 2 , " Herr Meyer" , " Internationaler Master of Science ,L2 Haupt und Realschule , Bachelor of Arts , Bachelor of Science , Magister , Master of Education" ) ; INSERT INTO F a c h b e r e i c h VALUES ( " FB12" , "Agrar - und Forstwissenschaften" , "http :// wwwFB12 - frankfurt.de" , 1 9 9 8 , " Frau Schreiber" , "L2 Haupt - und Realschule , Bachelor of Arts , Master of Science , Staatsexamen" ) ; INSERT INTO F a c h b e r e i c h VALUES ( " FB22" , " Ingenieurwissenschaften" , " http ://wwwFB22 frankfurt.de" , 1 9 9 5 , " Frau Graf" , " Master of Science , Staatsexamen" ) ; 345 346 347 348 349 350 −− FOREIGN KEY B e z i e h u n g e n ; 351 352 −− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− ; 353 354 ALTER TABLE B e s u c h t ADD CONSTRAINT B e s u c h t _ v e r a n s t a l t u n g _ f o r e FOREIGN KEY ( v e r a n s t a l t u n g ) REFERENCES V e r a n s t a l t u n g ( v e r a n s t a l t u n g I D ) ON DELETE CASCADE ON UPDATE CASCADE ; ; 355 356 357 ALTER TABLE B e s u c h t ADD CONSTRAINT B e s u c h t _ s t u d e n t _ f o r e FOREIGN KEY ( s t u d e n t ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE ; ; Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 358 111 ALTER TABLE S t u d e n t ADD CONSTRAINT S t u d e n t _ s t u d i e n g a n g _ f o r e FOREIGN KEY ( s t u d i e n g a n g ) REFERENCES F a c h b e r e i c h ( f b I D ) ; ; 359 360 ALTER TABLE S t u d e n t ADD CONSTRAINT S t u d e n t _ p L Z _ f o r e FOREIGN KEY ( pLZ ) REFERENCES Ort ( pLZ ) ; ; 361 362 ALTER TABLE V e r a n s t a l t u n g ADD CONSTRAINT V e r a n s t a l t u n g _ l e h r k r a f t I D _ f o r e FOREIGN KEY ( l e h r k r a f t I D ) REFERENCES L e h r k r a f t ( l e h r k r a f t I D ) ; ; 363 364 ALTER TABLE R a d i o ADD CONSTRAINT R a d i o _ s t u d e n t I D _ f o r e FOREIGN KEY ( s t u d e n t I D ) REFERENCES S t u d e n t ( s t u d e n t I D ) ; ; 365 366 ALTER TABLE Cinema ADD CONSTRAINT C i n e m a _ s t u d e n t I D _ f o r e FOREIGN KEY ( s t u d e n t I D ) REFERENCES S t u d e n t ( s t u d e n t I D ) ; ; 367 368 ALTER TABLE K o n t a k t D e t a i l s ADD CONSTRAINT K o n t a k t D e t a i l s _ s t u d e n t I D _ f o r e FOREIGN KEY ( s t u d e n t I D ) REFERENCES S t u d e n t ( s t u d e n t I D ) ; ; 369 370 ALTER TABLE S p r e c h s t u n d e ADD CONSTRAINT S p r e c h s t u n d e _ l e h r k r a f t I D _ f o r e FOREIGN KEY ( l e h r k r a f t I D ) REFERENCES L e h r k r a f t ( l e h r k r a f t I D ) ; ; 371 372 ALTER TABLE L e h r k r a f t ADD CONSTRAINT L e h r k r a f t _ s e i n C h e f I s t _ f o r e FOREIGN KEY ( s e i n C h e f I s t ) REFERENCES L e h r k r a f t ( l e h r k r a f t I D ) ON DELETE CASCADE ON UPDATE CASCADE ; ; 373 374 ALTER TABLE Chat ADD CONSTRAINT G e p r u e f t _ s t u d e n t 1 _ f o r e FOREIGN KEY ( s t u d e n t 1 ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, ; 375 376 ALTER TABLE Chat ADD CONSTRAINT G e p r u e f t _ s t u d e n t 2 _ f o r e FOREIGN KEY ( s t u d e n t 2 ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, ; 377 378 ALTER TABLE G e p r u e f t ADD CONSTRAINT G e p r u e f t _ s t u d e n t I D _ f o r e FOREIGN KEY ( s t u d e n t I D ) REFERENCES S t u d e n t ( s t u d e n t I D ) ON DELETE CASCADE ON UPDATE CASCADE, ; 379 380 ALTER TABLE G e p r u e f t ADD CONSTRAINT G e p r u e f t _ v e r a n s t a l t u n g I D _ f o r e FOREIGN KEY ( v e r a n s t a l t u n g I D ) REFERENCES V e r a n s t a l t u n g ( v e r a n s t a l t u n g I D ) ON DELETE CASCADE ON UPDATE CASCADE, ; 381 382 ALTER TABLE G e p r u e f t ADD CONSTRAINT G e p r u e f t _ l e h r k r a f t I D _ f o r e FOREIGN KEY ( l e h r k r a f t I D ) REFERENCES L e h r k r a f t ( l e h r k r a f t I D ) ; ; Kapitel 25 Mathematical Functions 25.1 Einführung Mit der MySQL Abfrage SELECT PI(), 2+3, 2*3, 2-3, 4/3, 5%3; erhält man. PI() 2+3 2*3 2-3 4/3 5%3 3.141593 5 6 -1 1.3333 2 . Mit der MySQL Abfrage SELECT RAND(); erhält man. RAND() 0.4605640801233836 . Mit der MySQL Abfrage SELECT 3*RAND()+2; erhält man. 3*RAND()+2 4.734333005486366 . Mit der MySQL Abfrage SELECT ROUND(13*RAND()+2,-1), ROUND(13*RAND()+2), ROUND(13*RAND()+2,0), ROUND(13*RAND()+2,2); 112 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net erhält man. ROUND(13*RAND()+2,- ROUND(13*RAND()+2) ROUND(13*RAND()+2,0)ROUND(13*RAND()+2,2) 1) 0 4 4 8.76 . Mit der MySQL Abfrage SELECT TRUNCATE((13*RAND()+2),-1), TRUNCATE((13*RAND()+2),0), TRUNCATE((13*RAND()+1),2); erhält man. TRUNCATE((13*RAND()+2),TRUNCATE((13*RAND()+2),0) TRUNCATE((13*RAND()+1),2) 1) 0 9 12.16 . Mit der MySQL Abfrage SELECT CEIL(13.3), FLOOR(13.3), CEIL(13.5), FLOOR(13.5), CEIL(13.7), FLOOR(13.7); erhält man. CEIL(13.3) FLOOR(13.3) CEIL(13.5) FLOOR(13.5) CEIL(13.7) FLOOR(13.7) 14 13 14 13 14 13 . 25.2 Abfragen mit Bezug zu einer Tabelle verwenden . Mit der MySQL Abfrage SELECT *, (breite*laenge) as Flaehe FROM Raum; erhält man. raumID anzahlTueren breite laenge Flaehe H.619 2 31.35 29.25 916.99 H.876 1 58.30 10.55 615.07 I.261 1 34.55 16.95 585.62 J.206 1 11.25 55.50 624.38 L.396 2 18.85 53.05 999.99 M.149 1 26.85 30.45 817.58 113 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . M.270 2 47.55 12.00 570.60 R.408 2 25.50 45.55 1161.52 R.496 2 26.85 55.10 1479.44 S.413 3 19.75 29.40 580.65 T.449 2 45.20 40.70 1839.64 T.602 3 36.90 60.70 2239.83 W.757 3 63.05 19.05 1201.10 114 Kapitel 26 Date Functions 26.1 Abfragen ohne Bezug zu einer Tabelle verwenden . Mit der MySQL Abfrage SELECT WEEK(’2008-02-20’); erhält man. WEEK('2008-02-20') 7 . Mit der MySQL Abfrage SELECT WEEK(’2008-02-20’,0); erhält man. WEEK('2008-02-20',0) 7 . Mit der MySQL Abfrage SELECT WEEK(’2008-02-20’,1); erhält man. WEEK('2008-02-20',1) 8 . Mit der MySQL Abfrage 115 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net SELECT WEEK(’2008-12-31’,1); erhält man. WEEK('2008-12-31',1) 53 . Mit der MySQL Abfrage SELECT WEEK(’2000-01-01’,2); erhält man. WEEK('2000-01-01',2) 52 . Mit der MySQL Abfrage SELECT NOW(); erhält man. NOW() 2008-09-19 11:00:54.0 . Mit der MySQL Abfrage SELECT CURDATE(); erhält man. CURDATE() 2008-09-19 . Mit der MySQL Abfrage SELECT DAYNAME(CURDATE()); erhält man. DAYNAME(CURDATE()) Monday 116 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . Mit der MySQL Abfrage SELECT EXTRACT(YEAR FROM CURDATE()); erhält man. EXTRACT(YEAR FROM CURDATE()) 2008 . Mit der MySQL Abfrage SELECT CURRENT_DATE(); erhält man. CURRENT_DATE() 2008-09-19 . Mit der MySQL Abfrage SELECT CURRENT_TIMESTAMP(); erhält man. CURRENT_TIMESTAMP() 2008-09-19 11:00:54.0 . Mit der MySQL Abfrage SELECT DATE_SUB(’2008-01-02’, INTERVAL 31 DAY); erhält man. DATE_SUB('2008-01-02', INTERVAL 31 DAY) 2007-12-02 . 117 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 118 26.2 Abfragen mit Bezug zu einer Tabelle verwenden Für jeden Prüfungstermin haben wir zwar das Datum angegeben aber es wäre noch sinnvoller, wenn wir auch den Wochentag angeben würden. Mit der MySQL Abfrage SELECT *, DAYNAME(datum) as wochentag FROM Geprueft; erhält man. studentID veranstaltungID lehrkraftID datum uhrzeit note wochentag ap256-3212-3933 26 1018 2015-03-19 14:15:00 2.7 Thursday fn610-3893-2306 24 1016 2013-04-15 11:10:00 1 Monday fn610-3893-2306 29 1011 2013-12-13 13:05:00 1.7 Friday gg525-7926-7879 17 1002 2015-10-07 14:00:00 1 Wednesday kz977-7624-2277 36 1008 2018-03-09 12:00:00 1.7 Friday md503-8006-7828 14 1007 2013-06-10 10:05:00 1 Monday mh303-5086-2257 22 1009 2014-03-24 10:00:00 3 Monday qa922-4226-3460 27 1011 2015-02-27 10:00:00 3.3 Friday qb395-9858-6804 36 1005 2016-06-23 13:05:00 3.7 Thursday ry307-0065-8575 17 1014 2015-12-08 13:00:00 4 Tuesday ry307-0065-8575 18 1017 2016-01-02 15:10:00 1 Saturday sv377-8994-1980 31 1009 2019-06-27 13:00:00 4.7 Thursday tr133-3852-1694 25 1015 2015-08-22 12:10:00 3 Saturday tr133-3852-1694 31 1015 2015-05-18 10:00:00 3 Monday ui175-6966-6040 41 1007 2015-05-23 14:05:00 1 Saturday vu769-2638-9984 32 1009 2014-05-26 13:15:00 2.7 Monday vu769-2638-9984 35 1011 2014-02-14 15:15:00 3.3 Friday vw937-4659-4381 18 1009 2016-01-12 14:10:00 2.3 Tuesday wq561-0592-3410 15 1014 2013-10-05 12:05:00 4.7 Saturday wq561-0592-3410 30 1011 2015-08-19 10:10:00 3.7 Wednesday xn096-9487-6455 12 1009 2016-09-13 13:10:00 3.7 Tuesday xx292-1755-8089 20 1011 2016-10-08 11:05:00 2.3 Saturday xx292-1755-8089 29 1004 2016-11-25 10:15:00 5 Friday zr166-3038-2048 18 1008 2015-04-07 10:10:00 3.3 Tuesday zr166-3038-2048 21 1007 2015-10-05 11:00:00 2.3 Monday . 26.3 Formatierungsfunktionen von Datum . Sqquenz Bedeutung Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net %Y Vierstellige Jahreszahl %y Zweistellige Jahreszahl %M Vollstaendiger Monatsname %b erste drei Buchstaben des Monatsnames %m Zweistellige Monatsnummer (01. . . 12) %c Monatsnummer %d Zweistelliger Minatstag (01. . . 31) %e Monatstag (1. . . 31) %r 12 Stunden Zeot mit AM und PM %T 24 Stunden Zeit %H Zweistellige Stundenangabe %i Zweistellige Minutenangabe %s Zweistellige Sekundenangabe %% Literales % . Mit der MySQL Abfrage SELECT datum, DATE_FORMAT(datum, ’%M %d, %Y’) as wochentag FROM Geprueft; erhält man. datum wochentag 2016-09-13 September 13, 2016 2013-06-10 June 10, 2013 2013-10-05 October 05, 2013 2015-10-07 October 07, 2015 2015-12-08 December 08, 2015 2016-01-02 January 02, 2016 2016-01-12 January 12, 2016 2015-04-07 April 07, 2015 2016-10-08 October 08, 2016 2015-10-05 October 05, 2015 2014-03-24 March 24, 2014 2013-04-15 April 15, 2013 2015-08-22 August 22, 2015 2015-03-19 March 19, 2015 2015-02-27 February 27, 2015 2013-12-13 December 13, 2013 2016-11-25 November 25, 2016 2015-08-19 August 19, 2015 2019-06-27 June 27, 2019 2015-05-18 May 18, 2015 2014-05-26 May 26, 2014 119 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 2014-02-14 February 14, 2014 2018-03-09 March 09, 2018 2016-06-23 June 23, 2016 2015-05-23 May 23, 2015 . 26.4 Datum mit Formatierungsfunktionen zerlegen . Mit der MySQL Abfrage SELECT datum, DATE\_FORMAT(datum, ’%Y’) as jahr, DATE\_FORMAT(datum, ’%d’) as tag1, DATE\_FORMAT(datum, ’%e’) as tag2 FROM Geprueft; erhält man. datum jahr tag1 tag2 2016-09-13 2016 13 13 2013-06-10 2013 10 10 2013-10-05 2013 05 5 2015-10-07 2015 07 7 2015-12-08 2015 08 8 2016-01-02 2016 02 2 2016-01-12 2016 12 12 2015-04-07 2015 07 7 2016-10-08 2016 08 8 2015-10-05 2015 05 5 2014-03-24 2014 24 24 2013-04-15 2013 15 15 2015-08-22 2015 22 22 2015-03-19 2015 19 19 2015-02-27 2015 27 27 2013-12-13 2013 13 13 2016-11-25 2016 25 25 2015-08-19 2015 19 19 2019-06-27 2019 27 27 2015-05-18 2015 18 18 2014-05-26 2014 26 26 2014-02-14 2014 14 14 2018-03-09 2018 09 9 120 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 2016-06-23 2016 23 23 2015-05-23 2015 23 23 . 26.5 Datum mit String–Funktionen zerlegen . Mit der MySQL Abfrage SELECT datum, LEFT(datum, 4) as jahr, MID(datum, 6,2) as monat, RIGHT(datum, 2) as tag FROM Geprueft; erhält man. datum jahr monat tag 2016-09-13 2016 09 13 2013-06-10 2013 06 10 2013-10-05 2013 10 05 2015-10-07 2015 10 07 2015-12-08 2015 12 08 2016-01-02 2016 01 02 2016-01-12 2016 01 12 2015-04-07 2015 04 07 2016-10-08 2016 10 08 2015-10-05 2015 10 05 2014-03-24 2014 03 24 2013-04-15 2013 04 15 2015-08-22 2015 08 22 2015-03-19 2015 03 19 2015-02-27 2015 02 27 2013-12-13 2013 12 13 2016-11-25 2016 11 25 2015-08-19 2015 08 19 2019-06-27 2019 06 27 2015-05-18 2015 05 18 2014-05-26 2014 05 26 2014-02-14 2014 02 14 2018-03-09 2018 03 09 2016-06-23 2016 06 23 2015-05-23 2015 05 23 121 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . 122 Kapitel 27 Time Functions 27.1 Abfragen ohne Bezug zu einer Tabelle verwenden . Mit der MySQL Abfrage SELECT CURRENT_TIME(); erhält man. CURRENT_TIME() 11:09:51 . 27.2 Uhrzeiten und Sekunden ineinander konvertieren . Mit der MySQL Abfrage SELECT uhrzeit, TIME\_TO\_SEC(uhrzeit) AS in\_sekunden, TIME\_TO\_SEC(uhrzeit)/60 AS in\_minuten, SEC\_TO\_TIME(TIME\_TO\_SEC(uhrzeit)+7200) AS plus\_2\_Stunden FROM Geprueft; erhält man. uhrzeit in_sekunden in_minuten plus_2_Stunden 14:15:00 51300 855.0000 16:15:00 11:10:00 40200 670.0000 13:10:00 13:05:00 47100 785.0000 15:05:00 14:00:00 50400 840.0000 16:00:00 12:00:00 43200 720.0000 14:00:00 10:05:00 36300 605.0000 12:05:00 10:00:00 36000 600.0000 12:00:00 123 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . 10:00:00 36000 600.0000 12:00:00 13:05:00 47100 785.0000 15:05:00 13:00:00 46800 780.0000 15:00:00 15:10:00 54600 910.0000 17:10:00 13:00:00 46800 780.0000 15:00:00 12:10:00 43800 730.0000 14:10:00 10:00:00 36000 600.0000 12:00:00 14:05:00 50700 845.0000 16:05:00 13:15:00 47700 795.0000 15:15:00 15:15:00 54900 915.0000 17:15:00 14:10:00 51000 850.0000 16:10:00 12:05:00 43500 725.0000 14:05:00 10:10:00 36600 610.0000 12:10:00 13:10:00 47400 790.0000 15:10:00 11:05:00 39900 665.0000 13:05:00 10:15:00 36900 615.0000 12:15:00 10:10:00 36600 610.0000 12:10:00 11:00:00 39600 660.0000 13:00:00 124 Kapitel 28 String-Funktionen 28.1 REPLACE und Co Mit der MySQL Abfrage SELECT ASCII(’2’), ASCII(2), ASCII(’dx’); erhält man. ASCII('2') ASCII(2) ASCII('dx') 50 50 100 . Mit der MySQL Abfrage SELECT BIN(12), CONV(12,10,2), CONV(12,10,8); erhält man. BIN(12) CONV(12,10,2) CONV(12,10,8) 1100 1100 14 . Mit der MySQL Abfrage SELECT BIT_LENGTH(’MySQL’), CHAR(77,121,83,81,’76’), HEX(CHAR(256)); erhält man. BIT_LENGTH('MySQL') CHAR(77,121,83,81,'76') HEX(CHAR(256)) 40 MySQL 0100 . Mit der MySQL Abfrage SELECT SOUNDEX(’Mayer’), SOUNDEX(’Maier’), SOUNDEX(’Meier’); 125 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net erhält man. SOUNDEX('Mayer') SOUNDEX('Maier') SOUNDEX('Meier') M600 M600 M600 . Mit der MySQL Abfrage SELECT ’Mayer’ SOUNDS LIKE ’Meier’, ’Mueller’ SOUNDS LIKE ’Meier’; erhält man. 'Mayer'SOUNDS LIKE 'Meier' 'Mueller'SOUNDS LIKE 'Meier' 1 0 . Mit der MySQL Abfrage SELECT STRCMP(’text’, ’text’), STRCMP(’text1’, ’text’); erhält man. STRCMP('text', 'text') STRCMP('text1', 'text') 0 1 . Mit der MySQL Abfrage SELECT LOWER(’teXt’), UPPER(’text’); erhält man. LOWER('teXt') UPPER('text') text TEXT . Mit der MySQL Abfrage SELECT TRIM(’ teXt ’), RTRIM(’ text ’), LTRIM(’ text ’); erhält man. TRIM('teXt ') RTRIM('text ') LTRIM('text ') teXt text text 126 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . Mit der MySQL Abfrage SELECT REPLACE(’www.mysql.com’, ’w’, ’Ww’); erhält man. REPLACE('www.mysql.com', 'w', 'Ww') WwWwWw.mysql.com . Mit der MySQL Abfrage SELECT REVERSE(’abc’); erhält man. REVERSE('abc') cba . Mit der MySQL Abfrage SELECT RIGHT(’foobarbar’, 4); erhält man. RIGHT('foobarbar', 4) rbar . Mit der MySQL Abfrage SELECT RPAD(’hi’,5,’!’); erhält man. RPAD('hi',5,'!') hi!!! . Mit der MySQL Abfrage SELECT RTRIM(’barbar ’); erhält man. 127 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net RTRIM('barbar ') barbar . 28.2 Abfragen mit Bezug zu einer Tabelle verwenden In der Tabelle Fachbereich wurde in der Spalte webAdresse der Punkt hinter http://www vergessen. Das korrigieren wir nun Mit der MySQL Abfrage SELECT webAdresse FROM Fachbereich; erhält man. webAdresse http://wwwFB02-frankfurt.de http://wwwFB03-frankfurt.de http://wwwFB04-frankfurt.de http://wwwFB05-frankfurt.de http://wwwFB06-frankfurt.de http://wwwFB07-frankfurt.de http://wwwFB11-frankfurt.de http://wwwFB12-frankfurt.de http://wwwFB22-frankfurt.de . Mit der MySQL Abfrage UPDATE Fachbereich SET webAdresse = REPLACE(webAdresse, ’http://www’, ’http://www.’); kann man die Spalte webAdresse korrigieren. . Mit der MySQL Abfrage SELECT webAdresse FROM Fachbereich; erhält man. webAdresse http://www.FB02-frankfurt.de http://www.FB03-frankfurt.de http://www.FB04-frankfurt.de http://www.FB05-frankfurt.de http://www.FB06-frankfurt.de 128 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net http://www.FB07-frankfurt.de http://www.FB11-frankfurt.de http://www.FB12-frankfurt.de http://www.FB22-frankfurt.de . 129 Kapitel 29 Statistische Funktionen 29.1 Einführung . 29.2 Berechnung deskriptiver Statistiken . Mit der MySQL Abfrage SELECT COUNT(note), ROUND(SUM(note),4) as ROUND(MIN(note),4) as ROUND(MAX(note),4) as ROUND(AVG(note),4) as ROUND(STD(note),4) as FROM Geprueft; sumNote, minNote, maxNote, meanNote, stdNote erhält man. COUNT(note) sumNote minNote maxNote meanNote stdNote 25 69.1000 1.0000 5.0000 2.7640 1.2026 . Die Varianz kann auf n Freiheitsgraden basieren und sie ist dann var(note)=STD(note)*STD(note), wobei STDDEV(note) Synonym für STD(note) Will man abe die Varianz, die auf n−1 Freiheitsgraden basiert, berechnen, so muss man diese programmieren Mit der MySQL Abfrage SELECT @anzahl:=COUNT(note), @summe:=ROUND(SUM(note),4), @summe2:=ROUND(SUM(note*note),4) FROM Geprueft; erhält man. @anzahl:=COUNT(note) @summe:=ROUND(SUM(note),4) @summe2:=ROUND(SUM(note*note),4) 25 69.1000 227.1500 130 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 131 . Mit der MySQL Abfrage SELECT @var2:=ROUND(((@anzahl*@summe2)-@summe*@summe)/(@anzahl*(@anzahl-1)),4); erhält man. @var2:=ROUND(((@anzahl*@summe2)@summe*@summe)/(@anzahl*(@anzahl-1)),4) 1.5066 . Mit der MySQL Abfrage SELECT ROUND(SQRT(@var2),4); erhält man. ROUND(SQRT(@var2),4) 1.2274 . Der Median ist der Wert, der am häufigsten vorkommt. Um ihn zu bestimmen, zählen wir jden Wert und ermitteln, welcher am häufigsten vorkommt Mit der MySQL Abfrage SELECT note, COUNT(note) as vorkommen FROM Geprueft GROUP BY note ORDER BY vorkommen DESC; erhält man. note vorkommen 1 5 3 3 3.3 3 3.7 3 2.3 3 4.7 2 2.7 2 1.7 2 4 1 5 1 . Mit der MySQL Abfrage Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net SELECT note, COUNT(note) as vorkommen FROM Geprueft GROUP BY note ORDER BY vorkommen DESC LIMIT 1; erhält man. note vorkommen 1 5 . 29.3 Gruppenbezogene deskriptive Statistiken . Nach Veranstaltung SELECT veranstaltungID, COUNT(note) as anzahl, ROUND(SUM(note),4) as sumNote, ROUND(MIN(note),4) as minNote, ROUND(MAX(note),4) as maxNote, ROUND(AVG(note),4) as meanNote, ROUND(STD(note),4) as stdNote FROM Geprueft GROUP BY veranstaltungID; erhält man. veranstaltungID anzahl sumNote minNote maxNote meanNote stdNote 12 1 3.7000 3.7000 3.7000 3.7000 0.0000 14 1 1.0000 1.0000 1.0000 1.0000 0.0000 15 1 4.7000 4.7000 4.7000 4.7000 0.0000 17 2 5.0000 1.0000 4.0000 2.5000 1.5000 18 3 6.6000 1.0000 3.3000 2.2000 0.9416 20 1 2.3000 2.3000 2.3000 2.3000 0.0000 21 1 2.3000 2.3000 2.3000 2.3000 0.0000 22 1 3.0000 3.0000 3.0000 3.0000 0.0000 24 1 1.0000 1.0000 1.0000 1.0000 0.0000 25 1 3.0000 3.0000 3.0000 3.0000 0.0000 26 1 2.7000 2.7000 2.7000 2.7000 0.0000 27 1 3.3000 3.3000 3.3000 3.3000 0.0000 29 2 6.7000 1.7000 5.0000 3.3500 1.6500 30 1 3.7000 3.7000 3.7000 3.7000 0.0000 31 2 7.7000 3.0000 4.7000 3.8500 0.8500 132 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 32 1 2.7000 2.7000 2.7000 2.7000 0.0000 35 1 3.3000 3.3000 3.3000 3.3000 0.0000 36 2 5.4000 1.7000 3.7000 2.7000 1.0000 41 1 1.0000 1.0000 1.0000 1.0000 0.0000 . Nach Lehrkraft SELECT lehrkraftID, COUNT(note) as anzahl, ROUND(SUM(note),4) as sumNote, ROUND(MIN(note),4) as minNote, ROUND(MAX(note),4) as maxNote, ROUND(AVG(note),4) as meanNote, ROUND(STD(note),4) as stdNote FROM Geprueft GROUP BY lehrkraftID; erhält man. lehrkraftID anzahl sumNote minNote maxNote meanNote stdNote 1002 1 1.0000 1.0000 1.0000 1.0000 0.0000 1004 1 5.0000 5.0000 5.0000 5.0000 0.0000 1005 1 3.7000 3.7000 3.7000 3.7000 0.0000 1007 3 4.3000 1.0000 2.3000 1.4333 0.6128 1008 2 5.0000 1.7000 3.3000 2.5000 0.8000 1009 5 16.4000 2.3000 4.7000 3.2800 0.8447 1011 5 14.3000 1.7000 3.7000 2.8600 0.7419 1014 2 8.7000 4.0000 4.7000 4.3500 0.3500 1015 2 6.0000 3.0000 3.0000 3.0000 0.0000 1016 1 1.0000 1.0000 1.0000 1.0000 0.0000 1017 1 1.0000 1.0000 1.0000 1.0000 0.0000 1018 1 2.7000 2.7000 2.7000 2.7000 0.0000 . Nach Veranstaltung und Lehrkraft SELECT veranstaltungID, lehrkraftID, COUNT(note) as anzahl, ROUND(SUM(note),4) as sumNote, ROUND(MIN(note),4) as minNote, ROUND(MAX(note),4) as maxNote, ROUND(AVG(note),4) as meanNote, ROUND(STD(note),4) as stdNote FROM Geprueft GROUP BY veranstaltungID, lehrkraftID; 133 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net erhält man. veranstaltungID lehrkraftID anzahl sumNote minNote maxNote meanNote stdNote 12 1009 1 3.7000 3.7000 3.7000 3.7000 0.0000 14 1007 1 1.0000 1.0000 1.0000 1.0000 0.0000 15 1014 1 4.7000 4.7000 4.7000 4.7000 0.0000 17 1002 1 1.0000 1.0000 1.0000 1.0000 0.0000 17 1014 1 4.0000 4.0000 4.0000 4.0000 0.0000 18 1008 1 3.3000 3.3000 3.3000 3.3000 0.0000 18 1009 1 2.3000 2.3000 2.3000 2.3000 0.0000 18 1017 1 1.0000 1.0000 1.0000 1.0000 0.0000 20 1011 1 2.3000 2.3000 2.3000 2.3000 0.0000 21 1007 1 2.3000 2.3000 2.3000 2.3000 0.0000 22 1009 1 3.0000 3.0000 3.0000 3.0000 0.0000 24 1016 1 1.0000 1.0000 1.0000 1.0000 0.0000 25 1015 1 3.0000 3.0000 3.0000 3.0000 0.0000 26 1018 1 2.7000 2.7000 2.7000 2.7000 0.0000 27 1011 1 3.3000 3.3000 3.3000 3.3000 0.0000 29 1004 1 5.0000 5.0000 5.0000 5.0000 0.0000 29 1011 1 1.7000 1.7000 1.7000 1.7000 0.0000 30 1011 1 3.7000 3.7000 3.7000 3.7000 0.0000 31 1009 1 4.7000 4.7000 4.7000 4.7000 0.0000 31 1015 1 3.0000 3.0000 3.0000 3.0000 0.0000 32 1009 1 2.7000 2.7000 2.7000 2.7000 0.0000 35 1011 1 3.3000 3.3000 3.3000 3.3000 0.0000 36 1005 1 3.7000 3.7000 3.7000 3.7000 0.0000 36 1008 1 1.7000 1.7000 1.7000 1.7000 0.0000 41 1007 1 1.0000 1.0000 1.0000 1.0000 0.0000 . 29.4 Generierung von Häufigkeitsverteilungen . Mit der MySQL Abfrage SELECT note, COUNT(note) as anzahl FROM Geprueft GROUP BY note; erhält man die Häufigkeitsverteilung. note anzahl 134 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 1 5 1.7 2 2.3 3 2.7 2 3 3 3.3 3 3.7 3 4 1 4.7 2 5 1 . Mit der MySQL Abfrage SELECT @anzahl:=COUNT(note) FROM Geprueft; . @anzahl:=COUNT(note) 25 . SELECT note, ROUND((COUNT(note)*100)/@anzahl,4) as prozent FROM Geprueft GROUP BY note; erhält man. note prozent 1 20.0000 1.7 8.0000 2.3 12.0000 2.7 8.0000 3 12.0000 3.3 12.0000 3.7 12.0000 4 4.0000 4.7 8.0000 5 4.0000 135 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . Mit der MySQL Abfrage SELECT note, REPEAT(’*’, COUNT(note)) as anzahl FROM Geprueft GROUP BY note; erhält man die Häufigkeitsverteilung. note anzahl 1 ***** 1.7 ** 2.3 *** 2.7 ** 3 *** 3.3 *** 3.7 *** 4 * 4.7 ** 5 * . Mit der MySQL Abfrage SELECT @anzahl:=COUNT(note) FROM Geprueft; . @anzahl:=COUNT(note) 25 . SELECT note, REPEAT(’*’, (COUNT(note)*100)/@anzahl) as prozent FROM Geprueft GROUP BY note; erhält man. note prozent 1 ******************** 1.7 ******** 2.3 ************ 136 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 2.7 ******** 3 ************ 3.3 ************ 3.7 ************ 4 **** 4.7 ******** 5 **** . 29.5 Berechnung linerarer Regression . Mit der MySQL Abfrage SELECT @anzahl:=COUNT(raumID) AS anzahl, @sumBreite:=ROUND(SUM(breite),4) AS {\ss}um Breite", @meanBreite:=ROUND(AVG(breite),4) AS {\ss}um Breite", @sumLaenge:=ROUND(SUM(laenge),4) AS {\ss}um Laenge", @meanLaenge:=ROUND(AVG(laenge),4) AS {\ss}um Laenge", @sumBreite2:=ROUND(SUM(breite*breite),4) AS {\ss}um Breite2", @sumLaenge2:=ROUND(SUM(laenge*laenge),4) AS {\ss}um Laenge2", @sumBreiteLaenge:=ROUND(SUM(breite*laenge),4) AS {\ss}um Breite Laenge" FROM Raum; erhält man die Häufigkeitsverteilun. anzahl sum Breite sum Breite sum Laenge sum Laenge sum Breite2 13 445.9500 34.3038 458.2500 35.2500 18180.4125 19898.9775 13632.4075 . Mit der MySQL Abfrage SELECT @a1:=ROUND((@anzahl*@sumBreiteLaenge-@sumBreite*@sumLaenge)/ (@anzahl*@sumBreite2-@sumBreite*@sumBreite),4) AS slope; . slope -0.7241 . Mit der MySQL Abfrage sum Laenge2 sum Breite Laenge 137 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 138 SELECT @a0:=ROUND((@meanLaenge-@a1*@meanBreite),4) AS intercept; . intercept 60.0894 . Mit der MySQL Abfrage SELECT CONCAT(’Laenge = ’, ROUND(@a1,4),’ * Breite + ’,ROUND(@a0,4)) AS ’least squares regression’; . least squares regression Laenge = -0.7241 * Breite + 60.0894 . Mit der MySQL Abfrage SELECT ROUND(((@anzahl*@sumBreiteLaenge-@sumBreite*@sumLaenge)/ SQRT((@anzahl*@sumBreite2-@sumBreite*@sumBreite)*(@anzahl*@sumLaenge2-@sumLaenge*@sumLaenge))),4) AS korrelation; . korrelation -0.6352 . Kapitel 30 Kurze SQL–Einführung Nachdem wir uns mit dem Datenbank kurz beschäftigt haben und nachdem Wir MySQL installiert haben, geben wir in diesem Kapitel eine kurze Einführung in die Datenbanksprache MySQL. 30.1 Alle Zeilen einer Tabelle anzeigen Es ist ziemlich einfach, sich alle Datensätze einer einzigen Tabelle anzeigen zu lassen. Sie können sich aber auch die Datensätze verschiedener Tabellen ansehen, vorher eine Auswahl treffen, was Sie genau interessiert, und dann auch noch Berechnungen mit oder ohne Veränderungen an den Werten ausführen. Mit einem einfachen SELECT-Befehl können Sie sich den gesamten Inhalt einer oder mehrerer Spalten anzeigen lassen. Mit diesem Befehl werden Ihnen die Namen und Vornamen aller Personen, die in der Tabelle kunde gespeichert sind, angezeigt: . Mit der MySQL Abfrage SELECT * FROM Ort; erhält man. plz geoBreite geoLaenge CH-1272 134.120000 23.450000 CH-1273 134.120000 23.450000 D-31281 -40.981092 -43.268893 D-33229 -45.098792 -24.101093 D-80765 -19.459092 -25.092296 D-91256 -19.425000 -39.261198 D-93754 -46.817692 -36.168495 . Wenn Sie die Befehle direkt in MySQL eingeben, müssen Sie die mit Semikolon (;) abschliessen und dann mit 139 Enter ausführen Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 140 30.2 Spalten auswählen . Mit der MySQL Abfrage SELECT plz FROM Ort; erhält man. plz CH-1272 CH-1273 D-31281 D-33229 D-80765 D-91256 D-93754 . 30.3 Inhaltlich gleiche Zeilen von der Ausgabe ausschliessen . Mit der MySQL Abfrage SELECT DISTINCT wPF FROM Besucht; erhält man. wPF Gast Pflichtfach Wahlfach NULL . Um eine Distinct–Ergebnismenge zu generieren, müssen die Daten sortiert werden, was bei grossen Ergebnismengen viel Zeit in Anspruch nimmt. Bitte fallen Sie nicht darauf herein, DISTINCT zu benutzen, nur um Duplikate auszuschliessen. Stattdessen nehmen Sie sich besser Zeit, die Daten, mit denen Sie arbeiten, genau zu verstehen. So können Sie erkennen, ob Duplikate möglich sind oder nicht. 30.4 Spalten mit NULL–Werten abfragen Vielfach treffen Sie bei der Arbeit mit SQL auf sogenannte NULL–Marken. Häufig wird hierfür auch der Begriff NULL–Wert oder NULL–Values verwendet. NULL bedeutet, dass ein Attribut (Wert) für das Feld fehlt, d.h., dass der Wert leer oder Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net unbekannt ist. NULL kann demnach bedeuten: • Das Attribut hat einen Wert, dieser ist aber nicht bekannt • Das Attribut hat in der Realität keinen Wert. NULL ist also nicht 0, weil dies ein konkreter bekannter Wert ist. NULL ist auch nicht eine leere Zeichenkette wie ''. Mit der MySQL Abfrage SELECT * FROM Besucht WHERE wPF IS NULL; erhält man. student veranstaltung wPF punkte fn610-3893-2306 33 NULL 41 mh303-5086-2257 11 NULL 69 qb395-9858-6804 12 NULL 92 qb395-9858-6804 19 NULL 44 ry307-0065-8575 28 NULL 83 sv377-8994-1980 35 NULL 43 ui175-6966-6040 21 NULL 46 vu769-2638-9984 14 NULL 60 wm793-9705-1200 22 NULL 62 zr166-3038-2048 35 NULL 40 . Mit der MySQL Abfrage SELECT * FROM Besucht WHERE wPF IS NOT NULL; erhält man. student veranstaltung wPF punkte ap256-3212-3933 13 Gast 21 ap256-3212-3933 23 Gast 57 ap256-3212-3933 26 Gast 88 ap256-3212-3933 33 Pflichtfach 52 fn610-3893-2306 13 Gast 76 fn610-3893-2306 16 Gast 67 fn610-3893-2306 17 Pflichtfach 83 fn610-3893-2306 21 Wahlfach 68 fn610-3893-2306 25 Pflichtfach 57 gg525-7926-7879 26 Pflichtfach 27 gg525-7926-7879 33 Wahlfach 25 gg525-7926-7879 35 Pflichtfach 80 141 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net kz977-7624-2277 11 Pflichtfach 42 kz977-7624-2277 23 Wahlfach 93 kz977-7624-2277 24 Gast 61 kz977-7624-2277 28 Pflichtfach 25 md503-8006-7828 12 Wahlfach 27 md503-8006-7828 19 Gast 35 md503-8006-7828 26 Wahlfach 92 md503-8006-7828 29 Pflichtfach 42 md503-8006-7828 30 Wahlfach 41 md503-8006-7828 31 Pflichtfach 45 mh303-5086-2257 17 Pflichtfach 40 mh303-5086-2257 24 Pflichtfach 41 mh303-5086-2257 26 Pflichtfach 29 nf165-3898-8727 22 Pflichtfach 29 nf165-3898-8727 23 Pflichtfach 30 nf165-3898-8727 25 Pflichtfach 59 nf165-3898-8727 26 Gast 35 nf165-3898-8727 33 Gast 47 qa922-4226-3460 30 Wahlfach 39 qa922-4226-3460 35 Wahlfach 47 qa922-4226-3460 40 Wahlfach 32 qb395-9858-6804 24 Gast 90 qb395-9858-6804 25 Pflichtfach 41 qb395-9858-6804 33 Wahlfach 22 qb395-9858-6804 39 Wahlfach 31 rf900-2826-3516 11 Wahlfach 33 rf900-2826-3516 30 Pflichtfach 27 ry307-0065-8575 16 Wahlfach 35 ry307-0065-8575 19 Pflichtfach 93 ry307-0065-8575 22 Wahlfach 23 ry307-0065-8575 38 Wahlfach 70 sv377-8994-1980 30 Gast 74 tr133-3852-1694 13 Wahlfach 54 tr133-3852-1694 22 Pflichtfach 37 tr133-3852-1694 25 Wahlfach 47 tr133-3852-1694 41 Pflichtfach 73 ui175-6966-6040 12 Pflichtfach 60 ui175-6966-6040 33 Wahlfach 35 vu769-2638-9984 24 Pflichtfach 67 vu769-2638-9984 39 Pflichtfach 64 vw937-4659-4381 26 Pflichtfach 45 vw937-4659-4381 28 Pflichtfach 62 vw937-4659-4381 30 Wahlfach 93 142 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net vw937-4659-4381 37 Gast 90 wm793-9705-1200 13 Gast 74 wm793-9705-1200 26 Pflichtfach 26 wm793-9705-1200 30 Pflichtfach 74 wm793-9705-1200 37 Gast 62 wq561-0592-3410 13 Wahlfach 25 wq561-0592-3410 21 Gast 30 wq561-0592-3410 25 Gast 71 wq561-0592-3410 26 Wahlfach 37 wq561-0592-3410 29 Pflichtfach 52 wq561-0592-3410 36 Gast 53 xn096-9487-6455 11 Gast 27 xn096-9487-6455 22 Gast 75 xn096-9487-6455 23 Wahlfach 91 xn096-9487-6455 26 Pflichtfach 29 xn096-9487-6455 35 Wahlfach 92 xx292-1755-8089 22 Wahlfach 84 zr166-3038-2048 25 Pflichtfach 40 zr166-3038-2048 40 Pflichtfach 45 strasseHNr . 30.5 Spalten mit Leerzeichen abfragen . Mit der MySQL Abfrage SELECT anrede, vorname, nachname, strasseHNr FROM Student WHERE strasseHNr=’’; erhält man. anrede vorname nachname Herr Ebernand Bento Herr Mathis Looschelders Herr Ymer Fabienne . Mit der MySQL Abfrage SELECT anrede, vorname, nachname, strasseHNr FROM Student WHERE strasseHNr<>’’; 143 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 144 erhält man. anrede vorname nachname strasseHNr Herr Gianni Briland Rathausplatz 229 Herr Egfried Ellis Boyenstrasse 86 Herr Boy Witt Am Nordbahnhof 163 Herr Aster Frantzen Markt 125 Frau Mariechen Chaney Arabienstrasse 97 Frau Margarete Buch Berolinastrasse 84 Herr Aarne Stracke Freiligrathstr. 65 Frau Kurumi Elstner Holderackerstr. 41 Frau Krystiana Baumgarten Bahnstr. 151 Herr Vitali Rosenbaum Kaiser-Wilhelm-Platz 40 Herr Otthein Pahl Markt 80 Frau Trudhildis Winkel Kavarinerstr. 181 Herr Goswin Haug Rathausmarkt 53 Herr Knut Moeller Charlottenburger 186 Frau Quirine Hocke Am Rathaus 93 Herr Neidhardt Thomasius Glinkastrasse 91 Frau Elizabeth Schmieder Alexanderstrasse 210 Herr Anaklet Heitmann Caroline-vonHumboldt-Weg 241 Frau Luitgard Krumm Mosterstr. 50 Herr Wilmer Herbst Humbergweg 243 . 30.6 Zeilen mit einer Bedingung auswählen . Mit der MySQL Abfrage SELECT anrede, vorname, nachname, studiengang FROM Student WHERE studiengang=’FB04’; erhält man. anrede vorname nachname studiengang Herr Aster Frantzen FB04 Herr Mathis Looschelders FB04 Frau Trudhildis Winkel FB04 Frau Luitgard Krumm FB04 Str. Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . Mit der MySQL Abfrage SELECT veranstaltungID, bezeichnung, semester FROM Veranstaltung WHERE maxAnzahl=tatAnzahl; kann man die ausgebuchte Veranstaltungen ermitteln. veranstaltungID bezeichnung semester 18 Armut und Entwicklung SS2012 22 law and ethics WS2014 25 Hebrew language WS2013 37 Spanische Sprache SS2014 . 30.7 Zeilen mit verbundenen Bedingungen auswählen . Mit der MySQL Abfrage SELECT anrede, vorname, nachname, studiengang FROM Student WHERE studiengang=’FB04’ AND anrede=’Frau’; erhält man. anrede vorname nachname studiengang Frau Trudhildis Winkel FB04 Frau Luitgard Krumm FB04 . Mit der MySQL Abfrage SELECT anrede, vorname, nachname, studiengang FROM Student WHERE studiengang=’FB04’ OR anrede=’Frau’; erhält man. anrede vorname nachname studiengang Herr Aster Frantzen FB04 Frau Mariechen Chaney FB07 Herr Mathis Looschelders FB04 Frau Margarete Buch FB05 Frau Kurumi Elstner FB07 Frau Krystiana Baumgarten FB11 145 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Frau Trudhildis Winkel FB04 Frau Quirine Hocke FB02 Frau Elizabeth Schmieder FB11 Frau Luitgard Krumm FB04 . 30.8 SELECT und Variablen . Mit der MySQL Abfrage SELECT @lePrenom:=vorname, @leNom:=nachname FROM Student WHERE studentID=’ap256-3212-3933’; erhält man. @lePrenom:=vorname @leNom:=nachname Gianni Briland . 30.9 SELECT . . . INTO–Anweisung . 146 Kapitel 31 Datensätze sortieren (ORDER BY) 31.1 Einführung . Mit der MySQL Abfrage SELECT anrede, vorname, nachname, geburtsDatum FROM Student ORDER BY geburtsDatum; erhält man. anrede vorname nachname geburtsDatum Herr Goswin Haug 1983-05-20 Herr Mathis Looschelders 1984-04-10 Herr Anaklet Heitmann 1984-08-07 Frau Luitgard Krumm 1984-11-23 Frau Kurumi Elstner 1986-02-19 Herr Vitali Rosenbaum 1986-12-21 Herr Gianni Briland 1987-04-01 Herr Neidhardt Thomasius 1987-06-22 Herr Aarne Stracke 1988-02-04 Herr Boy Witt 1988-07-12 Herr Ebernand Bento 1990-01-13 Frau Mariechen Chaney 1990-02-20 Frau Quirine Hocke 1990-04-01 Herr Ymer Fabienne 1990-08-27 Frau Elizabeth Schmieder 1990-09-04 Frau Margarete Buch 1990-10-10 Frau Trudhildis Winkel 1991-02-12 Herr Wilmer Herbst 1991-04-05 Herr Knut Moeller 1992-10-05 Herr Egfried Ellis 1993-01-03 Herr Aster Frantzen 1993-08-07 Herr Otthein Pahl 1995-02-22 Frau Krystiana Baumgarten 1995-04-07 147 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . Mit der MySQL Abfrage SELECT anrede, vorname, nachname, geburtsDatum FROM Student ORDER BY geburtsDatum DESC; erhält man. anrede vorname nachname geburtsDatum Frau Krystiana Baumgarten 1995-04-07 Herr Otthein Pahl 1995-02-22 Herr Aster Frantzen 1993-08-07 Herr Egfried Ellis 1993-01-03 Herr Knut Moeller 1992-10-05 Herr Wilmer Herbst 1991-04-05 Frau Trudhildis Winkel 1991-02-12 Frau Margarete Buch 1990-10-10 Frau Elizabeth Schmieder 1990-09-04 Herr Ymer Fabienne 1990-08-27 Frau Quirine Hocke 1990-04-01 Frau Mariechen Chaney 1990-02-20 Herr Ebernand Bento 1990-01-13 Herr Boy Witt 1988-07-12 Herr Aarne Stracke 1988-02-04 Herr Neidhardt Thomasius 1987-06-22 Herr Gianni Briland 1987-04-01 Herr Vitali Rosenbaum 1986-12-21 Frau Kurumi Elstner 1986-02-19 Frau Luitgard Krumm 1984-11-23 Herr Anaklet Heitmann 1984-08-07 Herr Mathis Looschelders 1984-04-10 Herr Goswin Haug 1983-05-20 . Mit der MySQL Abfrage SELECT studentID, studiengang, fachrichtung FROM Student ORDER BY studiengang DESC, fachrichtung; erhält man. studentID studiengang fachrichtung wq561-0592-3410 FB11 Betriebswirtschaftslehre (BWL) rx816-9173-9273 FB11 Kommunikationswissenschaften 148 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net md503-8006-7828 FB11 Volkswirtschaftslehre (VWL) mc121-0102-0386 FB07 Bioinformatik qa922-4226-3460 FB07 Biologie der Tiere qb395-9858-6804 FB07 Biologie der Tiere sv377-8994-1980 FB07 Biologie der Tiere gg525-7926-7879 FB07 Infektionsbiologie wm793-9705-1200 FB05 Innenarchitektur nf165-3898-8727 FB05 Kulturwissenschaften zr166-3038-2048 FB05 Religisionswissenschaft ry307-0065-8575 FB05 Theaterwissenschaft kz977-7624-2277 FB04 Elektrodynamik mh303-5086-2257 FB04 Elektrodynamik tr133-3852-1694 FB04 Halbleiter-Quantenoptik xx292-1755-8089 FB04 Theoretische Physik ap256-3212-3933 FB03 Bioinformatik fn610-3893-2306 FB03 Praktische Informatik xn096-9487-6455 FB03 Theoretische Informatik vu769-2638-9984 FB02 Algebra und Zahlentheorie ui175-6966-6040 FB02 Analysis vw937-4659-4381 FB02 Analysis rf900-2826-3516 FB02 Angewandte Mathematik . 31.2 ORDER BY und CONCAT . Mit der MySQL Abfrage SELECT veranstaltungID, bezeichnung, semester, wochenStunden FROM Veranstaltung ORDER BY CONCAT(SUBSTRING(semester,3,4), SUBSTRING(semester,1,2)); erhält man. veranstaltungID bezeichnung semester wochenStunden 29 fonction didactique et morale SS2012 3 27 French language SS2012 2 18 Armut und Entwicklung SS2012 2 20 Russische Sprache SS2012 4 16 Smart Graphics WS2012 3.75 17 Meteorologie WS2012 3.25 32 verteilte Systeme SS2013 2 39 Arabische Sprache SS2013 4.25 149 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 21 Programmierung SS2013 5.5 19 scientific communication SS2013 5 15 Datennetze SS2013 4 12 Grundlagen der Astronomie SS2013 4.5 31 Urdu WS2013 3.5 33 Grundlagen der Geologie und der Gesteinskunde WS2013 2.25 13 evolutionary biology WS2013 5.25 36 Russische Sprache WS2013 2.25 25 Hebrew language WS2013 2.75 38 chinesische Sprachen WS2013 4.75 41 Hindi WS2013 5.75 35 Grundlagenwissen Sprache II SS2014 4 37 Spanische Sprache SS2014 3.25 40 Griechische Sprache SS2014 3 28 majeures du XVIIe au XIXe SS2014 2.25 26 Software Architektur SS2014 3 23 XML-Daten SS2014 2.75 14 visualization systems SS2014 3.25 11 Informationssicherheit SS2014 3.75 30 Realisierung digitaler Medien WS2014 2.75 24 Computational Vision WS2014 3 22 law and ethics WS2014 2.25 . Mit der MySQL Abfrage SELECT veranstaltungID, bezeichnung, semester, wochenStunden FROM Veranstaltung ORDER BY RIGHT(semester,4), LEFT(semester,2); erhält man. veranstaltungID bezeichnung semester wochenStunden 29 fonction didactique et morale SS2012 3 27 French language SS2012 2 18 Armut und Entwicklung SS2012 2 20 Russische Sprache SS2012 4 16 Smart Graphics WS2012 3.75 17 Meteorologie WS2012 3.25 32 verteilte Systeme SS2013 2 39 Arabische Sprache SS2013 4.25 21 Programmierung SS2013 5.5 19 scientific communication SS2013 5 15 Datennetze SS2013 4 150 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 12 Grundlagen der Astronomie SS2013 4.5 31 Urdu WS2013 3.5 33 Grundlagen der Geologie und der Gesteinskunde WS2013 2.25 13 evolutionary biology WS2013 5.25 36 Russische Sprache WS2013 2.25 25 Hebrew language WS2013 2.75 38 chinesische Sprachen WS2013 4.75 41 Hindi WS2013 5.75 35 Grundlagenwissen Sprache II SS2014 4 37 Spanische Sprache SS2014 3.25 40 Griechische Sprache SS2014 3 28 majeures du XVIIe au XIXe SS2014 2.25 26 Software Architektur SS2014 3 23 XML-Daten SS2014 2.75 14 visualization systems SS2014 3.25 11 Informationssicherheit SS2014 3.75 30 Realisierung digitaler Medien WS2014 2.75 24 Computational Vision WS2014 3 22 law and ethics WS2014 2.25 . 31.3 ORDER BY und FIND_IN_SET . Mit der MySQL Abfrage SELECT student, veranstaltung, wPF FROM Besucht ORDER BY FIND\_IN\_SET(wPF,’Pflichfach,Wahlfach,Gast’); erhält man. student veranstaltung wPF zr166-3038-2048 35 NULL ry307-0065-8575 28 NULL vu769-2638-9984 14 NULL qb395-9858-6804 19 NULL wm793-9705-1200 22 NULL mh303-5086-2257 11 NULL qb395-9858-6804 12 NULL ui175-6966-6040 21 NULL sv377-8994-1980 35 NULL 151 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net fn610-3893-2306 33 NULL ry307-0065-8575 19 Pflichtfach wq561-0592-3410 29 Pflichtfach qb395-9858-6804 25 Pflichtfach rf900-2826-3516 30 Pflichtfach nf165-3898-8727 25 Pflichtfach tr133-3852-1694 22 Pflichtfach tr133-3852-1694 41 Pflichtfach zr166-3038-2048 25 Pflichtfach xn096-9487-6455 26 Pflichtfach wm793-9705-1200 30 Pflichtfach wm793-9705-1200 26 Pflichtfach zr166-3038-2048 40 Pflichtfach vw937-4659-4381 28 Pflichtfach vw937-4659-4381 26 Pflichtfach vu769-2638-9984 39 Pflichtfach vu769-2638-9984 24 Pflichtfach ui175-6966-6040 12 Pflichtfach nf165-3898-8727 23 Pflichtfach nf165-3898-8727 22 Pflichtfach kz977-7624-2277 28 Pflichtfach kz977-7624-2277 11 Pflichtfach fn610-3893-2306 17 Pflichtfach gg525-7926-7879 35 Pflichtfach gg525-7926-7879 26 Pflichtfach fn610-3893-2306 25 Pflichtfach ap256-3212-3933 33 Pflichtfach md503-8006-7828 31 Pflichtfach mh303-5086-2257 26 Pflichtfach md503-8006-7828 29 Pflichtfach mh303-5086-2257 17 Pflichtfach mh303-5086-2257 24 Pflichtfach qa922-4226-3460 30 Wahlfach xx292-1755-8089 22 Wahlfach ui175-6966-6040 33 Wahlfach gg525-7926-7879 33 Wahlfach xn096-9487-6455 35 Wahlfach xn096-9487-6455 23 Wahlfach fn610-3893-2306 21 Wahlfach vw937-4659-4381 30 Wahlfach md503-8006-7828 12 Wahlfach wq561-0592-3410 13 Wahlfach wq561-0592-3410 26 Wahlfach 152 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net kz977-7624-2277 23 Wahlfach md503-8006-7828 30 Wahlfach qb395-9858-6804 33 Wahlfach qb395-9858-6804 39 Wahlfach qa922-4226-3460 40 Wahlfach qa922-4226-3460 35 Wahlfach rf900-2826-3516 11 Wahlfach ry307-0065-8575 16 Wahlfach md503-8006-7828 26 Wahlfach ry307-0065-8575 22 Wahlfach tr133-3852-1694 25 Wahlfach tr133-3852-1694 13 Wahlfach ry307-0065-8575 38 Wahlfach ap256-3212-3933 26 Gast nf165-3898-8727 26 Gast ap256-3212-3933 23 Gast xn096-9487-6455 22 Gast nf165-3898-8727 33 Gast xn096-9487-6455 11 Gast wq561-0592-3410 36 Gast kz977-7624-2277 24 Gast qb395-9858-6804 24 Gast wq561-0592-3410 25 Gast sv377-8994-1980 30 Gast md503-8006-7828 19 Gast ap256-3212-3933 13 Gast wm793-9705-1200 13 Gast fn610-3893-2306 16 Gast fn610-3893-2306 13 Gast wm793-9705-1200 37 Gast wq561-0592-3410 21 Gast vw937-4659-4381 37 Gast 153 . 31.4 Sortieren mit Ausdrücken Resultate anhand von Spaltendaten zu sortieren ist ja schön und gut, aber manchmal möchte man doch gern ein anderes Sortierkriterium anwenden, eines, das nicht in der Datenbank gespeichert ist und möglicherweise auch nirgendwo sonst in der Abfrage erscheint. In solche Fällen können Sie in Ihre ORDER BY-Klausel auch einen Ausdruck schreiben. Vielleicht möchten Sie ja Ihre Studentendaten nach den letzten drei Ziffern der studentID sortieren: ORDER BY RIGHT(studentID, 3); Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 154 31.5 Sortieren nach numerischen Platzhaltern Wenn Sie in Ihrer SELECT–Klausel die Daten nach Spalten sortieren, können Sie diese Spalten statt nach Namen auch nach ihrer Position in der SELECT–Klausel referenzieren. Ein Beispiel: Angenommen, Sie möchten Ihre Daten anhand der zweiten und fünften Rückgabespalte einer Abfrage sortieren: ORDER BY 2, 5; Kapitel 41 GROUP BY und Aggregatfunktionen 41.1 COUNT() . Mit der MySQL Abfrage SELECT COUNT(*) FROM Student; erhält man. COUNT(*) 23 . Mit der MySQL Abfrage SELECT COUNT(*) AS anzahl_der_Studenten FROM Student; erhält man. anzahl_der_Studenten 23 . Mit der MySQL Abfrage SELECT COUNT(*) AS anzahl_der_maennlichen_Studenten FROM Student WHERE anrede=’Herr’; erhält man. anzahl_der_maennlichen_Studenten 15 . 155 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 41.2 MIN() und MAX() . Mit der MySQL Abfrage SELECT MAX(geburtsDatum) AS juegster_Student FROM Student; erhält man. juegster_Student 1995-04-07 . Mit der MySQL Abfrage SELECT MIN(geburtsDatum) AS aeltester_Student FROM Student; erhält man. aeltester_Student 1983-05-20 . 41.3 AVG() und STDDEV() . Mit der MySQL Abfrage SELECT AVG(tatAnzahl) AS Mittlere_Anzahl FROM Veranstaltung; erhält man. Mittlere_Anzahl 24.9667 . Mit der MySQL Abfrage SELECT STDDEV(tatAnzahl) AS StdAbw_Anzahl FROM Veranstaltung; erhält man. StdAbw_Anzahl 6.4212 156 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . 41.4 GROUP BY bei mehreren Spalten . Mit der MySQL Abfrage SELECT anrede, pLZ, COUNT(*) AS anzahl_der_Studenten_aus_Stadt FROM Student GROUP BY anrede, pLZ ORDER BY anrede, pLZ; erhält man. anrede plz anzahl_der_Studenten_aus_Stadt Frau CH-1272 1 Frau D-31281 1 Frau D-80765 2 Frau D-91256 2 Frau D-93754 2 Herr D-31281 1 Herr D-33229 3 Herr D-80765 6 Herr D-91256 1 Herr D-93754 4 . Mit der MySQL Abfrage SELECT anrede, pLZ, COUNT(*) AS anzahl_der_Studenten_aus_Stadt FROM Student GROUP BY anrede, pLZ ORDER BY pLZ, anrede; erhält man. anrede plz anzahl_der_Studenten_aus_Stadt Frau CH-1272 1 Frau D-31281 1 Herr D-31281 1 Herr D-33229 3 Frau D-80765 2 Herr D-80765 6 Frau D-91256 2 Herr D-91256 1 Frau D-93754 2 Herr D-93754 4 157 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net . 41.5 Mehrere COUNT–Abfragen mit einer Abfrage . 41.6 GROUP BY Clause Name Description AVG() Return the average value of the argument BIT_AND() Return bitwise and BIT_OR() Return bitwise or BIT_XOR() Return bitwise xor COUNT(DISTINCT) Return the count of a number of different values COUNT() Return a count of the number of rows returned GROUP_CONCAT() Return a concatenated string MAX() Return the maximum value MIN() Return the minimum value STD() Return the population standard deviation STDDEV_POP() Return the population standard deviation STDDEV_SAMP() Return the sample standard deviation STDDEV() Return the population standard deviation SUM() Return the sum VAR_POP() Return the population standard variance VAR_SAMP() Return the sample variance VARIANCE() Return the population standard variance Tabelle 41.6.0.1: Operatoren und Ausdrücke 158 Kapitel 51 CROSS JOIN 51.1 Einführung . SELECT * FROM L CROSS JOIN R bzw. SELECT * FROM L JOIN R L a b c 11 21 12 12 22 13 13 23 14 R a b c c d 11 21 12 10 51 c d 11 21 12 12 52 10 51 12 22 13 10 51 12 52 12 22 13 12 52 13 23 14 10 51 13 23 14 12 52 . 51.2 Anwendung . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Student st CROSS JOIN Ort ot ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge Herr Gianni Briland -19.425000 -39.261198 Herr Gianni Briland -46.817692 -36.168495 Herr Gianni Briland 134.120000 23.450000 Herr Gianni Briland 134.120000 23.450000 Herr Gianni Briland -40.981092 -43.268893 Herr Gianni Briland -45.098792 -24.101093 Herr Gianni Briland -19.459092 -25.092296 Herr Egfried Ellis 134.120000 23.450000 Herr Egfried Ellis 134.120000 23.450000 Herr Egfried Ellis -40.981092 -43.268893 Herr Egfried Ellis -45.098792 -24.101093 159 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Egfried Ellis -19.459092 -25.092296 Herr Egfried Ellis -19.425000 -39.261198 Herr Egfried Ellis -46.817692 -36.168495 Herr Boy Witt 134.120000 23.450000 Herr Boy Witt 134.120000 23.450000 Herr Boy Witt -40.981092 -43.268893 Herr Boy Witt -45.098792 -24.101093 Herr Boy Witt -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Boy Witt -46.817692 -36.168495 Herr Aster Frantzen -45.098792 -24.101093 Herr Aster Frantzen -19.459092 -25.092296 Herr Aster Frantzen -19.425000 -39.261198 Herr Aster Frantzen -46.817692 -36.168495 Herr Aster Frantzen 134.120000 23.450000 Herr Aster Frantzen 134.120000 23.450000 Herr Aster Frantzen -40.981092 -43.268893 Frau Mariechen Chaney -19.425000 -39.261198 Frau Mariechen Chaney -46.817692 -36.168495 Frau Mariechen Chaney 134.120000 23.450000 Frau Mariechen Chaney 134.120000 23.450000 Frau Mariechen Chaney -40.981092 -43.268893 Frau Mariechen Chaney -45.098792 -24.101093 Frau Mariechen Chaney -19.459092 -25.092296 Herr Ebernand Bento 134.120000 23.450000 Herr Ebernand Bento 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Ebernand Bento -45.098792 -24.101093 Herr Ebernand Bento -19.459092 -25.092296 Herr Ebernand Bento -19.425000 -39.261198 Herr Ebernand Bento -46.817692 -36.168495 Herr Mathis Looschelders 134.120000 23.450000 Herr Mathis Looschelders 134.120000 23.450000 Herr Mathis Looschelders -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Herr Mathis Looschelders -19.459092 -25.092296 Herr Mathis Looschelders -19.425000 -39.261198 Herr Mathis Looschelders -46.817692 -36.168495 Frau Margarete Buch -40.981092 -43.268893 Frau Margarete Buch -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Frau Margarete Buch -19.425000 -39.261198 Frau Margarete Buch -46.817692 -36.168495 160 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Frau Margarete Buch 134.120000 23.450000 Frau Margarete Buch 134.120000 23.450000 Herr Aarne Stracke -19.459092 -25.092296 Herr Aarne Stracke -19.425000 -39.261198 Herr Aarne Stracke -46.817692 -36.168495 Herr Aarne Stracke 134.120000 23.450000 Herr Aarne Stracke 134.120000 23.450000 Herr Aarne Stracke -40.981092 -43.268893 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Frau Kurumi Elstner 134.120000 23.450000 Frau Kurumi Elstner 134.120000 23.450000 Frau Kurumi Elstner -40.981092 -43.268893 Frau Kurumi Elstner -45.098792 -24.101093 Frau Kurumi Elstner -19.459092 -25.092296 Frau Kurumi Elstner -19.425000 -39.261198 Herr Ymer Fabienne 134.120000 23.450000 Herr Ymer Fabienne 134.120000 23.450000 Herr Ymer Fabienne -40.981092 -43.268893 Herr Ymer Fabienne -45.098792 -24.101093 Herr Ymer Fabienne -19.459092 -25.092296 Herr Ymer Fabienne -19.425000 -39.261198 Herr Ymer Fabienne -46.817692 -36.168495 Frau Krystiana Baumgarten 134.120000 23.450000 Frau Krystiana Baumgarten -40.981092 -43.268893 Frau Krystiana Baumgarten -45.098792 -24.101093 Frau Krystiana Baumgarten -19.459092 -25.092296 Frau Krystiana Baumgarten -19.425000 -39.261198 Frau Krystiana Baumgarten -46.817692 -36.168495 Frau Krystiana Baumgarten 134.120000 23.450000 Herr Vitali Rosenbaum -19.459092 -25.092296 Herr Vitali Rosenbaum -19.425000 -39.261198 Herr Vitali Rosenbaum -46.817692 -36.168495 Herr Vitali Rosenbaum 134.120000 23.450000 Herr Vitali Rosenbaum 134.120000 23.450000 Herr Vitali Rosenbaum -40.981092 -43.268893 Herr Vitali Rosenbaum -45.098792 -24.101093 Herr Otthein Pahl -46.817692 -36.168495 Herr Otthein Pahl 134.120000 23.450000 Herr Otthein Pahl 134.120000 23.450000 Herr Otthein Pahl -40.981092 -43.268893 Herr Otthein Pahl -45.098792 -24.101093 Herr Otthein Pahl -19.459092 -25.092296 161 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Otthein Pahl -19.425000 -39.261198 Frau Trudhildis Winkel 134.120000 23.450000 Frau Trudhildis Winkel 134.120000 23.450000 Frau Trudhildis Winkel -40.981092 -43.268893 Frau Trudhildis Winkel -45.098792 -24.101093 Frau Trudhildis Winkel -19.459092 -25.092296 Frau Trudhildis Winkel -19.425000 -39.261198 Frau Trudhildis Winkel -46.817692 -36.168495 Herr Goswin Haug 134.120000 23.450000 Herr Goswin Haug -40.981092 -43.268893 Herr Goswin Haug -45.098792 -24.101093 Herr Goswin Haug -19.459092 -25.092296 Herr Goswin Haug -19.425000 -39.261198 Herr Goswin Haug -46.817692 -36.168495 Herr Goswin Haug 134.120000 23.450000 Herr Knut Moeller -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Herr Knut Moeller -19.425000 -39.261198 Herr Knut Moeller -46.817692 -36.168495 Herr Knut Moeller 134.120000 23.450000 Herr Knut Moeller 134.120000 23.450000 Herr Knut Moeller -40.981092 -43.268893 Frau Quirine Hocke -19.425000 -39.261198 Frau Quirine Hocke -46.817692 -36.168495 Frau Quirine Hocke 134.120000 23.450000 Frau Quirine Hocke 134.120000 23.450000 Frau Quirine Hocke -40.981092 -43.268893 Frau Quirine Hocke -45.098792 -24.101093 Frau Quirine Hocke -19.459092 -25.092296 Herr Neidhardt Thomasius 134.120000 23.450000 Herr Neidhardt Thomasius 134.120000 23.450000 Herr Neidhardt Thomasius -40.981092 -43.268893 Herr Neidhardt Thomasius -45.098792 -24.101093 Herr Neidhardt Thomasius -19.459092 -25.092296 Herr Neidhardt Thomasius -19.425000 -39.261198 Herr Neidhardt Thomasius -46.817692 -36.168495 Frau Elizabeth Schmieder 134.120000 23.450000 Frau Elizabeth Schmieder 134.120000 23.450000 Frau Elizabeth Schmieder -40.981092 -43.268893 Frau Elizabeth Schmieder -45.098792 -24.101093 Frau Elizabeth Schmieder -19.459092 -25.092296 Frau Elizabeth Schmieder -19.425000 -39.261198 Frau Elizabeth Schmieder -46.817692 -36.168495 162 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Anaklet Heitmann -40.981092 -43.268893 Herr Anaklet Heitmann -45.098792 -24.101093 Herr Anaklet Heitmann -19.459092 -25.092296 Herr Anaklet Heitmann -19.425000 -39.261198 Herr Anaklet Heitmann -46.817692 -36.168495 Herr Anaklet Heitmann 134.120000 23.450000 Herr Anaklet Heitmann 134.120000 23.450000 Frau Luitgard Krumm -19.425000 -39.261198 Frau Luitgard Krumm -46.817692 -36.168495 Frau Luitgard Krumm 134.120000 23.450000 Frau Luitgard Krumm 134.120000 23.450000 Frau Luitgard Krumm -40.981092 -43.268893 Frau Luitgard Krumm -45.098792 -24.101093 Frau Luitgard Krumm -19.459092 -25.092296 Herr Wilmer Herbst 134.120000 23.450000 Herr Wilmer Herbst 134.120000 23.450000 Herr Wilmer Herbst -40.981092 -43.268893 Herr Wilmer Herbst -45.098792 -24.101093 Herr Wilmer Herbst -19.459092 -25.092296 Herr Wilmer Herbst -19.425000 -39.261198 Herr Wilmer Herbst -46.817692 -36.168495 . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Student st JOIN Ort ot ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge Herr Gianni Briland -19.425000 -39.261198 Herr Gianni Briland -46.817692 -36.168495 Herr Gianni Briland 134.120000 23.450000 Herr Gianni Briland 134.120000 23.450000 Herr Gianni Briland -40.981092 -43.268893 Herr Gianni Briland -45.098792 -24.101093 Herr Gianni Briland -19.459092 -25.092296 Herr Egfried Ellis 134.120000 23.450000 Herr Egfried Ellis 134.120000 23.450000 Herr Egfried Ellis -40.981092 -43.268893 Herr Egfried Ellis -45.098792 -24.101093 Herr Egfried Ellis -19.459092 -25.092296 163 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Egfried Ellis -19.425000 -39.261198 Herr Egfried Ellis -46.817692 -36.168495 Herr Boy Witt 134.120000 23.450000 Herr Boy Witt 134.120000 23.450000 Herr Boy Witt -40.981092 -43.268893 Herr Boy Witt -45.098792 -24.101093 Herr Boy Witt -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Boy Witt -46.817692 -36.168495 Herr Aster Frantzen -45.098792 -24.101093 Herr Aster Frantzen -19.459092 -25.092296 Herr Aster Frantzen -19.425000 -39.261198 Herr Aster Frantzen -46.817692 -36.168495 Herr Aster Frantzen 134.120000 23.450000 Herr Aster Frantzen 134.120000 23.450000 Herr Aster Frantzen -40.981092 -43.268893 Frau Mariechen Chaney -19.425000 -39.261198 Frau Mariechen Chaney -46.817692 -36.168495 Frau Mariechen Chaney 134.120000 23.450000 Frau Mariechen Chaney 134.120000 23.450000 Frau Mariechen Chaney -40.981092 -43.268893 Frau Mariechen Chaney -45.098792 -24.101093 Frau Mariechen Chaney -19.459092 -25.092296 Herr Ebernand Bento 134.120000 23.450000 Herr Ebernand Bento 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Ebernand Bento -45.098792 -24.101093 Herr Ebernand Bento -19.459092 -25.092296 Herr Ebernand Bento -19.425000 -39.261198 Herr Ebernand Bento -46.817692 -36.168495 Herr Mathis Looschelders 134.120000 23.450000 Herr Mathis Looschelders 134.120000 23.450000 Herr Mathis Looschelders -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Herr Mathis Looschelders -19.459092 -25.092296 Herr Mathis Looschelders -19.425000 -39.261198 Herr Mathis Looschelders -46.817692 -36.168495 Frau Margarete Buch -40.981092 -43.268893 Frau Margarete Buch -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Frau Margarete Buch -19.425000 -39.261198 Frau Margarete Buch -46.817692 -36.168495 Frau Margarete Buch 134.120000 23.450000 164 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Frau Margarete Buch 134.120000 23.450000 Herr Aarne Stracke -19.459092 -25.092296 Herr Aarne Stracke -19.425000 -39.261198 Herr Aarne Stracke -46.817692 -36.168495 Herr Aarne Stracke 134.120000 23.450000 Herr Aarne Stracke 134.120000 23.450000 Herr Aarne Stracke -40.981092 -43.268893 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Frau Kurumi Elstner 134.120000 23.450000 Frau Kurumi Elstner 134.120000 23.450000 Frau Kurumi Elstner -40.981092 -43.268893 Frau Kurumi Elstner -45.098792 -24.101093 Frau Kurumi Elstner -19.459092 -25.092296 Frau Kurumi Elstner -19.425000 -39.261198 Herr Ymer Fabienne 134.120000 23.450000 Herr Ymer Fabienne 134.120000 23.450000 Herr Ymer Fabienne -40.981092 -43.268893 Herr Ymer Fabienne -45.098792 -24.101093 Herr Ymer Fabienne -19.459092 -25.092296 Herr Ymer Fabienne -19.425000 -39.261198 Herr Ymer Fabienne -46.817692 -36.168495 Frau Krystiana Baumgarten 134.120000 23.450000 Frau Krystiana Baumgarten -40.981092 -43.268893 Frau Krystiana Baumgarten -45.098792 -24.101093 Frau Krystiana Baumgarten -19.459092 -25.092296 Frau Krystiana Baumgarten -19.425000 -39.261198 Frau Krystiana Baumgarten -46.817692 -36.168495 Frau Krystiana Baumgarten 134.120000 23.450000 Herr Vitali Rosenbaum -19.459092 -25.092296 Herr Vitali Rosenbaum -19.425000 -39.261198 Herr Vitali Rosenbaum -46.817692 -36.168495 Herr Vitali Rosenbaum 134.120000 23.450000 Herr Vitali Rosenbaum 134.120000 23.450000 Herr Vitali Rosenbaum -40.981092 -43.268893 Herr Vitali Rosenbaum -45.098792 -24.101093 Herr Otthein Pahl -46.817692 -36.168495 Herr Otthein Pahl 134.120000 23.450000 Herr Otthein Pahl 134.120000 23.450000 Herr Otthein Pahl -40.981092 -43.268893 Herr Otthein Pahl -45.098792 -24.101093 Herr Otthein Pahl -19.459092 -25.092296 Herr Otthein Pahl -19.425000 -39.261198 165 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Frau Trudhildis Winkel 134.120000 23.450000 Frau Trudhildis Winkel 134.120000 23.450000 Frau Trudhildis Winkel -40.981092 -43.268893 Frau Trudhildis Winkel -45.098792 -24.101093 Frau Trudhildis Winkel -19.459092 -25.092296 Frau Trudhildis Winkel -19.425000 -39.261198 Frau Trudhildis Winkel -46.817692 -36.168495 Herr Goswin Haug 134.120000 23.450000 Herr Goswin Haug -40.981092 -43.268893 Herr Goswin Haug -45.098792 -24.101093 Herr Goswin Haug -19.459092 -25.092296 Herr Goswin Haug -19.425000 -39.261198 Herr Goswin Haug -46.817692 -36.168495 Herr Goswin Haug 134.120000 23.450000 Herr Knut Moeller -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Herr Knut Moeller -19.425000 -39.261198 Herr Knut Moeller -46.817692 -36.168495 Herr Knut Moeller 134.120000 23.450000 Herr Knut Moeller 134.120000 23.450000 Herr Knut Moeller -40.981092 -43.268893 Frau Quirine Hocke -19.425000 -39.261198 Frau Quirine Hocke -46.817692 -36.168495 Frau Quirine Hocke 134.120000 23.450000 Frau Quirine Hocke 134.120000 23.450000 Frau Quirine Hocke -40.981092 -43.268893 Frau Quirine Hocke -45.098792 -24.101093 Frau Quirine Hocke -19.459092 -25.092296 Herr Neidhardt Thomasius 134.120000 23.450000 Herr Neidhardt Thomasius 134.120000 23.450000 Herr Neidhardt Thomasius -40.981092 -43.268893 Herr Neidhardt Thomasius -45.098792 -24.101093 Herr Neidhardt Thomasius -19.459092 -25.092296 Herr Neidhardt Thomasius -19.425000 -39.261198 Herr Neidhardt Thomasius -46.817692 -36.168495 Frau Elizabeth Schmieder 134.120000 23.450000 Frau Elizabeth Schmieder 134.120000 23.450000 Frau Elizabeth Schmieder -40.981092 -43.268893 Frau Elizabeth Schmieder -45.098792 -24.101093 Frau Elizabeth Schmieder -19.459092 -25.092296 Frau Elizabeth Schmieder -19.425000 -39.261198 Frau Elizabeth Schmieder -46.817692 -36.168495 Herr Anaklet Heitmann -40.981092 -43.268893 166 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Anaklet Heitmann -45.098792 -24.101093 Herr Anaklet Heitmann -19.459092 -25.092296 Herr Anaklet Heitmann -19.425000 -39.261198 Herr Anaklet Heitmann -46.817692 -36.168495 Herr Anaklet Heitmann 134.120000 23.450000 Herr Anaklet Heitmann 134.120000 23.450000 Frau Luitgard Krumm -19.425000 -39.261198 Frau Luitgard Krumm -46.817692 -36.168495 Frau Luitgard Krumm 134.120000 23.450000 Frau Luitgard Krumm 134.120000 23.450000 Frau Luitgard Krumm -40.981092 -43.268893 Frau Luitgard Krumm -45.098792 -24.101093 Frau Luitgard Krumm -19.459092 -25.092296 Herr Wilmer Herbst 134.120000 23.450000 Herr Wilmer Herbst 134.120000 23.450000 Herr Wilmer Herbst -40.981092 -43.268893 Herr Wilmer Herbst -45.098792 -24.101093 Herr Wilmer Herbst -19.459092 -25.092296 Herr Wilmer Herbst -19.425000 -39.261198 Herr Wilmer Herbst -46.817692 -36.168495 . 51.3 GROUP BY in JOIN . 51.4 HAVING in JOIN , 167 Kapitel 52 NATURAL JOIN 52.1 Einführung in MySQL liefert NATURAL JOIN eine Liste aller möglichen Kombinationen aus den zugrundeliegenden Tabellen L R a b c SELECT * FROM L NATURAL JOIN R c d . 11 21 12 a b c c d 10 51 12 22 13 11 21 12 12 52 12 52 13 23 14 52.2 Anwendung . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Student st NATURAL JOIN Ort ot ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge Herr Gianni Briland -46.817692 -36.168495 Herr Egfried Ellis -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Aster Frantzen -19.459092 -25.092296 Frau Mariechen Chaney 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Herr Ymer Fabienne -46.817692 -36.168495 Frau Krystiana Baumgarten -19.459092 -25.092296 Herr Vitali Rosenbaum -46.817692 -36.168495 168 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Otthein Pahl -46.817692 -36.168495 Frau Trudhildis Winkel -19.425000 -39.261198 Herr Goswin Haug -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Frau Quirine Hocke -40.981092 -43.268893 Herr Neidhardt Thomasius -19.459092 -25.092296 Frau Elizabeth Schmieder -46.817692 -36.168495 Herr Anaklet Heitmann -19.459092 -25.092296 Frau Luitgard Krumm -19.425000 -39.261198 Herr Wilmer Herbst -19.459092 -25.092296 . 52.3 GROUP BY in JOIN . 52.4 HAVING in JOIN . 169 Kapitel 53 INNER JOIN 53.1 Einführung In MySQL ist CROSS JOIN syntaktisch ein Äquivalent zu INNER JOIN (diese lassen sich gegeneinander austauschen). Nach SQL–Standard hingegen sind beide nicht äquivalent. INNER JOIN wird bei einer ON–Klausel und CROSS JOIN andernfalls verwendet. R L a b c 11 21 12 c d 10 51 12 52 SELECT * FROM L INNER JOIN R ON L.c=R.c . a b c c d 11 21 12 12 52 53.2 Anwendung . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Student st INNER JOIN Ort ot USING(pLZ) ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge Herr Gianni Briland -46.817692 -36.168495 Herr Egfried Ellis -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Aster Frantzen -19.459092 -25.092296 Frau Mariechen Chaney 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Herr Ymer Fabienne -46.817692 -36.168495 170 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Frau Krystiana Baumgarten -19.459092 -25.092296 Herr Vitali Rosenbaum -46.817692 -36.168495 Herr Otthein Pahl -46.817692 -36.168495 Frau Trudhildis Winkel -19.425000 -39.261198 Herr Goswin Haug -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Frau Quirine Hocke -40.981092 -43.268893 Herr Neidhardt Thomasius -19.459092 -25.092296 Frau Elizabeth Schmieder -46.817692 -36.168495 Herr Anaklet Heitmann -19.459092 -25.092296 Frau Luitgard Krumm -19.425000 -39.261198 Herr Wilmer Herbst -19.459092 -25.092296 . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Ort ot INNER JOIN Student st ON st.pLZ=ot.pLZ ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge Herr Gianni Briland -46.817692 -36.168495 Herr Egfried Ellis -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Aster Frantzen -19.459092 -25.092296 Frau Mariechen Chaney 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Herr Ymer Fabienne -46.817692 -36.168495 Frau Krystiana Baumgarten -19.459092 -25.092296 Herr Vitali Rosenbaum -46.817692 -36.168495 Herr Otthein Pahl -46.817692 -36.168495 Frau Trudhildis Winkel -19.425000 -39.261198 Herr Goswin Haug -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Frau Quirine Hocke -40.981092 -43.268893 Herr Neidhardt Thomasius -19.459092 -25.092296 Frau Elizabeth Schmieder -46.817692 -36.168495 Herr Anaklet Heitmann -19.459092 -25.092296 171 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 172 Frau Luitgard Krumm -19.425000 -39.261198 Herr Wilmer Herbst -19.459092 -25.092296 . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ve.bezeichnung, ve.semester, be.wPF FROM Student st INNER JOIN Besucht be ON st.studentID=be.student LEFT OUTER JOIN Veranstaltung ve ON ve.veranstaltungID=be.veranstaltung ORDER BY st.studentID, ve.veranstaltungID; erhält man. anrede vorname nachname bezeichnung semester wPF Herr Gianni Briland evolutionary biology WS2013 Gast Herr Gianni Briland XML-Daten SS2014 Gast Herr Gianni Briland Software Architektur SS2014 Gast Herr Gianni Briland Grundlagen der Geologie und der Gesteinskunde WS2013 Pflichtfach Herr Egfried Ellis evolutionary biology WS2013 Gast Herr Egfried Ellis Smart Graphics WS2012 Gast Herr Egfried Ellis Meteorologie WS2012 Pflichtfach Herr Egfried Ellis Programmierung SS2013 Wahlfach Herr Egfried Ellis Hebrew language WS2013 Pflichtfach Herr Egfried Ellis Grundlagen der Geologie und der Gesteinskunde WS2013 NULL Herr Boy Witt Software Architektur SS2014 Pflichtfach Herr Boy Witt Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Boy Witt Grundlagenwissen Sprache II SS2014 Pflichtfach Herr Aster Frantzen Informationssicherheit SS2014 Pflichtfach Herr Aster Frantzen XML-Daten SS2014 Wahlfach Herr Aster Frantzen Computational Vision WS2014 Gast Herr Aster Frantzen majeures du XVIIe au XIXe SS2014 Pflichtfach Herr Ebernand Bento Grundlagen der Astronomie SS2013 Wahlfach Herr Ebernand Bento scientific communication SS2013 Gast Herr Ebernand Bento Software Architektur SS2014 Wahlfach Herr Ebernand Bento fonction didactique et morale SS2012 Pflichtfach Herr Ebernand Bento Realisierung digitaler Medien WS2014 Wahlfach Herr Ebernand Bento Urdu WS2013 Pflichtfach Herr Mathis Looschelders Informationssicherheit SS2014 NULL Herr Mathis Looschelders Meteorologie WS2012 Pflichtfach Herr Mathis Looschelders Computational Vision WS2014 Pflichtfach Herr Mathis Looschelders Software Architektur SS2014 Pflichtfach Frau Margarete Buch law and ethics WS2014 Pflichtfach Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 173 Frau Margarete Buch XML-Daten SS2014 Pflichtfach Frau Margarete Buch Hebrew language WS2013 Pflichtfach Frau Margarete Buch Software Architektur SS2014 Gast Frau Margarete Buch Grundlagen der Geologie und der Gesteinskunde WS2013 Gast Herr Aarne Stracke Realisierung digitaler Medien WS2014 Wahlfach Herr Aarne Stracke Grundlagenwissen Sprache II SS2014 Wahlfach Herr Aarne Stracke Griechische Sprache SS2014 Wahlfach Frau Kurumi Elstner Grundlagen der Astronomie SS2013 NULL Frau Kurumi Elstner scientific communication SS2013 NULL Frau Kurumi Elstner Computational Vision WS2014 Gast Frau Kurumi Elstner Hebrew language WS2013 Pflichtfach Frau Kurumi Elstner Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Frau Kurumi Elstner Arabische Sprache SS2013 Wahlfach Herr Ymer Fabienne Informationssicherheit SS2014 Wahlfach Herr Ymer Fabienne Realisierung digitaler Medien WS2014 Pflichtfach Herr Vitali Rosenbaum Smart Graphics WS2012 Wahlfach Herr Vitali Rosenbaum scientific communication SS2013 Pflichtfach Herr Vitali Rosenbaum law and ethics WS2014 Wahlfach Herr Vitali Rosenbaum majeures du XVIIe au XIXe SS2014 NULL Herr Vitali Rosenbaum chinesische Sprachen WS2013 Wahlfach Herr Otthein Pahl Realisierung digitaler Medien WS2014 Gast Herr Otthein Pahl Grundlagenwissen Sprache II SS2014 NULL Frau Trudhildis Winkel evolutionary biology WS2013 Wahlfach Frau Trudhildis Winkel law and ethics WS2014 Pflichtfach Frau Trudhildis Winkel Hebrew language WS2013 Wahlfach Frau Trudhildis Winkel Hindi WS2013 Pflichtfach Herr Goswin Haug Grundlagen der Astronomie SS2013 Pflichtfach Herr Goswin Haug Programmierung SS2013 NULL Herr Goswin Haug Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Knut Moeller visualization systems SS2014 NULL Herr Knut Moeller Computational Vision WS2014 Pflichtfach Herr Knut Moeller Arabische Sprache SS2013 Pflichtfach Frau Quirine Hocke Software Architektur SS2014 Pflichtfach Frau Quirine Hocke majeures du XVIIe au XIXe SS2014 Pflichtfach Frau Quirine Hocke Realisierung digitaler Medien WS2014 Wahlfach Frau Quirine Hocke Spanische Sprache SS2014 Gast Herr Neidhardt Thomasius evolutionary biology WS2013 Gast Herr Neidhardt Thomasius law and ethics WS2014 NULL Herr Neidhardt Thomasius Software Architektur SS2014 Pflichtfach Herr Neidhardt Thomasius Realisierung digitaler Medien WS2014 Pflichtfach Herr Neidhardt Thomasius Spanische Sprache SS2014 Gast Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 174 Frau Elizabeth Schmieder evolutionary biology WS2013 Wahlfach Frau Elizabeth Schmieder Programmierung SS2013 Gast Frau Elizabeth Schmieder Hebrew language WS2013 Gast Frau Elizabeth Schmieder Software Architektur SS2014 Wahlfach Frau Elizabeth Schmieder fonction didactique et morale SS2012 Pflichtfach Frau Elizabeth Schmieder Russische Sprache WS2013 Gast Herr Anaklet Heitmann Informationssicherheit SS2014 Gast Herr Anaklet Heitmann law and ethics WS2014 Gast Herr Anaklet Heitmann XML-Daten SS2014 Wahlfach Herr Anaklet Heitmann Software Architektur SS2014 Pflichtfach Herr Anaklet Heitmann Grundlagenwissen Sprache II SS2014 Wahlfach Frau Luitgard Krumm law and ethics WS2014 Wahlfach Herr Wilmer Herbst Hebrew language WS2013 Pflichtfach Herr Wilmer Herbst Grundlagenwissen Sprache II SS2014 NULL Herr Wilmer Herbst Griechische Sprache SS2014 Pflichtfach . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ve.bezeichnung, ve.semester, be.wPF FROM Veranstaltung ve INNER JOIN Besucht be ON ve.veranstaltungID=be.veranstaltung LEFT OUTER JOIN Student st ON st.studentID=be.student ORDER BY st.studentID, ve.veranstaltungID; erhält man. anrede vorname nachname bezeichnung semester wPF Herr Gianni Briland evolutionary biology WS2013 Gast Herr Gianni Briland XML-Daten SS2014 Gast Herr Gianni Briland Software Architektur SS2014 Gast Herr Gianni Briland Grundlagen der Geologie und der Gesteinskunde WS2013 Pflichtfach Herr Egfried Ellis evolutionary biology WS2013 Gast Herr Egfried Ellis Smart Graphics WS2012 Gast Herr Egfried Ellis Meteorologie WS2012 Pflichtfach Herr Egfried Ellis Programmierung SS2013 Wahlfach Herr Egfried Ellis Hebrew language WS2013 Pflichtfach Herr Egfried Ellis Grundlagen der Geologie und der Gesteinskunde WS2013 NULL Herr Boy Witt Software Architektur SS2014 Pflichtfach Herr Boy Witt Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Boy Witt Grundlagenwissen Sprache II SS2014 Pflichtfach Herr Aster Frantzen Informationssicherheit SS2014 Pflichtfach Herr Aster Frantzen XML-Daten SS2014 Wahlfach Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 175 Herr Aster Frantzen Computational Vision WS2014 Gast Herr Aster Frantzen majeures du XVIIe au XIXe SS2014 Pflichtfach Herr Ebernand Bento Grundlagen der Astronomie SS2013 Wahlfach Herr Ebernand Bento scientific communication SS2013 Gast Herr Ebernand Bento Software Architektur SS2014 Wahlfach Herr Ebernand Bento fonction didactique et morale SS2012 Pflichtfach Herr Ebernand Bento Realisierung digitaler Medien WS2014 Wahlfach Herr Ebernand Bento Urdu WS2013 Pflichtfach Herr Mathis Looschelders Informationssicherheit SS2014 NULL Herr Mathis Looschelders Meteorologie WS2012 Pflichtfach Herr Mathis Looschelders Computational Vision WS2014 Pflichtfach Herr Mathis Looschelders Software Architektur SS2014 Pflichtfach Frau Margarete Buch law and ethics WS2014 Pflichtfach Frau Margarete Buch XML-Daten SS2014 Pflichtfach Frau Margarete Buch Hebrew language WS2013 Pflichtfach Frau Margarete Buch Software Architektur SS2014 Gast Frau Margarete Buch Grundlagen der Geologie und der Gesteinskunde WS2013 Gast Herr Aarne Stracke Realisierung digitaler Medien WS2014 Wahlfach Herr Aarne Stracke Grundlagenwissen Sprache II SS2014 Wahlfach Herr Aarne Stracke Griechische Sprache SS2014 Wahlfach Frau Kurumi Elstner Grundlagen der Astronomie SS2013 NULL Frau Kurumi Elstner scientific communication SS2013 NULL Frau Kurumi Elstner Computational Vision WS2014 Gast Frau Kurumi Elstner Hebrew language WS2013 Pflichtfach Frau Kurumi Elstner Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Frau Kurumi Elstner Arabische Sprache SS2013 Wahlfach Herr Ymer Fabienne Informationssicherheit SS2014 Wahlfach Herr Ymer Fabienne Realisierung digitaler Medien WS2014 Pflichtfach Herr Vitali Rosenbaum Smart Graphics WS2012 Wahlfach Herr Vitali Rosenbaum scientific communication SS2013 Pflichtfach Herr Vitali Rosenbaum law and ethics WS2014 Wahlfach Herr Vitali Rosenbaum majeures du XVIIe au XIXe SS2014 NULL Herr Vitali Rosenbaum chinesische Sprachen WS2013 Wahlfach Herr Otthein Pahl Realisierung digitaler Medien WS2014 Gast Herr Otthein Pahl Grundlagenwissen Sprache II SS2014 NULL Frau Trudhildis Winkel evolutionary biology WS2013 Wahlfach Frau Trudhildis Winkel law and ethics WS2014 Pflichtfach Frau Trudhildis Winkel Hebrew language WS2013 Wahlfach Frau Trudhildis Winkel Hindi WS2013 Pflichtfach Herr Goswin Haug Grundlagen der Astronomie SS2013 Pflichtfach Herr Goswin Haug Programmierung SS2013 NULL Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Goswin Haug Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Knut Moeller visualization systems SS2014 NULL Herr Knut Moeller Computational Vision WS2014 Pflichtfach Herr Knut Moeller Arabische Sprache SS2013 Pflichtfach Frau Quirine Hocke Software Architektur SS2014 Pflichtfach Frau Quirine Hocke majeures du XVIIe au XIXe SS2014 Pflichtfach Frau Quirine Hocke Realisierung digitaler Medien WS2014 Wahlfach Frau Quirine Hocke Spanische Sprache SS2014 Gast Herr Neidhardt Thomasius evolutionary biology WS2013 Gast Herr Neidhardt Thomasius law and ethics WS2014 NULL Herr Neidhardt Thomasius Software Architektur SS2014 Pflichtfach Herr Neidhardt Thomasius Realisierung digitaler Medien WS2014 Pflichtfach Herr Neidhardt Thomasius Spanische Sprache SS2014 Gast Frau Elizabeth Schmieder evolutionary biology WS2013 Wahlfach Frau Elizabeth Schmieder Programmierung SS2013 Gast Frau Elizabeth Schmieder Hebrew language WS2013 Gast Frau Elizabeth Schmieder Software Architektur SS2014 Wahlfach Frau Elizabeth Schmieder fonction didactique et morale SS2012 Pflichtfach Frau Elizabeth Schmieder Russische Sprache WS2013 Gast Herr Anaklet Heitmann Informationssicherheit SS2014 Gast Herr Anaklet Heitmann law and ethics WS2014 Gast Herr Anaklet Heitmann XML-Daten SS2014 Wahlfach Herr Anaklet Heitmann Software Architektur SS2014 Pflichtfach Herr Anaklet Heitmann Grundlagenwissen Sprache II SS2014 Wahlfach Frau Luitgard Krumm law and ethics WS2014 Wahlfach Herr Wilmer Herbst Hebrew language WS2013 Pflichtfach Herr Wilmer Herbst Grundlagenwissen Sprache II SS2014 NULL Herr Wilmer Herbst Griechische Sprache SS2014 Pflichtfach . 53.3 GROUP BY in JOIN . 53.4 HAVING in JOIN , 176 Kapitel 54 LEFT OUTER JOIN 54.1 Einführung SELECT * FROM L LEFT OUTER JOIN R ON L.c=R.c R L a b c 11 21 12 c d 10 51 12 52 a b c c d 11 21 12 12 52 12 22 13 NULL NULL 13 23 14 NULL NULL . 54.2 Anwendung . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Student st LEFT OUTER JOIN Ort ot USING(pLZ) ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge Herr Gianni Briland -46.817692 -36.168495 Herr Egfried Ellis -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Aster Frantzen -19.459092 -25.092296 Frau Mariechen Chaney 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Herr Ymer Fabienne -46.817692 -36.168495 Frau Krystiana Baumgarten -19.459092 -25.092296 Herr Vitali Rosenbaum -46.817692 -36.168495 177 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Otthein Pahl -46.817692 -36.168495 Frau Trudhildis Winkel -19.425000 -39.261198 Herr Goswin Haug -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Frau Quirine Hocke -40.981092 -43.268893 Herr Neidhardt Thomasius -19.459092 -25.092296 Frau Elizabeth Schmieder -46.817692 -36.168495 Herr Anaklet Heitmann -19.459092 -25.092296 Frau Luitgard Krumm -19.425000 -39.261198 Herr Wilmer Herbst -19.459092 -25.092296 . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Ort ot LEFT OUTER JOIN Student st ON st.pLZ=ot.pLZ ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge NULL NULL NULL 134.120000 23.450000 Herr Gianni Briland -46.817692 -36.168495 Herr Egfried Ellis -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Aster Frantzen -19.459092 -25.092296 Frau Mariechen Chaney 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Herr Ymer Fabienne -46.817692 -36.168495 Frau Krystiana Baumgarten -19.459092 -25.092296 Herr Vitali Rosenbaum -46.817692 -36.168495 Herr Otthein Pahl -46.817692 -36.168495 Frau Trudhildis Winkel -19.425000 -39.261198 Herr Goswin Haug -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Frau Quirine Hocke -40.981092 -43.268893 Herr Neidhardt Thomasius -19.459092 -25.092296 Frau Elizabeth Schmieder -46.817692 -36.168495 Herr Anaklet Heitmann -19.459092 -25.092296 Frau Luitgard Krumm -19.425000 -39.261198 178 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Wilmer Herbst -19.459092 179 -25.092296 . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ve.bezeichnung, ve.semester, be.wPF FROM Student st LEFT OUTER JOIN Besucht be ON st.studentID=be.student LEFT OUTER JOIN Veranstaltung ve ON ve.veranstaltungID=be.veranstaltung ORDER BY st.studentID, ve.veranstaltungID; erhält man. anrede vorname nachname bezeichnung semester wPF Herr Gianni Briland evolutionary biology WS2013 Gast Herr Gianni Briland XML-Daten SS2014 Gast Herr Gianni Briland Software Architektur SS2014 Gast Herr Gianni Briland Grundlagen der Geologie und der Gesteinskunde WS2013 Pflichtfach Herr Egfried Ellis evolutionary biology WS2013 Gast Herr Egfried Ellis Smart Graphics WS2012 Gast Herr Egfried Ellis Meteorologie WS2012 Pflichtfach Herr Egfried Ellis Programmierung SS2013 Wahlfach Herr Egfried Ellis Hebrew language WS2013 Pflichtfach Herr Egfried Ellis Grundlagen der Geologie und der Gesteinskunde WS2013 NULL Herr Boy Witt Software Architektur SS2014 Pflichtfach Herr Boy Witt Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Boy Witt Grundlagenwissen Sprache II SS2014 Pflichtfach Herr Aster Frantzen Informationssicherheit SS2014 Pflichtfach Herr Aster Frantzen XML-Daten SS2014 Wahlfach Herr Aster Frantzen Computational Vision WS2014 Gast Herr Aster Frantzen majeures du XVIIe au XIXe SS2014 Pflichtfach Frau Mariechen Chaney NULL NULL NULL Herr Ebernand Bento Grundlagen der Astronomie SS2013 Wahlfach Herr Ebernand Bento scientific communication SS2013 Gast Herr Ebernand Bento Software Architektur SS2014 Wahlfach Herr Ebernand Bento fonction didactique et morale SS2012 Pflichtfach Herr Ebernand Bento Realisierung digitaler Medien WS2014 Wahlfach Herr Ebernand Bento Urdu WS2013 Pflichtfach Herr Mathis Looschelders Informationssicherheit SS2014 NULL Herr Mathis Looschelders Meteorologie WS2012 Pflichtfach Herr Mathis Looschelders Computational Vision WS2014 Pflichtfach Herr Mathis Looschelders Software Architektur SS2014 Pflichtfach Frau Margarete Buch law and ethics WS2014 Pflichtfach Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 180 Frau Margarete Buch XML-Daten SS2014 Pflichtfach Frau Margarete Buch Hebrew language WS2013 Pflichtfach Frau Margarete Buch Software Architektur SS2014 Gast Frau Margarete Buch Grundlagen der Geologie und der Gesteinskunde WS2013 Gast Herr Aarne Stracke Realisierung digitaler Medien WS2014 Wahlfach Herr Aarne Stracke Grundlagenwissen Sprache II SS2014 Wahlfach Herr Aarne Stracke Griechische Sprache SS2014 Wahlfach Frau Kurumi Elstner Grundlagen der Astronomie SS2013 NULL Frau Kurumi Elstner scientific communication SS2013 NULL Frau Kurumi Elstner Computational Vision WS2014 Gast Frau Kurumi Elstner Hebrew language WS2013 Pflichtfach Frau Kurumi Elstner Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Frau Kurumi Elstner Arabische Sprache SS2013 Wahlfach Herr Ymer Fabienne Informationssicherheit SS2014 Wahlfach Herr Ymer Fabienne Realisierung digitaler Medien WS2014 Pflichtfach Frau Krystiana Baumgarten NULL NULL NULL Herr Vitali Rosenbaum Smart Graphics WS2012 Wahlfach Herr Vitali Rosenbaum scientific communication SS2013 Pflichtfach Herr Vitali Rosenbaum law and ethics WS2014 Wahlfach Herr Vitali Rosenbaum majeures du XVIIe au XIXe SS2014 NULL Herr Vitali Rosenbaum chinesische Sprachen WS2013 Wahlfach Herr Otthein Pahl Realisierung digitaler Medien WS2014 Gast Herr Otthein Pahl Grundlagenwissen Sprache II SS2014 NULL Frau Trudhildis Winkel evolutionary biology WS2013 Wahlfach Frau Trudhildis Winkel law and ethics WS2014 Pflichtfach Frau Trudhildis Winkel Hebrew language WS2013 Wahlfach Frau Trudhildis Winkel Hindi WS2013 Pflichtfach Herr Goswin Haug Grundlagen der Astronomie SS2013 Pflichtfach Herr Goswin Haug Programmierung SS2013 NULL Herr Goswin Haug Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Knut Moeller visualization systems SS2014 NULL Herr Knut Moeller Computational Vision WS2014 Pflichtfach Herr Knut Moeller Arabische Sprache SS2013 Pflichtfach Frau Quirine Hocke Software Architektur SS2014 Pflichtfach Frau Quirine Hocke majeures du XVIIe au XIXe SS2014 Pflichtfach Frau Quirine Hocke Realisierung digitaler Medien WS2014 Wahlfach Frau Quirine Hocke Spanische Sprache SS2014 Gast Herr Neidhardt Thomasius evolutionary biology WS2013 Gast Herr Neidhardt Thomasius law and ethics WS2014 NULL Herr Neidhardt Thomasius Software Architektur SS2014 Pflichtfach Herr Neidhardt Thomasius Realisierung digitaler Medien WS2014 Pflichtfach Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 181 Herr Neidhardt Thomasius Spanische Sprache SS2014 Gast Frau Elizabeth Schmieder evolutionary biology WS2013 Wahlfach Frau Elizabeth Schmieder Programmierung SS2013 Gast Frau Elizabeth Schmieder Hebrew language WS2013 Gast Frau Elizabeth Schmieder Software Architektur SS2014 Wahlfach Frau Elizabeth Schmieder fonction didactique et morale SS2012 Pflichtfach Frau Elizabeth Schmieder Russische Sprache WS2013 Gast Herr Anaklet Heitmann Informationssicherheit SS2014 Gast Herr Anaklet Heitmann law and ethics WS2014 Gast Herr Anaklet Heitmann XML-Daten SS2014 Wahlfach Herr Anaklet Heitmann Software Architektur SS2014 Pflichtfach Herr Anaklet Heitmann Grundlagenwissen Sprache II SS2014 Wahlfach Frau Luitgard Krumm law and ethics WS2014 Wahlfach Herr Wilmer Herbst Hebrew language WS2013 Pflichtfach Herr Wilmer Herbst Grundlagenwissen Sprache II SS2014 NULL Herr Wilmer Herbst Griechische Sprache SS2014 Pflichtfach . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ve.bezeichnung, ve.semester, be.wPF FROM Veranstaltung ve LEFT OUTER JOIN Besucht be ON ve.veranstaltungID=be.veranstaltung LEFT OUTER JOIN Student st ON st.studentID=be.student ORDER BY st.studentID, ve.veranstaltungID; erhält man. anrede vorname nachname bezeichnung semester wPF NULL NULL NULL Datennetze SS2013 NULL NULL NULL NULL Armut und Entwicklung SS2012 NULL NULL NULL NULL Russische Sprache SS2012 NULL NULL NULL NULL French language SS2012 NULL NULL NULL NULL verteilte Systeme SS2013 NULL Herr Gianni Briland evolutionary biology WS2013 Gast Herr Gianni Briland XML-Daten SS2014 Gast Herr Gianni Briland Software Architektur SS2014 Gast Herr Gianni Briland Grundlagen der Geologie und der Gesteinskunde WS2013 Pflichtfach Herr Egfried Ellis evolutionary biology WS2013 Gast Herr Egfried Ellis Smart Graphics WS2012 Gast Herr Egfried Ellis Meteorologie WS2012 Pflichtfach Herr Egfried Ellis Programmierung SS2013 Wahlfach Herr Egfried Ellis Hebrew language WS2013 Pflichtfach Herr Egfried Ellis Grundlagen der Geologie und der Gesteinskunde WS2013 NULL Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 182 Herr Boy Witt Software Architektur SS2014 Pflichtfach Herr Boy Witt Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Boy Witt Grundlagenwissen Sprache II SS2014 Pflichtfach Herr Aster Frantzen Informationssicherheit SS2014 Pflichtfach Herr Aster Frantzen XML-Daten SS2014 Wahlfach Herr Aster Frantzen Computational Vision WS2014 Gast Herr Aster Frantzen majeures du XVIIe au XIXe SS2014 Pflichtfach Herr Ebernand Bento Grundlagen der Astronomie SS2013 Wahlfach Herr Ebernand Bento scientific communication SS2013 Gast Herr Ebernand Bento Software Architektur SS2014 Wahlfach Herr Ebernand Bento fonction didactique et morale SS2012 Pflichtfach Herr Ebernand Bento Realisierung digitaler Medien WS2014 Wahlfach Herr Ebernand Bento Urdu WS2013 Pflichtfach Herr Mathis Looschelders Informationssicherheit SS2014 NULL Herr Mathis Looschelders Meteorologie WS2012 Pflichtfach Herr Mathis Looschelders Computational Vision WS2014 Pflichtfach Herr Mathis Looschelders Software Architektur SS2014 Pflichtfach Frau Margarete Buch law and ethics WS2014 Pflichtfach Frau Margarete Buch XML-Daten SS2014 Pflichtfach Frau Margarete Buch Hebrew language WS2013 Pflichtfach Frau Margarete Buch Software Architektur SS2014 Gast Frau Margarete Buch Grundlagen der Geologie und der Gesteinskunde WS2013 Gast Herr Aarne Stracke Realisierung digitaler Medien WS2014 Wahlfach Herr Aarne Stracke Grundlagenwissen Sprache II SS2014 Wahlfach Herr Aarne Stracke Griechische Sprache SS2014 Wahlfach Frau Kurumi Elstner Grundlagen der Astronomie SS2013 NULL Frau Kurumi Elstner scientific communication SS2013 NULL Frau Kurumi Elstner Computational Vision WS2014 Gast Frau Kurumi Elstner Hebrew language WS2013 Pflichtfach Frau Kurumi Elstner Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Frau Kurumi Elstner Arabische Sprache SS2013 Wahlfach Herr Ymer Fabienne Informationssicherheit SS2014 Wahlfach Herr Ymer Fabienne Realisierung digitaler Medien WS2014 Pflichtfach Herr Vitali Rosenbaum Smart Graphics WS2012 Wahlfach Herr Vitali Rosenbaum scientific communication SS2013 Pflichtfach Herr Vitali Rosenbaum law and ethics WS2014 Wahlfach Herr Vitali Rosenbaum majeures du XVIIe au XIXe SS2014 NULL Herr Vitali Rosenbaum chinesische Sprachen WS2013 Wahlfach Herr Otthein Pahl Realisierung digitaler Medien WS2014 Gast Herr Otthein Pahl Grundlagenwissen Sprache II SS2014 NULL Frau Trudhildis Winkel evolutionary biology WS2013 Wahlfach Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Frau Trudhildis Winkel law and ethics WS2014 Pflichtfach Frau Trudhildis Winkel Hebrew language WS2013 Wahlfach Frau Trudhildis Winkel Hindi WS2013 Pflichtfach Herr Goswin Haug Grundlagen der Astronomie SS2013 Pflichtfach Herr Goswin Haug Programmierung SS2013 NULL Herr Goswin Haug Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Knut Moeller visualization systems SS2014 NULL Herr Knut Moeller Computational Vision WS2014 Pflichtfach Herr Knut Moeller Arabische Sprache SS2013 Pflichtfach Frau Quirine Hocke Software Architektur SS2014 Pflichtfach Frau Quirine Hocke majeures du XVIIe au XIXe SS2014 Pflichtfach Frau Quirine Hocke Realisierung digitaler Medien WS2014 Wahlfach Frau Quirine Hocke Spanische Sprache SS2014 Gast Herr Neidhardt Thomasius evolutionary biology WS2013 Gast Herr Neidhardt Thomasius law and ethics WS2014 NULL Herr Neidhardt Thomasius Software Architektur SS2014 Pflichtfach Herr Neidhardt Thomasius Realisierung digitaler Medien WS2014 Pflichtfach Herr Neidhardt Thomasius Spanische Sprache SS2014 Gast Frau Elizabeth Schmieder evolutionary biology WS2013 Wahlfach Frau Elizabeth Schmieder Programmierung SS2013 Gast Frau Elizabeth Schmieder Hebrew language WS2013 Gast Frau Elizabeth Schmieder Software Architektur SS2014 Wahlfach Frau Elizabeth Schmieder fonction didactique et morale SS2012 Pflichtfach Frau Elizabeth Schmieder Russische Sprache WS2013 Gast Herr Anaklet Heitmann Informationssicherheit SS2014 Gast Herr Anaklet Heitmann law and ethics WS2014 Gast Herr Anaklet Heitmann XML-Daten SS2014 Wahlfach Herr Anaklet Heitmann Software Architektur SS2014 Pflichtfach Herr Anaklet Heitmann Grundlagenwissen Sprache II SS2014 Wahlfach Frau Luitgard Krumm law and ethics WS2014 Wahlfach Herr Wilmer Herbst Hebrew language WS2013 Pflichtfach Herr Wilmer Herbst Grundlagenwissen Sprache II SS2014 NULL Herr Wilmer Herbst Griechische Sprache SS2014 Pflichtfach . 54.3 GROUP BY in JOIN . 183 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 54.4 HAVING in JOIN . 184 Kapitel 55 RIGHT OUTER JOIN 55.1 Einführung R L a b c 11 21 12 SELECT * FROM L RIGHT OUTER JOIN R ON L.c=R.c c d a b c c d 10 51 11 21 12 12 52 12 52 NULL NULL NULL 10 51 . 55.2 Anwendung . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Student st RIGHT OUTER JOIN Ort ot USING(pLZ) ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge NULL NULL NULL 134.120000 23.450000 Herr Gianni Briland -46.817692 -36.168495 Herr Egfried Ellis -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Aster Frantzen -19.459092 -25.092296 Frau Mariechen Chaney 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Herr Ymer Fabienne -46.817692 -36.168495 Frau Krystiana Baumgarten -19.459092 -25.092296 Herr Vitali Rosenbaum -46.817692 -36.168495 185 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Otthein Pahl -46.817692 -36.168495 Frau Trudhildis Winkel -19.425000 -39.261198 Herr Goswin Haug -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Frau Quirine Hocke -40.981092 -43.268893 Herr Neidhardt Thomasius -19.459092 -25.092296 Frau Elizabeth Schmieder -46.817692 -36.168495 Herr Anaklet Heitmann -19.459092 -25.092296 Frau Luitgard Krumm -19.425000 -39.261198 Herr Wilmer Herbst -19.459092 -25.092296 . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ot.geoBreite, ot.geoLaenge FROM Ort ot RIGHT OUTER JOIN Student st ON st.pLZ=ot.pLZ ORDER BY st.studentID; erhält man. anrede vorname nachname geoBreite geoLaenge Herr Gianni Briland -46.817692 -36.168495 Herr Egfried Ellis -19.459092 -25.092296 Herr Boy Witt -19.425000 -39.261198 Herr Aster Frantzen -19.459092 -25.092296 Frau Mariechen Chaney 134.120000 23.450000 Herr Ebernand Bento -40.981092 -43.268893 Herr Mathis Looschelders -45.098792 -24.101093 Frau Margarete Buch -19.459092 -25.092296 Herr Aarne Stracke -45.098792 -24.101093 Frau Kurumi Elstner -46.817692 -36.168495 Herr Ymer Fabienne -46.817692 -36.168495 Frau Krystiana Baumgarten -19.459092 -25.092296 Herr Vitali Rosenbaum -46.817692 -36.168495 Herr Otthein Pahl -46.817692 -36.168495 Frau Trudhildis Winkel -19.425000 -39.261198 Herr Goswin Haug -45.098792 -24.101093 Herr Knut Moeller -19.459092 -25.092296 Frau Quirine Hocke -40.981092 -43.268893 Herr Neidhardt Thomasius -19.459092 -25.092296 Frau Elizabeth Schmieder -46.817692 -36.168495 Herr Anaklet Heitmann -19.459092 -25.092296 Frau Luitgard Krumm -19.425000 -39.261198 Herr Wilmer Herbst -19.459092 -25.092296 186 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 187 . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ve.bezeichnung, ve.semester, be.wPF FROM Student st RIGHT OUTER JOIN Besucht be ON st.studentID=be.student RIGHT OUTER JOIN Veranstaltung ve ON ve.veranstaltungID=be.veranstaltung ORDER BY st.studentID, ve.veranstaltungID; erhält man. anrede vorname nachname bezeichnung semester wPF NULL NULL NULL Datennetze SS2013 NULL NULL NULL NULL Armut und Entwicklung SS2012 NULL NULL NULL NULL Russische Sprache SS2012 NULL NULL NULL NULL French language SS2012 NULL NULL NULL NULL verteilte Systeme SS2013 NULL Herr Gianni Briland evolutionary biology WS2013 Gast Herr Gianni Briland XML-Daten SS2014 Gast Herr Gianni Briland Software Architektur SS2014 Gast Herr Gianni Briland Grundlagen der Geologie und der Gesteinskunde WS2013 Pflichtfach Herr Egfried Ellis evolutionary biology WS2013 Gast Herr Egfried Ellis Smart Graphics WS2012 Gast Herr Egfried Ellis Meteorologie WS2012 Pflichtfach Herr Egfried Ellis Programmierung SS2013 Wahlfach Herr Egfried Ellis Hebrew language WS2013 Pflichtfach Herr Egfried Ellis Grundlagen der Geologie und der Gesteinskunde WS2013 NULL Herr Boy Witt Software Architektur SS2014 Pflichtfach Herr Boy Witt Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Boy Witt Grundlagenwissen Sprache II SS2014 Pflichtfach Herr Aster Frantzen Informationssicherheit SS2014 Pflichtfach Herr Aster Frantzen XML-Daten SS2014 Wahlfach Herr Aster Frantzen Computational Vision WS2014 Gast Herr Aster Frantzen majeures du XVIIe au XIXe SS2014 Pflichtfach Herr Ebernand Bento Grundlagen der Astronomie SS2013 Wahlfach Herr Ebernand Bento scientific communication SS2013 Gast Herr Ebernand Bento Software Architektur SS2014 Wahlfach Herr Ebernand Bento fonction didactique et morale SS2012 Pflichtfach Herr Ebernand Bento Realisierung digitaler Medien WS2014 Wahlfach Herr Ebernand Bento Urdu WS2013 Pflichtfach Herr Mathis Looschelders Informationssicherheit SS2014 NULL Herr Mathis Looschelders Meteorologie WS2012 Pflichtfach Herr Mathis Looschelders Computational Vision WS2014 Pflichtfach Herr Mathis Looschelders Software Architektur SS2014 Pflichtfach Frau Margarete Buch law and ethics WS2014 Pflichtfach Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 188 Frau Margarete Buch XML-Daten SS2014 Pflichtfach Frau Margarete Buch Hebrew language WS2013 Pflichtfach Frau Margarete Buch Software Architektur SS2014 Gast Frau Margarete Buch Grundlagen der Geologie und der Gesteinskunde WS2013 Gast Herr Aarne Stracke Realisierung digitaler Medien WS2014 Wahlfach Herr Aarne Stracke Grundlagenwissen Sprache II SS2014 Wahlfach Herr Aarne Stracke Griechische Sprache SS2014 Wahlfach Frau Kurumi Elstner Grundlagen der Astronomie SS2013 NULL Frau Kurumi Elstner scientific communication SS2013 NULL Frau Kurumi Elstner Computational Vision WS2014 Gast Frau Kurumi Elstner Hebrew language WS2013 Pflichtfach Frau Kurumi Elstner Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Frau Kurumi Elstner Arabische Sprache SS2013 Wahlfach Herr Ymer Fabienne Informationssicherheit SS2014 Wahlfach Herr Ymer Fabienne Realisierung digitaler Medien WS2014 Pflichtfach Herr Vitali Rosenbaum Smart Graphics WS2012 Wahlfach Herr Vitali Rosenbaum scientific communication SS2013 Pflichtfach Herr Vitali Rosenbaum law and ethics WS2014 Wahlfach Herr Vitali Rosenbaum majeures du XVIIe au XIXe SS2014 NULL Herr Vitali Rosenbaum chinesische Sprachen WS2013 Wahlfach Herr Otthein Pahl Realisierung digitaler Medien WS2014 Gast Herr Otthein Pahl Grundlagenwissen Sprache II SS2014 NULL Frau Trudhildis Winkel evolutionary biology WS2013 Wahlfach Frau Trudhildis Winkel law and ethics WS2014 Pflichtfach Frau Trudhildis Winkel Hebrew language WS2013 Wahlfach Frau Trudhildis Winkel Hindi WS2013 Pflichtfach Herr Goswin Haug Grundlagen der Astronomie SS2013 Pflichtfach Herr Goswin Haug Programmierung SS2013 NULL Herr Goswin Haug Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Knut Moeller visualization systems SS2014 NULL Herr Knut Moeller Computational Vision WS2014 Pflichtfach Herr Knut Moeller Arabische Sprache SS2013 Pflichtfach Frau Quirine Hocke Software Architektur SS2014 Pflichtfach Frau Quirine Hocke majeures du XVIIe au XIXe SS2014 Pflichtfach Frau Quirine Hocke Realisierung digitaler Medien WS2014 Wahlfach Frau Quirine Hocke Spanische Sprache SS2014 Gast Herr Neidhardt Thomasius evolutionary biology WS2013 Gast Herr Neidhardt Thomasius law and ethics WS2014 NULL Herr Neidhardt Thomasius Software Architektur SS2014 Pflichtfach Herr Neidhardt Thomasius Realisierung digitaler Medien WS2014 Pflichtfach Herr Neidhardt Thomasius Spanische Sprache SS2014 Gast Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 189 Frau Elizabeth Schmieder evolutionary biology WS2013 Wahlfach Frau Elizabeth Schmieder Programmierung SS2013 Gast Frau Elizabeth Schmieder Hebrew language WS2013 Gast Frau Elizabeth Schmieder Software Architektur SS2014 Wahlfach Frau Elizabeth Schmieder fonction didactique et morale SS2012 Pflichtfach Frau Elizabeth Schmieder Russische Sprache WS2013 Gast Herr Anaklet Heitmann Informationssicherheit SS2014 Gast Herr Anaklet Heitmann law and ethics WS2014 Gast Herr Anaklet Heitmann XML-Daten SS2014 Wahlfach Herr Anaklet Heitmann Software Architektur SS2014 Pflichtfach Herr Anaklet Heitmann Grundlagenwissen Sprache II SS2014 Wahlfach Frau Luitgard Krumm law and ethics WS2014 Wahlfach Herr Wilmer Herbst Hebrew language WS2013 Pflichtfach Herr Wilmer Herbst Grundlagenwissen Sprache II SS2014 NULL Herr Wilmer Herbst Griechische Sprache SS2014 Pflichtfach . Mit der MySQL Abfrage SELECT st.anrede, st.vorname, st.nachname, ve.bezeichnung, ve.semester, be.wPF FROM Veranstaltung ve RIGHT OUTER JOIN Besucht be ON ve.veranstaltungID=be.veranstaltung RIGHT OUTER JOIN Student st ON st.studentID=be.student ORDER BY st.studentID, ve.veranstaltungID; erhält man. anrede vorname nachname bezeichnung semester wPF Herr Gianni Briland evolutionary biology WS2013 Gast Herr Gianni Briland XML-Daten SS2014 Gast Herr Gianni Briland Software Architektur SS2014 Gast Herr Gianni Briland Grundlagen der Geologie und der Gesteinskunde WS2013 Pflichtfach Herr Egfried Ellis evolutionary biology WS2013 Gast Herr Egfried Ellis Smart Graphics WS2012 Gast Herr Egfried Ellis Meteorologie WS2012 Pflichtfach Herr Egfried Ellis Programmierung SS2013 Wahlfach Herr Egfried Ellis Hebrew language WS2013 Pflichtfach Herr Egfried Ellis Grundlagen der Geologie und der Gesteinskunde WS2013 NULL Herr Boy Witt Software Architektur SS2014 Pflichtfach Herr Boy Witt Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Boy Witt Grundlagenwissen Sprache II SS2014 Pflichtfach Herr Aster Frantzen Informationssicherheit SS2014 Pflichtfach Herr Aster Frantzen XML-Daten SS2014 Wahlfach Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net 190 Herr Aster Frantzen Computational Vision WS2014 Gast Herr Aster Frantzen majeures du XVIIe au XIXe SS2014 Pflichtfach Frau Mariechen Chaney NULL NULL NULL Herr Ebernand Bento Grundlagen der Astronomie SS2013 Wahlfach Herr Ebernand Bento scientific communication SS2013 Gast Herr Ebernand Bento Software Architektur SS2014 Wahlfach Herr Ebernand Bento fonction didactique et morale SS2012 Pflichtfach Herr Ebernand Bento Realisierung digitaler Medien WS2014 Wahlfach Herr Ebernand Bento Urdu WS2013 Pflichtfach Herr Mathis Looschelders Informationssicherheit SS2014 NULL Herr Mathis Looschelders Meteorologie WS2012 Pflichtfach Herr Mathis Looschelders Computational Vision WS2014 Pflichtfach Herr Mathis Looschelders Software Architektur SS2014 Pflichtfach Frau Margarete Buch law and ethics WS2014 Pflichtfach Frau Margarete Buch XML-Daten SS2014 Pflichtfach Frau Margarete Buch Hebrew language WS2013 Pflichtfach Frau Margarete Buch Software Architektur SS2014 Gast Frau Margarete Buch Grundlagen der Geologie und der Gesteinskunde WS2013 Gast Herr Aarne Stracke Realisierung digitaler Medien WS2014 Wahlfach Herr Aarne Stracke Grundlagenwissen Sprache II SS2014 Wahlfach Herr Aarne Stracke Griechische Sprache SS2014 Wahlfach Frau Kurumi Elstner Grundlagen der Astronomie SS2013 NULL Frau Kurumi Elstner scientific communication SS2013 NULL Frau Kurumi Elstner Computational Vision WS2014 Gast Frau Kurumi Elstner Hebrew language WS2013 Pflichtfach Frau Kurumi Elstner Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Frau Kurumi Elstner Arabische Sprache SS2013 Wahlfach Herr Ymer Fabienne Informationssicherheit SS2014 Wahlfach Herr Ymer Fabienne Realisierung digitaler Medien WS2014 Pflichtfach Frau Krystiana Baumgarten NULL NULL NULL Herr Vitali Rosenbaum Smart Graphics WS2012 Wahlfach Herr Vitali Rosenbaum scientific communication SS2013 Pflichtfach Herr Vitali Rosenbaum law and ethics WS2014 Wahlfach Herr Vitali Rosenbaum majeures du XVIIe au XIXe SS2014 NULL Herr Vitali Rosenbaum chinesische Sprachen WS2013 Wahlfach Herr Otthein Pahl Realisierung digitaler Medien WS2014 Gast Herr Otthein Pahl Grundlagenwissen Sprache II SS2014 NULL Frau Trudhildis Winkel evolutionary biology WS2013 Wahlfach Frau Trudhildis Winkel law and ethics WS2014 Pflichtfach Frau Trudhildis Winkel Hebrew language WS2013 Wahlfach Frau Trudhildis Winkel Hindi WS2013 Pflichtfach Herr Goswin Haug Grundlagen der Astronomie SS2013 Pflichtfach Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Herr Goswin Haug Programmierung SS2013 NULL Herr Goswin Haug Grundlagen der Geologie und der Gesteinskunde WS2013 Wahlfach Herr Knut Moeller visualization systems SS2014 NULL Herr Knut Moeller Computational Vision WS2014 Pflichtfach Herr Knut Moeller Arabische Sprache SS2013 Pflichtfach Frau Quirine Hocke Software Architektur SS2014 Pflichtfach Frau Quirine Hocke majeures du XVIIe au XIXe SS2014 Pflichtfach Frau Quirine Hocke Realisierung digitaler Medien WS2014 Wahlfach Frau Quirine Hocke Spanische Sprache SS2014 Gast Herr Neidhardt Thomasius evolutionary biology WS2013 Gast Herr Neidhardt Thomasius law and ethics WS2014 NULL Herr Neidhardt Thomasius Software Architektur SS2014 Pflichtfach Herr Neidhardt Thomasius Realisierung digitaler Medien WS2014 Pflichtfach Herr Neidhardt Thomasius Spanische Sprache SS2014 Gast Frau Elizabeth Schmieder evolutionary biology WS2013 Wahlfach Frau Elizabeth Schmieder Programmierung SS2013 Gast Frau Elizabeth Schmieder Hebrew language WS2013 Gast Frau Elizabeth Schmieder Software Architektur SS2014 Wahlfach Frau Elizabeth Schmieder fonction didactique et morale SS2012 Pflichtfach Frau Elizabeth Schmieder Russische Sprache WS2013 Gast Herr Anaklet Heitmann Informationssicherheit SS2014 Gast Herr Anaklet Heitmann law and ethics WS2014 Gast Herr Anaklet Heitmann XML-Daten SS2014 Wahlfach Herr Anaklet Heitmann Software Architektur SS2014 Pflichtfach Herr Anaklet Heitmann Grundlagenwissen Sprache II SS2014 Wahlfach Frau Luitgard Krumm law and ethics WS2014 Wahlfach Herr Wilmer Herbst Hebrew language WS2013 Pflichtfach Herr Wilmer Herbst Grundlagenwissen Sprache II SS2014 NULL Herr Wilmer Herbst Griechische Sprache SS2014 Pflichtfach . 55.3 GROUP BY in JOIN . 55.4 HAVING in JOIN . 191 Literaturverzeichnis [1] Hans-Jürgen Appelrath and Jochen Ludewig. Skriptum Informatik: Eine konventionelle Einführung. Vieweg + Teubner, Wiesbaden Deutschland, 1995. [2] Oliver Bartosch and Marcus Throll. Einstieg in SQL: Inkl. SQL Syntax von MySQL, Access, SQL Server, Oracle, PostgrSQL, DB2 und Firebird. Galileo Computing Rheinwerk Verlag GmbH, Rheinwerkallee 4 53227 Bonn Deutschland, 2010. [3] Thomas Becker. SQL : Oracle, SQL-Server, MySQL und PostgreSQL. 2002. [4] Rolf Däßler. MySQL 5 Übungsbuch. bhv Publishing GmbH, Langenhecke 17 53902 Bad Münstereifel, 2006. [5] Paul Du Bois. MySQL Kochbuch. O’Reilly, Balthasarstr. 81 50670 Köln Deutschland, 2003. [6] André Eickler and Alfons Kemper. Datenbanksysteme: Eine Einführung. Oldenbourg verlag, München, 2006. [7] Ramez A. Elmasri and Shamkant B. Navathe. Grundlagen von Datenbanksystemen. Pearson Deutschland GmbH, Lilienthalstr. 2 85399 Hallbergmoos, 2002. [8] Wolfgang Gassler, Stefan Pröll, and Eva Zangerle. MySQL 5.6: Das umfassende Handbuch. Galileo Computing Rheinwerk Verlag GmbH, Rheinwerkallee 4 53227 Bonn Deutschland, 2005. [9] Klaus Giesen. SQL. bhv Publishing GmbH, Langenhecke 17 53902 Bad Münstereifel, 2003. [10] Andreas Heuer, Gunter Saake, and Kai-Uwe Sattler. Datenbanken - Konzepte und Sprachen. 2010. [11] Brand Hunt, Daniel Kline, and Kevin E Kline. SQL in a Nutshell. O’Reilly, Balthasarstr. 81 50670 Köln Deutschland, 2005. [12] Alfons Kemper and Martin Wimmer. Übungsbuch Datenbanksysteme. Oldenbourg verlag, München, 2006. [13] Michael Kofler. MySQL 5: Einführung, Programmierung, Referenz. Addison Wesley, Bonn, 2005. [14] Gregor Müllmerstadt and Friedrich Kuhlmann. SQL. Rowohlt Verlag GmbH, Hamburger Straße 17 21465 Reinbek Deutschland, 1999. [15] Dieter Staas. MySQL 5. bhv Publishing GmbH, Langenhecke 17 53902 Bad Münstereifel, 2005. 192 Kapitel 56 Symbolverzeichnis In diesem Abschnitt stellen wir Symbolen und Notationen zusammen. Die meistens entsprechen denen aus der Literatur aber hier für die Bedürfnisse dieser Arbeit angepasst sind. [start ] Schaltfläche, Registerkarte, Fenster, Reiter, Menübefehl [start ]➥ [Alle Programme ]➥ [Zubehör ]➥ [Eingabeaufforderung ] Menüfolge Taste1 ➯ F7 Alt + + Taste2 +. . . + TasteN + Zuerst die Tasten Taste1 bis TasteN gedrückt halten; Dann kurz Taste TasteX drücken; Nun die Tasten Taste1 bis TasteN wieder loslassen TasteX nacheinander die Tasten H Num 0 ➯ Num 1 ➯ Num 9 ➯ Num 3 F7 , H drücken Zuerst drücken Sie die ALT–Taste (und halten diese gedrückt), geben jetzt die Zahlenkombination (wichtig: über den Ziffernblock!) ein, und lassen anschliessend die ALT-Taste los Super Super–Taste; Bei Windows heisst WindowsLogoTaste Shift Lock Umschaltsperre oder Feststelltaste Menu Menü–Taste auf einer Computertastatur dient zum Aufruf des sogenannten Kontextmenüs Fn Die Fn–Taste ist eine spezielle Taste, die man meist nur auf Notebooks oder Netbooks findet. Dabei steht Fn für Funktion Num Die Taste 9 9 auf dem Nummernblock linke Strg Linke Strg–Taste rechte Strg Rechte Strg–Taste linke Shift Linke Shift–Taste rechte Shift Rechte Shift–Taste option key Die Auswahltaste ist eine Sondertaste auf den Tastaturen für Apple–Computer C:\\> klassische MS–DOS–Kommandozeile (Eingabekonsole) user» UNIX–Prompt des normalen Users root» UNIX–Prompt des Superusers (root) 193 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net :<Verzeichnis der Anwendung>» Prompt wird vom Verzeichnis der Anwendung aus ausgeführt :» Prompt anderer Programme (z.B. Matlab, Python, Maple, Statistikprogramm R, ect.) dir01 dir02 datei03.sql datei04.txt datei05.java dir06 datei07.dat datei08.sql datei09.tex datei10.java dir11 grafisches Symbol für Verzeichnisstruktur mit Verzeichnissen und Dateien \ Differenz von Relationen × Kartesisches Produkt von Relationen R∆S symmetrische Differenz von R und S π Projektion von Relationen σ Selektion (Restriktion) von Relationen ⊲⊳ (Inner bzw. Natural) Join von Relationen ⊲⊳θ (Inner) Theta–Join von Relationen ◭ linker äusserer Join von Relationen ◮ rechter äusserer Join von Relationen ♦ (Voll) äusserer Join bzw. Voll Join von Relationen ⋉ linker Semi–Join von Relationen ⋊ Rechter Semi–Join von Relationen ≬ UNION–Join von Relationen ρ Umbenennung von Relationen / ✄ ✂✄C ✁ ✂cc ✁ Division von Relationen ✄ ✂✄E ✁ ✂✄ee ✁ ✂✄S ✁ ✂✄ss ✁ ✂✄D ✁ ✂✄P ✁ pp ✂ ✁ ✄ ✂U ✁ grafisches Symbol für CHECK grafisches Symbol für CHECK über mehrere Spalten grafisches Symbol für ENUM grafisches Symbol für SPECIAL ENUM grafisches Symbol für SET grafisches Symbol für SPECIAL SET grafisches Symbol für DEPENDENT grafisches Symbol für PRIMARY KEY grafisches Symbol für Teil von PRIMARY KEY grafisches Symbol für UNIQUE KEY 194 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ✄ ✂✄uu ✁ F ✄✂ ✁ ✂ff ✁ grafisches Symbol für Teil von UNIQUE KEY grafisches Symbol für FOREIGN KEY ✞ ☎ qf ✝ ✆ ✄ ✂✄I ✁ ✂✄L ✁ ✂✄R ✁ ✂✄T ✁ ✂W ✁ ✄ a(Autor) = (✂P ✁autorID,titel,anrede,nachname,vorname) grafisches Symbol für Teil von FOREIGN KEY grafisches Symbol für PSEUDO FOREIGN KEY grafisches Symbol für INDEX grafisches Symbol für FULLTEXT grafisches Symbol für SPATIAL grafisches Symbol für SPATIAL INDEX grafisches Symbol für WEB APPLICATION Relationsschema einer Relation Autor ={ ✄ (✂P ✁autorID,titel,anrede,nachname,vorname), { (1234,Dr., Frau, Kim, Ludwig), (5634,NULL, Herr, Kim, Laas) } } Relation t(Autor) = { (1234,Dr., Frau, Kim, Ludwig), (5634,NULL, Herr, Kim, Laas) } Tupelmenge einer Relation dom(a) Domain einer Tupel a in einer Relation tα die Einschränkung von Tupel t auf die Attribute aus α α→β β heisst funktional abhängig von α α։β β heisst voll funktional abhängig von α «table» Autor InnoDB; utf8 ✄ ✂P ✁ autorID titel anrede nachname vorname grafisches Symbol für Tabelle «datenbank» die_welt InnoDB; utf8 TABLE Autor VIEW Titel grafisches Symbol für externe Datenbank 195 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ∗ n–äre Beziehung «sql routine» routineName grafisches Symbol für routine(Trigger, Event, SP, usw.) «php script» scriptName Serverseitiges/Clientseitiges + int KONSTANTE=1234 klassenVariable instanzVariable methode1() methode2() grafisches Symbol für Clientseitiges Skript besucht ◮ grafisches Symbol für FOREIGN KEY Beziehung (mit Namen und Leserichtung) grafisches Symbol für PSEUDO FOREIGN KEY Beziehung grafisches Symbol für n–äre Beziehung Entity grafisches Symbol für entity, die als Tabelle vorkommt Entity grafisches Symbol für entity, die nicht als Tabelle vorkommt Entity grafisches Symbol für Schwaches entity, die als Tabelle vorkommt Entity grafisches Symbol für Schwaches entity, die nicht als Tabelle vorkommt 196 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Attribut grafisches Symbol für attribute Abgeleitetes Attribut grafisches Symbol für Abgeleitetes Attribut primaryKey grafisches Symbol für primary Key Attribut grafisches Symbol für mehrwertige attribute Beziehung grafisches Symbol für Beziehung, die als Tabelle vorkommt Beziehung grafisches Symbol für Beziehung, die nicht als Tabelle vorkommt Beziehung grafisches Symbol für identifizierte Beziehung, die als Tabelle vorkommt Beziehung grafisches Symbol für identifizierte Beziehung, die nicht als Tabelle vorkommt + für public - (engl. öffentlich) # für protected - (engl. geschützt) - für private - (engl. privat) ~ für package «abstract» GeoFigur ~abstract umfang(): double - abstract flaeche(): double OOP Klassendiagramm mit Zugriffskontrolle für abstrakte Klasse 197 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net «interface» Comparator + int KONSTANTE=1234 - String compareTo() # void equals() OOP Klassendiagramm mit Zugriffskontrolle für Schinttstelle E «class» ArrayList ArrayList() boolean add(E e) void clear() iterator() OOP Klassendiagramm mit Zugriffskontrolle für Parametrisierte Klasse «class» Student + int KONSTANTE=1234 matrikulNr: int + nachname: String # vorname: String ~geburtsDatum: date - Student() + static datenTyp statischeMethode() - String getVorname() # void setAnrede() OOP Klassendiagramm mit Zugriffskontrolle 198 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net «class» Adresse strHausNr: String + ort: String # land: String ~pLZ: String - Adresse() + static datenTyp statischeMethode() - String getOrt() # void setLand() OOP Klassendiagramm für innere Klasse studi01: Student matrikulNr=12345 nachname=Berger vorname=Stefanie geburtsDatum=21.01.1980 OOP Objektdiagramm der Klasse Student «enum» Farbe ROT(255,0,0) GRUEN(0,255,0) BLAU(0,0,255) + int r - int g # int b - String toRGB() OOP Klassendiagramm für enum static datenTyp klassenVariable Klassenvariable static datenTyp statischeMethode statische Methode gerichtete Assoziation «paket» java.lang interface Comparable class Mathe class String OOP Klassendiagramm für packet 199 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Paket–Import besucht ◮ ∗ Assoziation mit Namen und Leserichtung n–äre Assoziation Vererbung (java extends) Abhängigkeit (java implements) Komposition Aggregation (a, b) Multiplizität (Kardinalität): Mindestens a Objekte und maximal b Objekte ::= wird zur Definition verwendet; in der Regel case-sensitive, unterscheidet zwischen Gross– und Kleinschreibung. ::=ncs (ncs=not case–sensitive) wird zur Definition verwendet und zwar ohne auf Gross– und Kleinschreibung (vgl. java und MySQL) und tags (vgl. html und XML) bei Schlüsselwörter zu achten; Create TaBLe = CrEate Table = Create Table |senkrechter Strich Sie können nur eines der Elemente verwenden; Wenn ein Syntaxelement eine Anzahl von Alternativen hat, werden diese durch senkrechter Strich getrennt ? Fragezeichen Das dem Fragezeichen vorangehende Zeichen null oder einmal: 200 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net [optional] eckige Klammern Optionale Syntaxelemente: Inhalt der Klammer kann stehen oder nicht • Bei [a|b|c] können Sie folgendes auswählen ◦ entweder ∅ (nichts), ◦ oder a ◦ oder b ◦ oder c • Bei [a?b?c?] können Sie folgendes auswählen ◦ entweder ∅ (nichts), ◦ oder a ◦ oder b ◦ oder c ◦ oder a und b ◦ oder a und c ◦ oder b und c ◦ oder a und b und c {erforderlich}Geschweifte (geschwungene) Klammern Erforderliche Syntaxelemente: genau eine Alternative aus der Klammer muss stehen • Bei {a|b|c}müssen Sie folgendes auswählen ◦ entweder a, ◦ oder b ◦ oder c • Bei {a?b?c?}müssen Sie folgendes auswählen ◦ entweder a ◦ oder b ◦ oder c ◦ oder a und b ◦ oder a und c ◦ oder b und c ◦ oder a und b und c 201 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net ( ) runde Klammern Gruppieren: a(;b)? steht für • entweder a • oder a;b <Nichtterminal> nicht zu verwechseln mit <html–tag> die syntaktische Variablen werden mit breiten spitzen Klammern umschlossen cp850_general_ci Terminal Create Table Schlüsselwort <tag> html bzw. XML tag * steht für alles mögliches @<distance> Damit kann man abfragen, ob Wörter innerhalb eines gewissen <distance>zueinander liegen c Ein konstantes Zeichen c . Genau ein beliebiges Zeichen \. Genau das Zeichen Punkt \.\.\. Ellipsis; line–continuation operator Fortsetzungszeichen z.B. bei Matlab: Reicht die Zeilenlänge nicht aus, können drei Punkte (dots) als Fortsetzungszeichen eingegeben werden ... Platzhalter für ein Objekt (!. . . ) keines der Zeichen aus der Klammer ^ Zeilenanfang bzw. Absatzanfang $ Zeilenende bzw. Absatzende ~ Wortanfang † Wortende ‡ Zeilenumbruch unicode 8626 # Ausdruck1 . . . Ausdruck2 # Ausdruck1 und Ausdruck2 müssen gleich sein: Beispiele für <h{1-6}#>. . . </h{16}# >sind • <h2>. . . </h2> • oder <h5>. . . </h5> • nicht aber <h2>. . . </h5> möglich #1 #1 #2 Ausdruck11 . . . Ausdruck12 Ausdruck21 . . . Ausdruck22 #2 Ausdruck11 und Ausdruck12 müssen gleich sein und Ausdruck21 und Ausdruck22 müssen gleich sein Ausdruckn bzw. (Ausdruck)n Der voranstehende Ausdruck muss exakt nmal vorkommen. Ausdruck+ bzw. (Ausdruck)+ Wiederholungen (ein– oder mehrfach) von voranstehendem Ausdruck Ausdruck* bzw. (Ausdruck)* Wiederholungen (keinmal, ein– oder mehrfach) von voranstehendem Ausdruck 202 Dozent Mohamed Naji http://iba-nuernberg.fu-academy.de/ BWL Datenbanksystem http://www.naji.net16.net Ausdrucka,b bzw. (Ausdruck)a,b Der voranstehende Ausdruck muss mindestens a–mal und darf maximal b–mal vorkommen. Ausdrucka, bzw. (Ausdruck)a, Der voranstehende Ausdruck muss mindestens a-mal vorkommen. Symbol für notwendiges Leerzeichen \#\@\.\‡\†\^\~\$\!\-\{\}\|\)\(\]\[\*\+\?\\ Metazeichen werden durch ein vorangestelltes Backslash–Zeichen aufgehoben werden. 0-6 eine Ziffer von 0 bis 6 /*Kommentar*/ Kommentar <Speicherverzeichnis> Speicherverzeichnis <Installationsverzeichnis> Installationsverzeichnis <Arbeitsverzeichnis> Arbeitsverzeichnis Break Cbzw. Symbol für notwendiges Zeilenumbruch (z.B. bei MatLab Anweisungen) Symbol für Zeilenfortsetzungszeichen. Es wird verwendet, um eine einzelne Code–Zeile auf zwei oder mehr physische Zeilen zu verteilen; z.B. Deklaration von langem String in Java: String langeText = "das ist ein langer Text in Java. In der Quellcode muss in einer Zeile geschrieben werden"; C C C Tabelle 56.0.0.1: Notationen 203 Index Kommando, 79 Tabelle name, 79 204 Personverzeichnis Galilei, Galileo ♂italienischer Philosoph, Mathematiker, Physiker und Astronom (1564; 1642) 78 Jahre, II 205