Datenbank-Client Datenbank-Server · beiteten ER-Modell beruht. Es ist also nicht beabsichtigt,...

25
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ö- tig ist. Seite 21 MySQL und ERM ein Beispiel © Hans-Georg Beckmann 2006 Datenbank-Client Datenbank-Server Eingabe einer Ab- frage Darstellung der Ergebnisse Datenbank Managment System DBMS Datenbanken DB Abfrage QUERY Ergebnis

Transcript of Datenbank-Client Datenbank-Server · beiteten ER-Modell beruht. Es ist also nicht beabsichtigt,...

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ö-

tig ist.

Seite 21

MySQL und ERM ein Beispiel

© Hans-Georg Beckmann 2006

Datenbank-Client Datenbank-Server

Eingabe einer Ab-frage

Darstellung der Ergebnisse

Datenbank Managment

SystemDBMS Datenbanken

DB

AbfrageQUERY

Ergebnis

MySQL und ERM ein Beispiel

© Hans-Georg Beckmann 2006

Seite 22

Vorbemerkungen zum Stand der Dinge im Jahr 2006

Die nachfolgenden Informationen beziehen sich auf die Situationen im Jahr 2002, in dem das

Kapitel erstellt wurde. Nicht nur die aktuelle Version von mySql hat sich seither natürlich ver-

ändert, sondern auch das Betriebssystem. Die meisten Kolleginnen und Kollegen arbeiten

nicht mehr mit Windows 98, sondern mit Windows XP ( in seinen verschiedenen Varianten).

Es wäre daher zu erwarten, dass das Kapitel auf den neuesten Stand gebracht worden ist.

Das ist aber hier nicht geschehen. Der Hauptgrund liegt darin, dass immer noch an sehr vielen

Schulen Windows 98 im Unterricht eingesetzt wird.

Die nachfolgenden Installationshinweise beziehen sich alle auf dieses "alte" Betriebssystem.

Leider ist es aus zeitlichen Gründen nicht möglich gewesen, parallel dazu eine Anleitung für

Windows XP zu schreiben. Wenn Anleitungen zu Windows XP fertig gestellt sind, werden sie

als Zusatzmaterial auf dem VLIN-Server zur Verfügung gestellt.

Sie haben also das Problem, dass sich die nachfolgenden Inhalte, soweit sie sich auf die Instal-

lation und Bedienung der Software beziehen, nicht mit dem zusammenpassen, was sie auf ih-

ren Rechnern vorfinden.

Es gibt aber im Web soviele Installationsanleitungen, dass es ihnen möglich sein sollte, die ak-

tuelle Version von mySql unter Windows XP zum Laufen zu bringen.

Weiteres Material und Hinweise zu dem aktuellen Stand der Beispieldatenbank

Nach dem letzten Kursdurchlauf wurden in der Datenbank SCHULE noch einige Veränderun-

gen vorgenommen, über die sie sich informieren sollten. Dazu ist am Ende dieses Kapitels

noch reichlich Material angefügt, das teilweise für die Arbeitstagung in Göttingen im

Juni 2004 bereitgestellt wurde.

Wichtigster Unterschied ist der Zugang zur Datenbank SCHULE . Die Datenbank findet

man jetzt unter www.vlin.de /zusatz. Username und Passwort werden nicht mehr abgefragt,

sie können sofort mit der Dantebank arbeiten. Es gibt zwei Datenbanken vlinDB1 und

vlinDB2 . Arbeiten sie bitte mit vlinDB2.

1.Schritt: Wie bekomme ich MySQL auf meinen Rechner ?

Vielleicht war der Systemadministrator nett und das Programmpaket

ist schon lange da ! Wenn das aber nicht der Fall ist oder, wenn man

MySQL zu Hause installieren möchte, dann kommt nun ein wenig

Arbeit.

Man lädt sich das Programmpaket aus dem Interenet auf den heimi-

schen Rechner. Unter www.mysql.com wird man in der Downloadsektion an einen HTTP- Server

oder einen FTP-Server durchgereicht ( z.B bei der GWDG in Göttingen ). Dort lädt man die Da-

tei als WINZIP herunter. Das ist durchaus wichtig, weil die Shareware WINZIP die Datei nicht

nur entpackt, sondern auch gleich korrekt installiert, was einige andere Entzipper nicht machen.

Die aktuelle stabile Version vonMySQL ist 3.23.49.

Nach dem Entpacken und Installieren sollte sich auf dem Laufwerk C: ein Verzeichnis mysql be-

finden. In diesem Verzeichnis sind viele Unterverzeichnisse abgelegt:

Seite 23

MySQL installieren und starten

© Hans-Georg Beckmann 2006

Das Verzeichnis mysql

Wichtig sind die folgenden Unterverzeichnisse:

bin enthält alle ausführbaren Programme, die man für MySQL braucht.

data enthält alle Datenbanken. Es liegen schon zwei Datenbanken vor: mysql und test.

docs Dokumentation

Alle anderen Verzeichnisse sind eher was für erfahrene Benutzer, die wir ja erst noch werdensollen.

2. Schritt : MySQL zum ersten Male starten

Dazu muss man zuerst einen Blick in C:\mysql\bin werfen. Dort findet man eine Reihe wich-

tiger Programmteile von MySQL:

Seite 24

MySQL starten

© Hans-Georg Beckmann 2006

Das Verzeichnis mysql\bin

1

2

3

4

5

6

7

mysql.exe Datenbankclient und Kommandozeileneditor zur Kommunikation mit

der Datenbank. Das hört sich kompliziert an, bedeutet aber nur, dass in

diesem Programm ein Teil des DBSM und ein Clientprogramm

zusammengefasst sind.

mysqladmin.exe Datenbankadministrationsprogramm

mysqld.exe Datenbankserver für Windows 95/98

mysqld-opt.exe Datenbankserver für Windows 95/98 der für Pentiumprozessoren

optimiert wurde.

mysqlimport.exe Programmm zum Import aus Textdateien ( u.a.) in bestehende

Datenbanken

winmysqladmin.exe Der Versuch eines benutzerfreundlichen Datenbankadministrations -

programms mit grafischer Oberfläche und Hilfesystem.

Im Verzeichnis mysql\data findet man für jede Datenbank einen eigenen Ordner. Dessen Name

ist auch der Name der ganzen Datenbank. Das ist wichtig, weil es ja passieren kann, dass jemand

aus der Windowsebene heraus einen Ordner mal umbenennt. Dann darf man sich nicht wun-

dern, wenn MySQL seine Datenbanken nicht mehr wiederfindet. Das alles kann natürlich nur

geschehen, wenn man als Chef des privaten Rechners Zugriff auf solche Möglichkeiten hat. Im

Netzwerk wird das wohl kaum passieren.

Angenommen, es existiert eine Datenbank SCHULE, die wiederum eine Tabelle ( Relation) ent-

hält, die schueler heißt, dann gibt es:

schueler.FRM eine Datei, mit der Tabellenstruktur

schueler.MYD eine Datei, die die Datensätze enthält

schueler.MYI eine Datei für den Index

Nun zum ersten Start .

Seite 25

MySQL starten

© Hans-Georg Beckmann 2006

2

3

4

5

6

7

1

Der "klassische" Weg geht über die MS-DOS Kommandozeile. Wählen sie dazu

START >> Programme >> MS-DOS Eingabeaufforderung.

Es erscheint das DOS-Fenster mit der Meldung:

C:\WINDOWS>

und wartet auf unsere Eingaben.

Nun muss zuerst der Datenbankserver gestartet werden, der dann im Hintergrung weiterläuft.Geben sie ein:

C:\mysql\bin\mysqld

Merken sie sich jetzt schon einmal, dass man am Ende der Arbeit diesen Server auch wieder kor-

rekt herunterfahren muss:

C:\mysql\bin\mysqladmin -u root shutdown

Seite 26

MySQL starten

© Hans-Georg Beckmann 2006

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.

Seite 27

winmysqladmin

© Hans-Georg Beckmann 2006

Eine andere Methode, den Datenbankserver zu starten und auch

zu beenden besteht durch das schon erwähnte

winmysqladmin.exe, das ebenfalls im bin-Verzeichnis liegt und kei-

ne MS-DOS Kommandozeile braucht. Starten sie es durch einen

Doppelklick und für einen kurzen Moment erscheint ein Fenster,

das sich aber gleich wieder automatisch schließt. Es taucht dafür

ein kleines Symbol unten rechts auf, eine Ampel, die hoffentlich

grün leuchtet. Das zeigt an, dass der Datenbankserver korrekt

läuft.

Bei entsprechender Installation kann man dieses Programm auch

beim Starten von Windows automatisch mitstarten lassen.

Klicken sie auf die kleine Ampel und wählen sie aus dem Popupmenü "Show me".

Nun erscheint das komplette Fenster in dessen oberer Zeile eine ganze Reihe von Reitern zu se-

hen ist. Klicken sie auf DATABASES und sehen sie, welche Datenbanken jetzt aktiv sind.

Mit einem Klick auf die rechte Maustaste erhält man kontextabhängige Klappmenüs und kann

mit "Hide Me" das Fenster auch wieder verstecken.

Seite 28

Datenbank anlegen

© Hans-Georg Beckmann 2006

Das WinMySQLAdmin Fenster

Dieses Programm erlaubt später auch einen Blick auf die innere Struktur der Datenbanken und

wir werden es dann auch benutzen. Schließt man das Programm, dann wird auch der Daten-

bankserver heruntergefahren.

3.Schritt: Erstellen einer neuen Datenbank mit mysql

Rufen sie wieder die MS-DOS -Eingabeanforderung auf. Es soll jetzt eine Datenbank mit dem

Namen SCHULE eingerichtet werden.

C:CD:\mysql\bin

und C:\mysql\bin> mysqladmin -u root -p create schule

Mit dem Befehl CREATE wird mysqladmin augefordert, die Datenbanbk SCHULE zu erzeugen.

Das kann man auch mit winmysqladmin machen, wenn man mit einem Klick auf die rechte Maus-

taste ein Kontextmenü erscheinen lässt, das als obersten Punkt "Create Database" enthält.

Es erscheint dann ein Dialogfenster, in dem man den Namen der Datenbank angeben kann.

Welche Methode man auch wählt, MySQL legt eine neue Datenbank an, die noch nichts enthält.

Seite 29

Datenbank anlegen

© Hans-Georg Beckmann 2006

Wenn man danach im Eingabefenster mysql startet und den Befehl

C:\mysql\bin>mysql

und dann mysql > use schule;

eingibt, bekommt man hoffentlich von MySQL einige Begrüßungszeilen zu sehen und mitge-

teilt, dass nun die Datenbank SCHULE in Benutzung ist.

In der Datenbank SCHULE sollen jetzt die Tabellen angelegt werden. Das sind ( wie im vorange-

gangenen Kapitel schon besprochen ) die Tabellen SCHUELER, KURSE und HATKURS.

( Hier nur in GROSSBUCHSTABEN , damit es dem Leser / der Leserin auch auffällt, dass dieses

Tabellen zu erstellen sind).

Für das Anlegen von Tabellen hat MySQL auch einige Anweisungen vorgesehen, die jetzt pro-

biert werden.

Durch use schule ist dafür gesorgt, dass die Tabellen der Datenbank SCHULE zugeordnet

werden. Der Befehl CREATE TABLE erwartet, dass auch gleich die Attribute mitangegeben wer-

den.

Im Prinzip ist folgende Syntax zu beachten:

CREATE TABLE name_der_Tabelle ( Attributname1 TYP , Attributname2 TPY ,......);

Im obigen Beispiel sind also die Attribute KHJ, KURSTHEMA, KURLEHRERKURZ, KURSART

und KURSNUMMER definiert worden, wobei nur das Kurshalbjahr ein Integer ist und alle an-

deren Attribute Strings aus Buchstaben sind.

Wenn alles geklappt hat, erhält man eine Meldung der Art "Query OK"

Seite 30

Tabellen anlegen

© Hans-Georg Beckmann 2006

(6) ,

Machen sie keinen Tippfehler, sonst darf man alles noch einmal eingeben. Die Pfeile vor den Zei-

len macht übrigens das System von selbst, wenn man ein Return eingibt. Es ist ein Zeichen dafür,

dass MySQL eine noch nicht fertige Eingabe vorfindet. Erst, wenn ein Semikolon am Ende er-

scheint, gilt der Befehl als eingegeben. Genauso erzeugt man die Tabelle SCHUELER.

Fehlt also noch die Tabelle HATKURS, die genauso erzeugt wird.

Seite 31

Tabellen anlegen

© Hans-Georg Beckmann 2006

(20)

(20)

(6) ,

Der Befehl show tables;

zeigt dann, welche Tabellen jetzt in der Datenbak enthalten sind:

Damit sind die drei Relationen in der Datenbank festgelegt. Natürlich kann man Tabellen auch

wieder löschen, das interessiert aber im Moment noch nicht.

Die Struktur der Tabellen kann man mit dem EXPLAIN -Befehl anzeigen lassen.

Probieren sie folgende Eingabe:

explain hatkurs;

Nun wird die Tabellenstruktur angezeigt:

Genauso geht das mit der Tabelle kurse:

Seite 32

Tabellenstruktur sehen

© Hans-Georg Beckmann 2006

(6) (20)

(6)

Auf das Explain für die letzte Tabelle verzichten wird hier.

Ein Problem ist aber nun offensichtlich die Dateneingabe. Es ist klar, dass in MySQL nun auch in

die Tabellen Daten direkt eingegeben werden können. Bei dieser Benutzeroberfläche ist das aber

kein Vergnügen. Wenn man weiter bedenkt, dass dabei doch nur einige wenige "Spieldaten" in

die Tabellen kommen, dann wird einzusehen sein, dass hier ein Datenimport her muss.

Zu den Daten muss man aber einige Vorbemerkungen machen.

Sie, die sie dieses Script lesen, sollen die Dateien übernehmen können. Dazu gäbe es mehrere

Möglichkeiten.

1) Man könnte sie als fertige MySQL-Tabellen zur Verfügung stellen.

Das soll aber nicht sein, damit sie den Datenimport selbst probieren können.

2) Man kann die Textdateien zur Verfügung stellen.

Genau das ist die Absicht. Die Textdateien sind im Internet auf dem , Server zu finden, auf dem

auch dieses Script liegt.

Wenn das nicht der Fall sein sollte, dann bitte eine mail an: [email protected]

und die Dateien können zugeschickt werden.

Die Daten müssen als Textdateien vorliegen, in denen die einzelnen Datensätze durch ein

RETURN voneinander getrennt sind und die einzelnen Felder ( Attribute) innerhalb eines Daten-

satzes durch Tabulatoren. Alle linearen Datenbankprogramme, aber auch Tabellenkalkulations-

programme eröffnen die Möglichkeiten, Daten in der angegebenen Form als "Text mit Tab" zu

exportieren.

Die Daten, die wir gleich importieren wollen, liegen also in drei Textdateien vor und werden in

das Verzeichnis kopiert, in dem sich auch die Dateien der Datenbank SCHULE befinden.

Die Textdateien heissen: schueler.tab , kurse.tab und hatkurs.tab

Die Daten haben etwas besonders an sich : sie sind echt !

Das ist eine Seltenheit und sollte sie nun auch entsprechend beeindrucken. Die Daten stammen

aus einer echten Abiturdatei, die in einer einzigen Tabelle zusammengefasst ist. Diese Original-

datei enthält alle relevanten Schülerdaten vom 11. Jahrgang bis zum Abitur.

Seite 33

Daten importieren

© Hans-Georg Beckmann 2006

Mit dieser Datei werden Zeugnisse und Schulbescheinigungen, Statistikerhebungen und Abitur-

zulassungen, Listen und Abiturzeugnisse erstellt und verwaltet. Zusammen hat ein Datensatz

mehr als 900 (!) Felder.

Diese Monsterdatei wird mit dem Programm Filemaker verwaltet. Filemaker erlaubt es, bei der

Definition von Feldinhalten mit Formeln und Auswertungen zu arbeiten, auf andere Dateien zu-

zugreifen und die ausgewählten Daten in sogenannten Layouts zu organisieren und darzustel-

len. Weiterhin kann die Arbeit in der Datenbank automatisiert oder mit einer Scriptsprache pro-

grammiert werden.

( Der Umgang mit dieser Datenbank wurde während der Arbeitstagung im Juni 2002 in Göttin-

gen demonstriert. Das Scriptum dazu liegt als Material vor.)

Ein kleiner Aussschnitt ist oben zu sehen und gibt einen Eindruck von der Größe der ursprüngli-

chen Datenbank.

Dieses Datenmonstrum ruft danach, normalisiert zu werden. Ein wenig davon wollen wir ja lei-

sten.

Seite 34

Daten importieren

© Hans-Georg Beckmann 2006

Attribute der Schülerdatei aus Filemaker

Alle Daten wurden für die Tabelle SCHUELER anonymisiert. Alle Namen wurden verändert,

alle Geburtsdaten wurden verändert. Alle Anschriften und sonstigen persönlichen Daten wur-

den verändert. Geschlecht, Alter, Kurswahlen, Noten und weitere Daten wurden erhalten.

In der Tabelle für die KURSE wurden die Lehrernamen und Namenskürzel verändert, Kursnum-

mern und Themen und Noten blieben jedoch erhalten.

Es wurde ein Abiturjahrgang gewählt, der bis auf die zweite Stelle nach dem Komma dem Lan-

desdurchschnitt (Niedersachen) entsprach.

Mit legalen Mitteln wäre es nicht möglich, die Daten den real existierenden Schülern zu zuord-

nen.

In der Tabelle HATKURS tauchen ID-Nummer und Kursnummer auf, die so auch in den ande-

ren beiden Tabellen zu sehen sind.

In den Textdateien, die man nun importieren will, müssen die Daten so organisiert sein, dass

beim Einlesen auch die richtigen Felder den richtigen Attributen der Tabellen zugeordnet wer-

den. Wenn man das sicher gestellt hat, reicht ein MySQL-Befehl aus, um den Datenimport zu

realisieren.

LOAD DATA INFILE erwartet als Parameter den Namen der Textdatei in Hochkomma (" ") und

eine Angabe darüber, in welche Tabelle der Datenbak eingelesen werden soll. Bei der Angabe der

Tabelle ist zu beachten, dass der Datenbankname gefolgt von einem Punkt gefolgt vom Tabellen-

namen angegeben wird.

Wenn alles geklappt hat, wird man mit einer netten Meldung des Systems belohnt. Dabei sollte

man sich nicht irritieren lassen, wenn es auch eine Reihe von Warnungen gegeben hat.

Seite 35

Daten importieren

© Hans-Georg Beckmann 2006

Nun bleibt aber die berechtigte Sorge, ob denn auch alle Daten so angekommen sind, wie wir

das wollten. Es muss also mal in die Datenbank hineingeschaut werden.

Probieren sie

mysql> select * from schule.schueler;

oder

mysql > select * from schueler;

Sie sollten nun alle Datensätze zu sehen bekommen:

Die Form, in der man den Inhalt der Datei sieht ist hier recht unschön, da die vielen Attribute

nicht in eine Zeile passen und daher auf mehrere Zeilen verteilt werden.

Versuchen sie auch

mysql > select * from kurse;

Seite 36

Daten anschauen

© Hans-Georg Beckmann 2006

Das sieht dann schon etwas besser aus, weil nicht ganz so viele Attribute auftauchen.

Der Stern (* ) hinter SELECT besagt, dass alle Attribute der Tabelle dargestellt werden. Will man

nur einige Attribute sehen, muss man genau angeben, welche:

Probieren sie

mysql > select Name,Vorname from schueler;

Das sieht doch schon ganz anders aus !

Probieren sie nun:

mysql > select kursthema,khj

from kurse where kurslehrerkurz="Cq";

Hier wird noch eine weitere Einschränkung vorgenommen: Jetzt sollen aus der Tabelle KURSE

die Attribute KURSTHEMA und Kurshalbjahr (KHJ ) angezeigt werden, mit der Bedingung, dass

das Lehrerkürzel ( KURSLEHRERKURZ ) dem Textstring "Cq" entspricht.

Das ist eine Auswahl ,die schon recht übersichtlich ist, wie man sehen kann.

Seite 37

Auswahl mit SELECT

© Hans-Georg Beckmann 2006

"Cq"

Die SELECT - Anweisung erlaubt es also, aus einer Tabelle mit bestimmten Suchbedingungen

Datensätze herauszufiltern und von diesen ausgewählte Attribute darzustellen.

Weitere Beispiele für SELECT:

Man kann die Anzahl von Datensätzen in einer Tabelle mit COUNT(*) festellen lassen.

Probieren sie es auch mit den andere Tabellen aus.

Man kann Abfragen mit einem logischen UND verbinden. Die Teile der Abfrage stehen dabei in

Klammern und natürlich ist es das englische AND, das man verwenden muss.

Wir suchen z.B. alle Kurse des zweiten Kurshalbjahres, die vom Lehrer mit dem Kürzel "Cq" an-

geboten wurden.

Es waren zwei Kurse.

Genauso sind Verknüpfungen mit OR und NOT möglich.

Unscharfe Suche

Nicht immer müssen Attributwerte exakt angegeben werden.

Der Befehl

select * from kurse where kursnummer like "M%" ;

würde aus der Tabelle Kurse alle die Datensätze finden, deren Kursnummer mit einem M be-

Seite 38

Auswahl mit SELECT

© Hans-Georg Beckmann 2006

ginnt. Das dürften dann Mathematik- und Musikkurse sein. Das % - Zeichen ist hier ein Platzhal-

ter, der die unscharfe Suche möglich macht.

Suche in Bereichen

Kann man bei einem Attribut einen Bereich angeben, dann ist eine Abfrage wie die folgende

möglich:

select * from kurse where KHJ between 2 and 4

Hier werden also alle Kurse gesucht, die im zweiten bis vierten Kurshalbjahr angeboten wurden.

Das wäre auch mit

select * from kurse where (KHJ>1) and (KHJ <=4) ;

möglich gewesen.

Verknüpfen von Tabellen

Bevor wir nun zwei Tabellen miteinander verknüpfen, müssen einige Änderungen vorgenom-

men werden. Es sollen die Tabellen Schueler und Hatkurs mithilfe der ID_Nummer abgeglichen

werden. Dazu muss in der Tabelle das eindeutige Feld ID_Nummer als Primärschlüssel dekla-

riert werden. Das hätte man schon bei dem CREATE-Befehl mit einbauen können. Nun kommt

es aber erst jetzt.

Im ersten Schritt ist es Voraussetzug, das Feld ID_Nummer als nicht Null ( NOT NULL) festzu-

legen, denn leere Felder taugen nicht als Schlüsselfeld.

Der Befehl, mit dem das geht ist ALTER TABLE:

Geben sie ein:

alter table schueler modify ID_Nummer char(20) not null;

Nun wird der Primärschlüssel erklärt:

alter table schueler add primary key(ID_Nummer);

Die Tabellen schueler und hatkurs haben das gemeinsame Feld ID_Nummer, mit dem nun gear-

Auswahl mit SELECT

© Hans-Georg Beckmann 2006

Seite 39

beitet wird.

Nun sollen Name und Vorname und Kursnote aller Schülerinnen und Schüler gesucht werden,

die im Kurs mit der Kursnummer "Ma 11L" sind.

Der SELECT - Befehl ist:

Hinter SELECT werden durch Komma getrennt alle Attribute angegeben, die man sehen will. Da

sie aus verschiedenen Tabelle stammen, wird jeweils die Tabelle mitangegeben - also etwa

schueler.vorname und hatkurs.note. Dann kommt das Schlüsselwort FROM und dahinter durch

Komma getrennt die beiden beteiligten Tabellen.

Dann kommt die WHERE - Bedingung. In der ersten Klammer wird die Verknüpfung herge-

stellt, wenn es heißt:

schueler.id_nummer = hatkurs.id_nummer

Die zweite Klammer enthält die Filterbedingung

für die Tabelle. Es werden nur die Datensätze ge-

nommen, die der Kursnummer Ma 11 gehorchen.

Man erhält schon ein nettes Ergebnis, wie zu se-

hen ist.

Hätte man sich die Kursnummer mit ausgeben

lassen, hätte man gemerkt, dass sowohl der Ma-

theleistungskurs mit der Nummer Ma 11 als auch

der Grundkurs mit der Nummer ma 11 aufgelistet

ist. Das hat damit zu tun, das SQL keine Gross-

und Kleinschreibung unterscheidet. Aber da gab

es ja noch ein Feld Kursart, mit dem man weiter

filtern könnte...

Auswahl mit SELECT

© Hans-Georg Beckmann 2006

Seite 40

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.

Auswahl mit SELECT

© Hans-Georg Beckmann 2006

Seite 41

Weitere Beispiele

Im Abschnitt "Datenbanken 2" sind SQL-Abfragen behandelt, die ebenfalls auf der Datenbank

"Schule" beruhen. Daraus zwei Beispiele:

Mit SELECT AVG(Feldname) kann man den Durchschnittswert eines Attributs einer Tabelle aus-

geben lassen. Versuchen sie herauszufinden, ob Mädchen im Matheunterricht benachteiligt wer-

den:

Bei einer Durchschnittsnote von 7,7 können wir nun streiten. Das aber erst, wenn sie auch unter-

sucht haben, wie es mit der Durchschnittsnote der Jungen aussieht.

Schauen sie doch auch mal in den Leistungskursen vorbei:

Als Ergänzung ist auf den nächsten Seiten noch einmal das Übungsmaterial von Fabian Meyer

zu finden, das weitere Aufgaben un d Beispiele enthält.

Seite 42

Auswahl mit SELECT

© Hans-Georg Beckmann 2006

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

I D_Nummer char(20)Kursnummer Note

char(5)char(2)

Punkte i nt(11)

Seite 43

Übungen zu SQL

© Fabian Meyer 2002

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:

SELECT Schueler.Name, Schueler.Vorname, hatkurs.Kursnummer

FROM Schueler, hatkurs

WHERE Punkte = 15

AND hatkurs.ID_Nummer = Schueler.ID_Nummer;

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

Seite 44

Übungen zu SQL

© Fabian Meyer 2002

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:

SELECT s.Name, s.Vorname, s.Geschlecht, k.kursnummer, k.kursthema

FROM Schueler s, kurse k, hatkurs h

WHERE h.Punkte = 15

AND h.ID_Nummer = s.ID_Nummer

AND h.kursnummer = k.kursnummer

AND k.kursart='L';

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.

Seite 45

Übungen zu SQL

© Fabian Meyer 2002