Upload
others
View
6
Download
0
Embed Size (px)
MySQL
M. Sabath
17. August 2007
MySQL Inhaltsverzeichnis
Inhaltsverzeichnis
1 Informationen zu MySQL 4
1.1 Verwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Verbindung zu MySQL 5
2.1 Vorbereitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Pfadangabe unter Windows . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 Probleme mit Umlauten . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Mit dem Server verbinden . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 Abfragen an eine Datenbank 7
3.1 Vorbereitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Arbeiten mit Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.1 Backup einer Datenbank . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.2 Wiederherstellen einer Datenbank . . . . . . . . . . . . . . . . . 8
3.3 Abfragen stellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3.1 Anzeigen aller Datenbanken . . . . . . . . . . . . . . . . . . . . . 8
3.3.2 Auwahl einer Datenbanken . . . . . . . . . . . . . . . . . . . . . 9
3.3.3 SELECT Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3.4 ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3.5 LIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3.6 AS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3.7 COUNT() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3.8 DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3.9 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.4 Bedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.5 Abfragen gruppieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
M. Sabath 2
MySQL Inhaltsverzeichnis
3.6 Mustervergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6.1 LIKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6.2 REGEXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.7 Datens�tze l�schen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.8 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.8.1 Allgemein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.8.2 Wie lautet die entsprechende Anweisung . . . . . . . . . . . . . . 15
3.8.3 Wie lautet die entsprechende Frage . . . . . . . . . . . . . . . . . 15
3.8.4 Sonstiges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 L�sungen 18
4.1 Aufgaben 3.3.9 Seite 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2 Aufgaben 3.8.2 Seite 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Aufgaben 3.8.3 Seite 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.4 Aufgaben 3.8.4 Seite 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
M. Sabath 3
MySQL 1 Informationen zu MySQL
1 Informationen zu MySQL
1.1 Verwendung
Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-
munications, Los Alamos Natinal Labs, Lycos, NASA, Sony, Suzuki, Wikipedia und
Yahoo.1
1nach Michael Ko�er in MySQL 5, 3. Au�age, ADDISON-WESLEY
M. Sabath 4
MySQL 2 Verbindung zu MySQL
2 Verbindung zu MySQL
2.1 Vorbereitungen
2.1.1 Pfadangabe unter Windows
Um eine Verbindung mit MySQL herzustellen nutzen wir das Programm mysql ,
welches sich im bin Verzeichnis /xampplite/mysql/bin be�ndet. Der Zugri� auf
mysql erfolgt �ber ein Konsolefenster. Da bei uns MySQL nicht standardm��ig
installiert ist, be�ndet sich das bin Verzeichnis nicht im Pfad. D.h. man m�sste
jedesmal in das Verzeichnis wechseln um damit arbeiten zu k�nnen. Einfacher ist es
die Pfadangabe mit folgendem Befehl zu �ndern1:
path=%path%;e:\xampplite\mysql\bin
Die �nderung der Pfadangabe bezieht sich nur auf das momentan ge��nete Fenster.
2.1.2 Probleme mit Umlauten
kommt noch
2.2 Mit dem Server verbinden
mysql -u username -p
Dies ist einfachste M�glichkeit, sich mit dem Server zu verbinden. Auf den ersten
Blick hat sich nicht viel ge�ndert. Nur das Prompt, es lautet jetzt mysql> . Jetzt
kann es losgehen, die Verbindung steht. Nachstehend eine Tabelle mit Befehlen, die
eine informative Interaktion mit dem Server erlauben. Es ist darauf zu achten, dass
1Die Pfandangaben entsprechend den Gegebenheiten anpassen.
M. Sabath 5
MySQL 2 Verbindung zu MySQL
jeder Befehl mit einem ; abgeschlossen wird.
Kurzbefehl Befehl Erkl�rung
\? help zeigt eine Liste aller Kommandos an
\G ego zeigt Ergebnis vertikal an
\T tee dateiname schreibt alle Ein- und
Ausgaben in die angegeben Datei
\t notee beendet Ausgabe in eine Datei
\q quit beendet die aktuelle Verbindung
\. source dateiname f�hrt SQL Befehle einer Textdatei aus
\u use datenbankname nutzt die angegeben Datenbank
Aufgaben
1. Lass dir mit show databases; alle vorhandenen Datenbanken anzeigen.
2. Schreibe die Ausgabe der Datenbanken in eine Datei datenbanken.sql .
3. W�hle die Datenbank musikcds .
4. Lass dir mit show tables; alle Tabellen anzeigen.
5. Lass dir mit select * from alben alle Titel anzeigen und schreibe sie in die
Datei lieder.sql .
6. Beende die Verbindung zum Server und verbinde dich erneut.
7. Nutze eine sql Befehlsdatei um Aufgabe 5-7 erneut zu l�sen.
8. Exportiere mit Hilfe von phpMyAdmin die gesamte Datenbank musikcds in
eine sql-Datei.
9. �ndere in dieser Datei den Namen2 der Datenbank in musikcds2 und impor-
tiere sie mit Hilfe von mysql source .
2 Achtung nicht in Notepad den Namen der Datenbank �ndern. Nutze ein Schreibprogramm wie
Word, oder Writer. Anschlieÿend als reine Textdatei speichern. Bei �nderungen mit Notepad
erhaltet ihr ansonsten eine Fehlermeldung. Dies liegt an der unterschiedlichen Behandlung von
Zeilenumbr�chen. Neue Anfragen k�nnen hingegen problemlos mit Notepad erstellt werden.
M. Sabath 6
MySQL 3 Abfragen an eine Datenbank
3 Abfragen an eine Datenbank
3.1 Vorbereitung
Beim Erlernen von MySQL ist sinnvoll die Anfragen an und die Antworten vom Ser-
ver mit protokollieren zu lassen. Um den Tippaufwand zu minimieren kann man die
Anfragen in einer normalen Textdatei speichern und von dort mit mysql einlesen.
Bei allen folgenden Anfragen an den Server gehe ich davon aus, dass sich die Kom-
mandos in einer Datei f:\mysql\abfragen.sql be�nden. Zum Protokollieren der
Ausgaben des Servers bietet nutzen wir die \T bzw. die \t Option zum Star-
ten und Beenden der Protokollfunktion von MySQL. Alle Ausgaben sollen in dem
Verzeichnis f:\mysql\ausgaben gespeichert werden.D.h. um dies alles zum Laufen
zu bringen m�sst ihr als erstes eine Textdatei abfragen.sql erstellen (die En-
dung sql spielt keinen Rolle, ihr k�nnt auch txt oder etwas anderes nehmen. Wich-
tig ist nur, dass es eine reine Textdatei ist). In mysql gebt ihr dann folgendes ein:
source f:\mysql\abfragen.sql 1. Kommentare k�nnen in der Datei mit - -
angegeben werden. ACHTUNG: Keinen Strichpunkt hinter diesem Kommando! 2
Es ist darauf zu achten in einer solchen Textdatei die Befehle show databases und
use datenbankname nicht miteinander zu verwenden, da dies zu einer Fehlermel-
dung f�hrt. Am besten beiden Befehle aus einer Textdatei herauslassen und direkt
eingeben.
1 Der Pfad zu der Datei braucht nicht getippt zu werden. Es gen�gt die Datei per Drag and Drop
�ber das Konsolefenster zu ziehen.2 Ab hier unbedingt beachten wann und wo ein Semikolon gesetzt wird.
M. Sabath 7
MySQL 3 Abfragen an eine Datenbank
3.2 Arbeiten mit Datenbanken
3.2.1 Backup einer Datenbank
Um ein Backup einer Datenbank zu erstellen bietet MySQL ein separates Programm
mysqldump. Um ein Backup der Datenbank musikcds zu erstellen gibt man in der
Komandozeile ein: mysqldump -u username -p musikcds > textdateiname.sql .
Be�ndet sich die Datenbank auf einem anderen Rechner wird die Option -h ben�tigt:
mysqldump -h rechnername -u username -p musikcds > musikcdsBackup.sql .
3.2.2 Wiederherstellen einer Datenbank
Zum Wiederherstellen einer Datenbank, wird die Ausgabedatei von mysqldump in
die entsprechende Datenbank eingelesen. Existiert die Datenbank noch nicht, kann
mit create database datenbankname; die Datenbank erstellt werden.
3.3 Abfragen stellen
3.3.1 Anzeigen aller Datenbanken
Der Inhalt der Datei abfragen.sql lautet:
- - folgender Befehl zeigt alle Datenbanken an und speichert die Ausgabe in der Datei ausgabe01.txt
\T f:\mysql\ausgaben\ausgabe01.txt
show databases; 3
\t
In der mysql> Konsole wird folgendes eingegeben:
source f:\mysql\abfragen.sql;
3 Mit show tables werden alle enthaltenen Tabellen einer gew�hlten Datenbank angezeigt.
M. Sabath 8
MySQL 3 Abfragen an eine Datenbank
3.3.2 Auwahl einer Datenbanken
Der Inhalt der Datei abfragen.sql lautet4:
- - whlt die Datenbank "musikcds" als Defaultdatenbank, alle Meldungen werden in der Datei ausgabe02.txt gespeichert
\T f:\mysql\ausgaben\ausgabe02.txt
use musikcds;
\t
In der mysql> Konsole wird folgendes eingegeben:
source f:\mysql\abfragen.sql;
3.3.3 SELECT Anweisung
Wie das Wort schon ausdr�ckt, kann mit der SELECT Anweisung etwas ausgew�hlt
werden. Die einfachste Auswahl bezieht sich auf alle Inhalte einer Datenbank.
- - alle Eintrge in der Tabelle werden in der Datei ausgabe03a.txt gespeichert
\T f:\mysql\ausgaben\ausgabe03a.txt
SELECT * FROM alben;
\t
Bei einer Auswahl von einigen Spalten werden diese mit Komma voneinander getrennt
angegeben 5.
- - Eintrge 1-x Spalten einer Tabelle werden in der Datei ausgabe03b.txt gespeichert
\T f:\mysql\ausgaben\ausgabe03b.txt
SELECT vorname, nachname FROM alben;
\t
In allen folgenden Anfragen werde ich auf die Angaben zum Protokollieren der Ausga-
ben von mysql verzichten um nicht von der eigentlichen Anfrage abzulenken.
4 Es ist sinvoll vorherige Befehle nicht zu l�schen, sondern mit � � auszukommentieren.5 Diese Vorgehenweise ist zu bevorzugen um unn�tigen Rechenaufwand zu vermeiden.
M. Sabath 9
MySQL 3 Abfragen an eine Datenbank
3.3.4 ORDER BY
Ergebnisse von SELECT Anfragen werden in einer zuf�lligen Reihenfolge ausgegeben.
Eine Sortierung kann mit Hilfe von ORDER BY alphabetisch sortiert werden.
SELECT vorname, nachname FROM alben ORDER BY nachname; ausgabe04a.txt
Hier werden alle gefundenen Datens�tze alphabetisch nach dem Nachnamen sortiert.
Soll absteigend sortiert werden muss das Schl�sselwort DESC hinzugef�gt werden.
SELECT vorname, nachname FROM alben ORDER BY nachname DESC;
ausgabe04b.txt
Die Sortierung kann auch �ber mehrere Spalten erfolgen.
SELECT vorname, nachname FROM alben ORDER BY nachname DESC,vorname DESC;
ausgabe04c.txt
3.3.5 LIMIT
Unter Umst�nden werden sehr viele Datens�tze gefunden. Um an �bersichtlichkeit
oder Rechenzeit zu gewinnen k�nnen die angezeigten Datens�tze limitiert werden.
Dazu wird der Befehl LIMIT anzahl bzw. LIMIT start6,anzahl verwendet.
Folgende Anfrage stellt von allen gefundenen Datens�tzen 20 dar, beginnen bei dem
15. Datensatz alphabetisch absteigend geordnet.
SELECT nachname,titel FROM alben ORDER BY titel DESC LIMIT 15,20;
ausgabe05.txt
3.3.6 AS
Mit dem Schl�sselwort AS k�nnen Spalten Aliasnamen vergeben werden. Mit der
nachfolgenden Anfrage wird der Spalte nachname die Spalten�berschrift Interpret
zugeordnet, alphabetisch sortiert und von allen Ergebnissen werden 10 angezeigt be-
ginnend beim f�nften Datensatz.
6 Nach diesem Datensatz wird begonnen.
M. Sabath 10
MySQL 3 Abfragen an eine Datenbank
SELECT nachname AS Interpret,titel FROM alben
ORDER BY Interpret DESC,titel LIMIT 200,30;
ausgabe06.txt
3.3.7 COUNT()
Es wird nur die Anzahl aller gefundenen Datens�tze ausgegeben.
SELECT COUNT(*) FROM alben; ausgabe07a.txt
SELECT COUNT(vorname) FROM alben; ausgabe07b.txt
Eine Abfrage SELECT COUNT(vorname,nachname) FROM alben; funktioniert
nicht.
3.3.8 DISTINCT
Mehrfach gefundene Datens�tze werden nicht mitgez�hlt. Kann nicht auf * oder
mehrere Spalten angewendet werden.
SELECT COUNT(DISTINCT vorname) FROM alben; ausgabe08.txt
3.3.9 Aufgaben
1. �berlege, ob es momentan schon gelingen kann Aussagen �ber die Anzahl
der Datens�tze mit bzw. ohne Vor-, Nachnamen zu tre�en, oder ob es schon
m�glich die Anzahl der doppelt vorhandene Datens�tze zu nennen.
2. SELECT COUNT(*) FROM alben; liefert die Anzahl aller Musiktitle.
SELECT COUNT(nachname) FROM alben; liefert die Nachnamen der Inter-
preten unter Ausschluÿ von Mehrfachnennungen. Liefert nachfolgende Kombina-
tion von beiden die durchschnittliche Anzahl von Titeln?
M. Sabath 11
MySQL 3 Abfragen an eine Datenbank
SELECT COUNT(*)/COUNT(nachname) FROM alben; 7
3.4 Bedingungen
Eine Datenbank nutzt nicht sehr viel, wenn man nicht nach Datens�tzen suchen kann,
die eine bestimmte Bedingung erf�llen. Um Bedingungen mit einer Anfrage an die
Datenbank zu stellen gibt es in MySQL das Schl�sselwort WHERE . Sollen Berechnete
Felder (z.B. COUNT) mit ber�cksichtigt werden muss anstelle von WHERE HAVING
verwendet werden.
Folgende Vergleichsoperatoren stehen zur Verf�gung:
Operator Erkl�rung
= Gleichheit (nicht gegen NULL)
!= <> Ungleichheit
< > <= >= kleiner, gr�ÿer, kleiner bzw. gr�ÿer gleich
BETWEEN Bereichsvergleich (x BETWEEN 5 AND 10)
IN Mengenvergleich (a IN (’fad’,’der’,’wrt’))
NOT IN Mengenvergleich
Mit Operatoren wie AND oder OR k�nnen mehrere Bedingungen miteinander verkn�pft werden.
Hier einige Beispiele:
1. SELECT vorname,nachname FROM alben WHERE nachname=’spears’;
ausgabe09.txt
2. SELECT vorname,nachname FROM alben
WHERE nachname=’spears’ AND vorname=’britney’;
ausgabe10.txt
7 L�sungen Seite 18
M. Sabath 12
MySQL 3 Abfragen an eine Datenbank
3. SELECT vorname,nachname,titel FROM alben
WHERE nachname=’spears’ AND vorname=’britney’ ORDER BY titel;
ausgabe11.txt
3.5 Abfragen gruppieren
Ergebnisse k�nnen mit dem Befehl GROUP BY gruppiert werden. Dabei k�nnen
beliebige Spalten zu einer Gruppe zusammengefasst werden. Diese M�glichkeit ist
wichtig um doppelt vorhandene Datens�tze aus�ndig zu machen. Wie jedoch das Er-
gebnis der nachfolgenden Anfrage zeigt, macht das Verwenden von GROUP BY alleine
keinen Sinn.
SELECT vorname,nachname FROM alben
WHERE nachname=’spears’ AND vorname=’britney’ GROUP BY nachname;
ausgabe12.txt
Hier kommen die sogenannten Aggreagtsfunktionen zum Einsatz. Innerhalb des SELECT
Kommandos k�nnen Funktionen wie COUNT, SUM, MIN und MAX verwendet wer-
den.
SELECT vorname,nachname,COUNT(titel)AS Titelanzahl FROM alben
WHERE nachname=’spears’ AND vorname=’britney’ GROUP BY nachname;
ausgabe13a.txt Mit dieser Anfrage wird die Anzahl der Titel eines Interpreten ermittelt.
SELECT vorname,nachname,COUNT(titel)AS Titelanzahl FROM alben
GROUP BY nachname,vorname;
ausgabe13b.txt Mit dieser Anfrage wird die Anzahl der Titel jedes einzelnen Interpreten ermittelt.
Soll die verwendete Aggregatsfunktion selbst als Basis der Gruppierung dienen, muss
anstelle von WHERE das Schl�sselwort HAVING verwendet werden. Es sollen bei-
spielsweise alle Interpreten aufgelistet werden, mit mehr als 25 Titeln.
SELECT vorname,nachname,COUNT(titel)AS Titelanzahl FROM alben
M. Sabath 13
MySQL 3 Abfragen an eine Datenbank
GROUP BY nachname,vorname HAVING Titelanzahl >25;
ausgabe14.txt
3.6 Mustervergleich
3.6.1 LIKE
Soll das Ergebnis einer Abfrage nicht genau einem Suchkriterium entsprechen, gibt es
die M�glichkeit mit Hilfe von LIKE und den beiden Platzhaltern %,_ eine Abfrage
�exibler zu gestalten. % steht f�r beliebig viele Zeichen und _ f�r ein beliebiges
Zeichen.
SELECT nachname FROM alben WHERE nachname LIKE ’%m%’ .
Alle Datens�tze, die in der Nachnamenspalte ein m enthalten werden aufgelistet.
SELECT nachname FROM alben WHERE nachname LIKE ’m%’ .
Alle Datens�tze, die in der Nachnamenspalte mit einem m beginnen werden aufgelis-
tet.
SELECT nachname FROM alben WHERE nachname LIKE ’____’ .
Alle Datens�tze, in denen der Nachname aus vier Buchstaben besteht werden aufge-
listet.
3.6.2 REGEXP
kommt nicht mehr dran
3.7 Datens�tze l�schen
DELETE lautet das Zauberwort. Es ist mit �uÿerster Vorsicht zu genieÿen. Was ein-
mal gel�scht ist kann nicht wiederhergestellt werden. Deshalb ist es ratsam erst mit
einer SELECT Anweisung zu �berpr�fen, ob die richtigen Datens�tze ausgew�hlt
M. Sabath 14
MySQL 3 Abfragen an eine Datenbank
werden.
DELETE FROM alben WHERE nachname LIKE ’____’ .
Alle Datens�tze, in denen der Nachname aus vier Buchstaben besteht werden gel�scht.
DELETE FROM alben WHERE nachname=’spears’ AND vorname=’britney’ .
Alle Datens�tze von Britney Spears werden gel�scht.
3.8 Aufgaben
3.8.1 Allgemein
1. Erstelle ein Backup der Datenbank musikcds vom Lehrerrechner.
2. F�ge die Inhalte dieser Datei in eine Datenbank uebung ein.
3.8.2 Wie lautet die entsprechende Anweisung
1. Wie viel Titel sind von Williams Keller?
2. Zeige alle Lieder an, deren Spieldauer weniger als 1 Minute, sowie Tracknummer
gleich 2 ist.
3.8.3 Wie lautet die entsprechende Frage
1. SELECT vorname,nachname, COUNT(titel) AS titelanzahl FROM alben WHE-
RE nachname='keller' AND vorname='williams' GROUP BY nachname;
2. SELECT vorname,nachname,track,zeit FROM alben WHERE track =2 AND
zeit < '01:00:00' ORDER BY zeit DESC;
3. SELECT vorname, nachname, count(titel) as Anzahl_Titel from alben group
by vorname, nachname having Anzahl_Titel<10 OR Anzahl_Titel>50 order
by nachname, vorname, Anzahl_Titel;
4. SELECT vorname,nachname FROM alben WHERE nachname='barry' AND
vorname='john' GROUP BY nachname;
M. Sabath 15
MySQL 3 Abfragen an eine Datenbank
5. SELECT vormane, nachname, titel FROM alben ORDER BY nachname, vor-
mane, titel;
3.8.4 Sonstiges
1. Suche alle doppelten Eintr�ge.
2. K�nnen wir momentan schon alle doppelten Eintr�ge per Anfrage l�schen?
(Bis auf einen).
3. L�sche einen doppelten Eintrag.
4. Wie viel Interpreten mit einem aus f�nf Buchstaben bestehenden Nachnamen
gibt es?
5. Gib alle Alben alphabetisch sortiert aus.
6. Wie viel Alben gibt es?
7. Wie viel Interpreten gibt es?
8. Wie viel Titel sind im Durchschnitt auf jedem Album?
9. Wie viel Titel hat ein Interpret im Durchschnitt ver��entlicht?
10. Wie lauten die alphabetisch letzten zehn Titel von Madonna?
11. Zeige die Titel 20 - 30 von allen alphabetisch sortierten Titeln mit deren Inter-
preten (alphabetisch sortiert).
12. Bei Welchen Interpreten beginnt der Nach- oder Vorname mit einem "K"?
13. Welche Interpreten haben ein "k" in ihrem Nach- oder Vornamen?
14. Welche Vornamen von Interpreten beginnen mit einem "M" oder einem spteren
Buchstaben?
15. Welche Titel haben die Tracknummer 2,4 oder 7? Mengenvergleich IN nutzen.
16. Zeige alle Vor- und Nachnamen der Interpreten ausser "Madonna".
17. Wie viel Alben hat jeder Interpret ver��entlicht?
M. Sabath 16
MySQL 3 Abfragen an eine Datenbank
18. L�sche die alphabetisch letzten 10 Titel von Madonna.
19. Warum sind L�schvorg�nge ohne eine WHERE Bedingung so gef�hrlich?
20. Wie lautet das Album der einzelnen Interpreten mit den meisten Titeln?
M. Sabath 17
MySQL 4 L�sungen
4 L�sungen
4.1 Aufgaben 3.3.9 Seite 11
1. Nein, zum momentanen Zeitpunkt kann noch keine Aussage �ber die Anzahl
der Datens�tze ohne Vor- bzw. Nachnamen getro�en werden, da wir bisher
nur feststellen k�nnen, dass es Datens�tze ohne Vor- oder Nachnamen gibt.
Ebensowenig k�nnen wir die doppelt vorhandenen Datens�tze heraus�ltern.
2. Nein, denn SELECT COUNT(*)/COUNT(nachname) FROM alben; liefert die
Anzahl der unterschiedlichen Nachnamen. Da aber einige Interpreten den glei-
chen Nachnamen haben stimmt die Anzahl der Interpreten somit nicht.
4.2 Aufgaben 3.8.2 Seite 15
1. SELECT vorname,nachname,COUNT(titel)AS Titelanzahl FROM alben
WHERE nachname=’Keller’ AND vorname=’Williams’ GROUP BY nachname;
2. Diese Anfrage kann nicht gestellt werden, da der Datentyp f�r die Spieldau-
er eines Titels falsch gew�hlt wurde (Wieso?). Somit sind keinerlei korrekten
Zeitberechnungen m�glich.
4.3 Aufgaben 3.8.3 Seite 15
1. Wie viel Titel sind von Williams Keller?
2. Diese Frage ergibt wenig Sinn, da nach Titeln mit einer Zeitdauer von unter 1 h
gesucht wird, was auf alle zutri�t. Ansonsten wird nach Titeln mit einer Track-
nummer = 2 gesucht. Das Ergebnis wird alphabetisch absteigend ausgegeben.
M. Sabath 18
MySQL 4 L�sungen
3. Hier wird nach Interpreten mit weniger als 10 oder mehr als 50 Titeln gesucht.
Das Ergebnis wird aplhabetisch sortiert. Zuerst nach Nachnamen, dann Vornah-
men und dann nach der Anzahl der Titel. Das Sortierennach Anzahl der Titeln
ergibt wenig Sinn, da es nicht sein kann, dass ein Interpret zwei verschiedene
Anzahlen von Titeln hat.
4. Hier wird kontrolliert, ob der Name in der Datenbank vorkommt. Versuche diese
Anfrage auch mit DISTINCT.
5. Von alle Datens�tze werden die Informationen �ber den Vornamen, Nachna-
men und den Titel ausgegeben. Sortiert nach Nachname, Vorname und Titel.
4.4 Aufgaben 3.8.4 Seite 16
1. SELECT vorname,nachname,titel, COUNT(*) as anzahl FROM alben
GROUP BY vorname, nachname, titel, zeit, track having anzahl
> 1;
2. Nein, zur Zeit k�nnen wir noch nicht alle doppelten Eintr�ge bis auf einen
l�schen. Dazu fehlen noch einige Techniken
3. Es muss gezielt ein Datensatz mit Informationen zu allen Spalten aus 1. gel�scht
werden.
SELECT *,COUNT(*)AS Anzahl FROM alben GROUP BY vorname,
nachname, titel, zeit, track having anzahl > 1;
Nun einen Datensatz aussuchen, z.B. den Titel von John Keech und mit einer
SELECT Anfrage �berpr�fen, ob er direkt angesprochen werden kann.
SELECT * FROM alben WHERE vorname=’John’ AND
nachname=’Keech’ AND album=’Desert Dreaming’ AND track=5
AND titel=’Sweet Vision of Rain’ LIMIT 1;
Es kann gel�scht werden:
DELETE FROM alben WHERE vorname=’John’ AND nachname=’Keech’
AND album=’Desert Dreaming’ AND track=5
AND titel=’Sweet Vision of Rain’ LIMIT 1;
M. Sabath 19
MySQL 4 L�sungen
4. SELECT vorname,nachname FROM alben WHERE nachname
LIKE "_ _ _ _ _" Group BY nachname, vorname;
oder
SELECT distinct nachname, vorname FROM alben
WHERE nachname LIKE "_ _ _ _ _";
5. SELECT distinct album FROM alben ORDER BY album;
6. SELECT count(distinct album) FROM alben;
7. SELECT count(distinct nachname, vorname)
AS AnzahlInterpreten FROM alben;
8. SELECT count(*)/count(distinct album)
AS TitelProAlbum FROM alben;
9. SELECT count(*)/count(distinct nachname, vorname)
AS TitelProInterpret FROM alben;
10. SELECT vorname, nachname, titel FROM alben
WHERE nachname=’Madonna’ ORDER BY titel DESC LIMIT 10;
11. SELECT vorname, nachname, titel FROM alben
ORDER BY titel LIMIT 19,11;
12. SELECT distinct vorname, nachname FROM alben
WHERE nachname LIKE ’K%’ OR vorname LIKE ’K%’;
13. SELECT distinct vorname, nachname FROM alben
WHERE nachname LIKE ’%K%’ OR vorname LIKE ’%K%’;
14. SELECT distinct vorname, nachname FROM alben
WHERE nachname >=’M’;
15. SELECT vorname, nachname, titel, track FROM alben
WHERE track IN (2,4,7);
M. Sabath 20
MySQL 4 L�sungen
16. SELECT distinct vorname, nachname FROM alben
WHERE nachname != ’Madonna’;
17. SELECT vorname, nachname, count(distinct album)
AS AlbenVeroeffentlicht FROM alben GROUP BY vorname,
nachname Order by nachname, album;
18. Erst mit einer SELECT Anfrage nach diesen 10 Titeln suchen:
SELECT vorname, nachname, titel from alben WHERE
nachname=’Madonna’ ORDER BY titel DESC LIMIT 10;
und jetzt loeschen:
DELETE from alben WHERE nachname=’Madonna’ ORDER BY titel
DESC LIMIT 10;
19. Da gel�schte Eintr�ge unwiderru�ich verloren sind. Ohne eine Einschr�nkung
werden alle Datens�tze gel�scht.
20. Diese Aufgabe l�sst sich nur �ber ein sogenanntes Sub-SELECT l�sen. Da
wir diese Vorgehensweise nicht besprochen haben, kommt es in der Arbeit nicht
dran. F�r alle die es interessiert, hier das Sub-SELECT:
SELECT * FROM (SELECT vorname, nachname,album, count(titel)
as TitelProAlbum from alben GROUP BY nachname, vorname,
album ORDER BY nachname,vorname, TitelProAlbum DESC)
AS egal Group By nachname, vorname
ORDER BY nachname, vorname;
M. Sabath 21