Download - MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

Transcript
Page 1: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

MySQL

M. Sabath

17. August 2007

Page 2: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 3: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 4: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 5: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 6: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 7: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 8: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 9: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 10: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 11: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 12: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 13: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 14: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 15: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 16: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 17: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 18: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 19: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 20: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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

Page 21: MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung Millionen Webauftritte nutzen MySQL. U.a. Associated Press, Citysearch, Cox Com-munications,

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