Formulieren Sie anschließend die folgenden Abfragen in SQL und überprüfen Sie sie anhand Ihrer Datenbank:
Musterlösung vom 02.06.2009:
Eine Möglichkeit, die Datenbank zu kopieren, ist die Verwendung der MySQL-Kommandozeilentools mysqldump und mysql. Mit dem Befehl mysqldump -u [loginname] -p WM2006 > wm.sql exportiert man die Datenbank in die Datei wm.sql. Diese enthält anschließend entsprechende create table- und insert-Befehle in SQL-Syntax, um die Tabellen zu erzeugen und zu füllen. Analog zu Aufgabe 5.2 kann man mit dem Aufruf mysql -u [loginname] -p [datenbank] < wm.sql die Tabellen dann in einer beliebigen Datenbank wieder anlegen.
Alternativ lassen sich die beiden Schritte in phpMyAdmin ausführen. In der Datenbank 'WM2006' lässt sich unter 'Exportieren' analog zu mysqldump eine SQL-Datei erstellen. Anschließend lässt sich diese wie in Aufgabe 5.2 beschrieben in der eigenen Datenbank wieder importieren.
Es ergeben sich folgende Abfragen:
1.
select s.Stadion, s.Mannschaft1, s.Mannschaft2, count(*)
from Spieler p, Tore t, Spiele s
where p.SpielerNr = t.SpielerNr
and s.SpielID = t.SpielID
and p.Name = 'PODOLSKI Lukas'
group by s.SpielID
2.
select s.Land, t.minute from Spieler s, Tore t where s.SpielerNr = t.SpielerNr and minute <= all (select minute from Tore)3.
select s.Stadion, count(*) as Tore
from Spiele s, Tore t
where s.SpielID = t.SpielID
group by s.Stadion
having Tore >= all (select count(*) as Tore
from Spiele s, Tore t
where s.SpielID = t.SpielID
group by s.Stadion)
4.
select m.Land,
(select count(*) as To1
from Spieler s1, Tore t1
where s1.SpielerNr = t1.SpielerNr
and s1.Position = 'Forward'
and s1.Land = m.Land) as Tore1,
(select count(*) as To2
from Spieler s2, Tore t2
where s2.SpielerNr = t2.SpielerNr
and s2.Position != 'Forward'
and s2.Land = m.Land) as Tore2
from Mannschaften m
group by m.Land
having Tore1 < Tore2
order by m.Land
5.
select s.Mannschaft, s.Name, count(*) as Anzahl
from
((select sp.Mannschaft1 as Mannschaft, sr.Name
from Spiele sp, leitet l, Schiedsrichter sr
where sp.SpielID = l.SpielID
and l.SID = sr.SID
and l.Funktion = 'Referee')
union all
(select sp.Mannschaft2 as Mannschaft, sr.Name
from Spiele sp, leitet l, Schiedsrichter sr
where sp.SpielID = l.SpielID
and l.SID = sr.SID
and l.Funktion = 'Referee')) s
group by s.Mannschaft, s.Name
6.
select s.Land, count(*)/(select count(*)
from Spiele sp
where s.Land = sp.Mannschaft1
or s.Land = sp.Mannschaft2) as Schnitt
from Spieler s, Verwarnungen v
where s.SpielerNr = v.SpielerNr
group by s.Land
order by Schnitt desc
7.
select distinct s.Mannschaft1, s.Mannschaft2
from Tore t, Spiele s
where t.SpielID = s.SpielID
and t.Minute < (select min(v.Minute)
from Verwarnungen v
where s.SpielID = v.SpielID)
8.
select s1.name
from Schiedsrichter s1, leitet l1
where s1.sid = l1.sid
and l1.funktion = 'Fourth Official'
and s1.name NOT IN (select s.name
from Schiedsrichter s, leitet l
where s.sid = l.sid
and l.funktion = 'Fourth Official'
having (select count(*)
from Verwarnungen
where spielid = l.spielid
and karte != 'yellow') = 0)