Datenbank-Client Datenbank-Server · beiteten ER-Modell beruht. Es ist also nicht beabsichtigt, eine umfassende und gründliche Ein-führung in SQL zu geben. Nur die Aktionen und
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Eine relationale Datenbank mit MYSQL
MySQL arbeitet auf der Grundlage von SQL. Das System hat den besonderen Vorteil, dass es
kostenlos genutzt werden kann. Zwar hat dieses Datenbanksystem nicht den gleichen Funkti-
onsumfang, wie kommerzielle System ( z.B. ORACLE ) es kann aber in Hinsicht Geschwindig-
keit und Datenvolumen durchaus mit den kommerziellen Systemen mithalten.
Das Grundprinzip ist die Client - Server - Architektur, was bedeutet, dass der zentrale Server die
Datenbanken verwaltet und die Benutzer über eine Clientprogramm ( von denen viele verschie-
dene existieren ) auf diese Datenbanken zugreifen.
Dabei kann der Datenserver irgendwo auf dieser Welt stehen und die Benutzer greifen z.B. per
Internet auf die Datenbanken zu.
Für die nichtkommerzielle Nutzung ist MySQL frei. Die genauen Benutzerbedingungen und
auch das Programm selbst erhält man z.B. bei www.mysql.com
Als gute Arbeitsgrundlage kann man "Das Einsteigerseminar MySQL" von Rolf Däßler, bhv -
Verlag 2001, ISBN 3-8266-7021-3 verwenden.
In diesem Script soll es darum gehen, eine Datenbank "SCHULE" zu erzeugen, die auf dem erar-
beiteten ER-Modell beruht. Es ist also nicht beabsichtigt, eine umfassende und gründliche Ein-
führung in SQL zu geben. Nur die Aktionen und Befehle, die zu unserer Datenbank führen wer-
den genauer dargestellt. Alles andere zu MySQL sollte man sich immer dann antun, wenn es nö-
Man kann sich das Leben natürlich auch ein wenig einfacher machen, wenn man vorher das pas-
sende Verzeichnis wählt. Also:
C:\CD:\MYSQL\BIN
Danach muss man immer nur noch den letzen Teil der Befehlszeile eingeben.
Starten mit : mysqld
Beenden mit mysqladmin -u root shutdown
Mit dem Befehl
mysqlshow
wird das Systemaufgefodert, die aktuell vor-
handenen Datenbanken zu zeigen.
Man erhält das nebenstehene Bild mit den bei-
den vorhandenen Datenbanken.(Zeigen sie ruhig etwas Begeisterung über die schöneBildschirmausgabe.)
---------------------------------------------------------------------------------------------------------------------------Hier seien einige ketzerischen Bemerkungen erlaubt. Dass MySQL in dieser Form zu uns kommt, ist recht traurig.Diese Art der Benutzeroberfläche ist nun seit mehr als 10 Jahren eine Zumutung für alle User, die nicht zu den Ex-perten der Computerbenutzung gehören. Zwar macht es den wahren Könner aus, dass er oder sie sich mit Kom-mandozeilen in DOS oder UNIX bestens auskennen und allerlei kryptischen Befehle beherrschen ( von denen einigegleich noch kommen ), aber man kann sich des Eindrucks nicht erwehren, dass hier mit Absicht die "dummen" Userabgeschreckt werden sollen, damit man sich selbst noch viel mehr als Experten und coolen Hacker verstehen kann.Immer wieder kann man von "Könnern" hören, dass doch diese Art der Bedienung "echt cool" sei, sie ist es abernicht, und sie erfüllt keinen sichtbaren Zweck. Auch in der OpenSource-Programmierergilde gibt es genug Kompe-tenz, um gute Bedienungsoberflächen zu programmieren, ohne dass die Leistungsfähigkeit von MySQL leiden wür-de. Der Versuch von winmysqladmin.exe zeigt das schon ein wenig. Vielleicht sollten sich die Programmierer auchmal auf anderen Rechnersystemen umschauen, um Benutzeroberflächen zu sehen, die ein angenehmes Arbeiten er-möglichen.
Hinweis: In der aktuellen Fassung der Tabellen ist die Kursnummer ein Feld der Länge 6 geworden, wobei am Ende jeweils ein Buchstabe an-gehängt ist , der der Kursart entspricht. Dabei steht ein L für Leistungskurs und ein g für Grundkurs. Die Abfrage muss dann am Ende lauten:-> (hatkurs.kursnummer="Ma 11L");
Die Verknüpfung wurde mit SELECT verwirklicht. Im Allgemeinen sorgt man dafür, das Ab-
frage und Verknüpfung in der Syntax getrennt werden. Es wird hier der INNER JOIN-Befehl be-
nutzt. Wenn sie die dargestellte Abfrage sehen, fällt sicher auf, dass in der oberen Zeile wieder
die Attribute aus den Tabellen angegeben sind. Nach dem FROM kommt dann der Name der Ta-
belle mit dem Schlüsselfeld, dann mit INNER JOIN die zu verknüpfende Tabelle. Hinter dem
ON wird die Bedingung für die Verknüpfung angegeben.
Erst danach kommt die Auswahlbedingung nach dem WHERE. Das Ergebnis ist wie auch oben
eine Zensurenliste.
Aufgaben
Suchen sie aus der Tabelle Kurse alle Kurse mit ihren Themen, die von "Kr" unterrichtet werden.
Suchen sie alle Kurse des dritte Kurshalbjahres, die von "Db" unterrichtet werden.
Suchen sie in der Tabelle Kurse alle Deutschgrundkurse (Tip: Die beginnen alle mit einem dt)
Suche alle Schüler, die im Leistungkurs En 11L enthalten sind.
MySQL: Select und Join -- Das Handwerkzeug für Abfragen In diesem Abschnitt werden die wichtigsten Methoden für das"Befragen" von MySQL-Datenbanken erläutert. Dieersten Versuche mit SELECT wurden ja bereits in der MySQL-Einleitung(MYSQL.pdf) angestellt. Wir reissen dies hier deshalb nurkurz an und bauen dann darauf auf. SELECT Mittels dieses Befehls lassen sich beliebige Attributeaus beliebigen Tabellen auswählen. Dies kann man natürlich so bedingen, dass man sich genau die Daten geben lässt, welche man auch bekommenwill. Man benötigt ja nicht immer gleich die ganze Datenbank. Andernfallskönnte man auch gleich mit einer großen Liste auf Papier arbeiten, der Aufwand wäre ähnlich. Man stelle sich unsere Beispieldatenbank "Schule"mal ausgedruckt vor: alleine die Tabelle "hatkurs" besitzt 3840 Instanzen!Bleiben wir mit unserem ersten Beispiel gleich bei dieser "Monster-Tabelle":
SELECT * FROM `hatkurs` WHERE 1 LIMIT 0, 50;
und siehe da? Was bekommen wir? Eine Tabelle mit nur 50 Einträgenund nicht 3840! Woran könnte es liegen? Natürlich an der"LIMIT"-Klausel: Diese besagt hier: Selectiere nurdie Einträge 0 bis 50. Das "WHERE1" besagt nur, daß keine weiteren Kriterien die Auswahleinschränken. Hier setzen wir nun an und schränken die Auswahlein. Wie sieht eigentlich die Tabelle "hatkurs"aus? Da die Befehle für diese Abfragen bereits in der MySQL-Einführungvorgestellt wurden, zeige ich hier nur kurz die Struktur.
"hatkurs" enthält:
Also suchen wir jetzt einmal alle Einträge aus "hatkurs",in denen Schüler 15 Punkte bekommen haben:
SELECT * FROM hatkurs WHERE Punkte = 15;
(Ich habe hier das LIMIT weggelassen, da ich weiß das esnicht allzu viele Datensätze mit 15 Punkten gibt ;-) )Soweit ist das ganze noch ganz einleuchtend. Wo wir zuvor nicht weiter eingeschränkt haben, lassen wir uns nun nur
diejenigen Datensätze ausgeben, wo die Punktzahl 15 beträgt.Select ist also recht simpel, nicht wahr? Schön und gut,aber was ist mit Joins? Dazu kommen wir jetzt! Wir wollennun nicht nur diese obskuren Nummern da stehen haben, sondernhätten gerne gleich eine Auflistung welche Schüler hinterdiesen Leistungen stecken. Um diese Information zu erhalten,müssen wir aber Daten aus einer zweiten Tabelle mit abfragen,und zwar auch nicht mit einer eigenständigen Anfrage, sonderndirekt verknüpft mit unserer Abfrage, wer 15 Punkte hat.Genau dazu ist der "JOIN" gedacht. Mit "JOIN" lässtsich genau das Gewollte erreichen: Wir können zwei odermehrere Tabellen-Abfragen miteinander verknüpfen. Die einfachsteMethode in MySQL einen "JOIN" auszuführen ist mit dem Komma ",".In MySQL steht das Komma synonym für den Befehl JOIN, allerdingsist es mit dem Komma einfacher und leichter zu lesen, was die Abfrage bewirken soll. Zunächst einmal führen wir die Abfrage aus. Ich erkläre dann anhand dieser die Vorgehensweise:
Aha! Das sieht doch schon komplizierter aus! Ist es aberprinzipiell nicht. Was machen wir da? Eigentlich nicht vielneues: Wir selektieren die Attribute "Name"und "Vorname" aus der Tabelle "Schueler"und "Kursnummer" aus "hatkurs", da wir hier mit einem JOIN arbeiten, müssen wir natürlich angeben aus welcher Tabelle die auszugebenden Daten kommen sollen. Die ID_Nummer beispielsweise ist in beiden Tabellen vorhanden, wollten wir diese mit ausgeben wüsste das MySQL-System nicht welche ID_Nummer ausgegeben werden soll (sprich aus welcher Tabelle die Nummer stammen soll). In dem "FROM"-Teil sehen wir dann das Komma als eigentlichen "JOIN"-Operator.Hier wird angegeben welche Tabellen gejoint werden sollen,in unserem Fall natürlich "Schueler" und "hatkurs". Der "WHERE"-Teil ist erstmal klar, "Punkte = 15" kennen wir ja schon, aber was kommt dann? Tja, man kann einfach mehrere Bedingungen in die "WHERE"-Klausel schreiben, indem man ein "AND" verwendet. Das "AND" funktioniert einfach wie ein "AND WHERE", sprich: wir können die Auswahl weiter eingrenzen. In unserem Fall sorgen wir mit der zweiten Bedingung
dafür, daß nur die Schuelerdaten aus der Tabelle "Schueler"ausgegeben werden, deren ID_Nummern auch im Ergebnis unserAbfrage "Wer hat 15 Punkte bekommen?" auftauchen. Da "ID_Nummer" sowohl in "Schueler" als auch in "hatkurs" vorkommt, lassen sich diese Tabellen auf diese sinnvolle Art und Weise joinen. Soweit mit dieser Abfrage... Machen wir es doch nochmal miteinem Join von allen 3 Tabellen! Unsere Fragestellung: "Listealle Schueler mit Name, Vorname und Geschlecht auf die 15Punkte in einem Leistungskurs bekommen haben, sowie dieKursnummer und das Thema des Kurses."Das klingt jetzt erstmal sehr schwierig, ist es aber prinzipiellgar nicht. Man muss nur die einzelnen Bedingungen verknüpfenund die richtige Zusammenstellung finden:Bedingung, WHERE-Syntax:
Leistungskurs, kurse.kursart = 'L'
15-Punkte, hatkurs.Punkte = 15Also nicht viel neues, bisher oder? Nun bauen wir die Abfrage:
So, was ist neu? Eigentlich nichts. Wir haben nur erstmalein "Alias" für die Tabellen gesetzt: "Schueler s" bedeutet, daß die Tabelle "Schueler" in dieser Abfrage auch als "s"angesprochen werden kann, analog funktioniert das natürlichauch für die anderen Tabellen ("kurse" ist dann "k" und "hatkurs"ist dann "h"). Ansonsten haben wir nur eine dritte Tabelle hinzu genommen und unsere Bedingungen in SQL formuliert und hinzugefügt. Als Ergebnis bekommen wir eine schöne Antwort auf unsere Fragestellung. Es sollte in diesem kurzen Beitrag eigentlich deutlich geworden sein, daß man in SQL mit einfachen Befehlen auch komplizierte Fragestellungen zu lösen vermag. An Theorie soll das genügen, der Rest ist Übungssache.