MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung...

of 21 /21

Embed Size (px)

Transcript of MySQL - nachlesen.com MySQL 1 Informationen zu MySQL 1 Informationen zu MySQL 1.1 Verwendung...

  • 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

    http://nachlesen.com/tuts/mysql/musikcds.zip

  • 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_Titel50 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

    Informationen zu MySQLVerwendung

    Verbindung zu MySQLVorbereitungenPfadangabe unter WindowsProbleme mit Umlauten

    Mit dem Server verbinden

    Abfragen an eine DatenbankVorbereitungArbeiten mit DatenbankenBackup einer DatenbankWiederherstellen einer Datenbank

    Abfragen stellenAnzeigen aller DatenbankenAuwahl einer DatenbankenSELECT AnweisungORDER BYLIMITASCOUNT()DISTINCTAufgaben

    BedingungenAbfragen gruppierenMustervergleichLIKEREGEXP

    Datens�tze l�schenAufgaben AllgemeinWie lautet die entsprechende AnweisungWie lautet die entsprechende FrageSonstiges

    L�sungenAufgaben 3.3.9 Seite 11Aufgaben 3.8.2 Seite 14Aufgaben 3.8.3 Seite 15Aufgaben 3.8.4 Seite 15