Blatt 5 - Lehrstuhl für Praktische Informatik III

Werbung
Lehrstuhl für Praktische Informatik III
Prof. Dr. Carl-Christian Kanne
Email: [email protected]
Norman May
B6, 29, Raum C0.05
68131 Mannheim
Telefon: (0621) 181–2517
Email: [email protected]
Datenbanksysteme 1
Sommersemester 06
5. Übungsblatt
31. Mai 2006
Aufgabe 1
21 Punkte
Formulieren Sie folgende Anfragen in SQL. Sie können die Anfragen über die Webschnittstelle testen. Wählen sie die Datenbank terra2 aus.
Aufgabe 1 a)
3 Punkte
Finden Sie die Namen aller Inseln, die (politisch) zu Japan gehören.
Lösung
select
from
where
and
and
and
i.name
land l, landesteil lt, geo insel g, insel i
l.l id = lt.l id
lt.lt id = g.lt id
g.i id = i.i id
l.name = ’Japan’;
Aufgabe 1 b)
4 Punkte
Geben Sie die Namen aller Städte an, die am Rhein liegen.
Lösung
select
from
where
and
and
and
s.name
stadt s,
g.g id =
l.g id =
l.s id =
g.name =
liegt an l, gewaesser g, fluss f
f.g id
g.g id
s.s id
’Rhein’;
Aufgabe 1 c)
4 Punkte
1
Geben Sie die Namen der Staaten an, zu denen eine Insel der Antillen gehört.
Lösung
select
from
where
and
and
and
distinct l.name
land l, landesteil lt, geo insel g, insel i
i.inselgruppe like ’% ntillen%’
i.i id = g.i id
g.lt id = lt.lt id
lt.l id = l.l id;
Aufgabe 1 d)
5 Punkte
Geben Sie die Namen aller Inselstaaten an und zählen Sie aus wieviel Inseln diese
Staaten jeweils bestehen. (Hinweis: Inselstaaten sind diejenigen Staaten, die an keinen
anderen Staat grenzen.)
Lösung
select l.name, count(distinct g.i id)
from
land l, landesteil lt, geo insel g
where l.l id = lt.l id
and
lt.lt id = g.lt id
and
l.l id not in
((select l id1
from benachbart)
union
(select l id2
from benachbart))
group by l.l id, l.name
order by l.name;
Aufgabe 1 e)
7 Punkte
Geben Sie eine Rangliste (d.h. durchnumeriert mit dem jeweiligen Rang) der Länder
in Europa sortiert nach der Fläche an.
Lösung
with Europa(l id, name, flaeche) as
(select l.l id, l.name, l.flaeche
from
land l, umfasst u, kontinent k
2
where l.l id = u.l id
and
u.k id = k.k id
and
k.name = ’Europa’)
select count(*) as Rang, A.Name, A.Flaeche
from
Europa A, Europa B
where (A.Flaeche < B.Flaeche
or
A.L ID = B.L ID)
group by A.L ID, A.Name, A.Flaeche
order by Rang;
Aufgabe 2
10 Punkte
In den folgenden abstrakten SQL-Ausdrücken bezeichnet die Notation {. . . } eine
Menge skalarer Werte, wie sie als Ergebnis einer Unteranfrage berechnet wurde. Sie
stellt eine gültige Eingabe für SOME/ALL dar.
Welche Lösung haben die folgenden abstrakten SQL-Ausdrücke?
(0 = some {})
(0 = some {null})
(2 <> some {null, 1, 2, 3})
(4 <> some {null, 1, 2, 3})
(null = some {null, 1, 2, 3})
(0
= all
{})
(0
= all
{null})
(2 <> all {null, 1, 2, 3})
(4 <> all {null, 1, 2, 3})
(null
= all
{null, 1, 2, 3})
=
=
=
=
=
=
=
=
=
=
Lösung
(0 = some {})
(0 = some {null})
(2 <> some {null, 1, 2, 3})
(4 <> some {null, 1, 2, 3})
(null = some {null, 1, 2, 3})
(0
= all
{})
(0
= all
{null})
(2 <> all {null, 1, 2, 3})
(4 <> all {null, 1, 2, 3})
(null
= all
{null, 1, 2, 3})
Aufgabe 3
=
=
=
=
=
=
=
=
=
=
False
Unknown
True
True
Unknown
True
Unknown
False
Unknown
Unknown
12 Punkte
3
In den folgenden abstrakten SQL-Ausdrücken bezeichnet die Notation {. . . } eine
Menge skalarer Werte, wie sie als Ergebnis einer Unteranfrage berechnet wurde. Sie
stellt eine gültige Eingabe für eine Aggregatfunktion dar.
Welche Lösung haben die folgenden (abstrakten) SQL-Ausdrücke?
count(all{})
max(all{})
count(all{null})
max(all{null, 1})
sum(all{null, 1, 2, 3})
avg(all{1, 1, 2, 2, 3, 3})
=
=
=
=
=
=
count(distinct{})
max(distinct{})
count(distinct{null})
max(distinct{null, 1})
sum(distinct{null, 1, 2, 3})
avg(distinct{1, 1, 2, 2, 3, 3})
=
=
=
=
=
=
Lösung
count(all{})
max(all{})
count(all{null})
max(all{null, 1})
sum(all{null, 1, 2, 3})
avg(all{1, 1, 2, 2, 3, 3})
=
=
=
=
=
=
count(distinct{})
max(distinct{})
count(distinct{null})
max(distinct{null, 1})
sum(distinct{null, 1, 2, 3})
avg(distinct{1, 1, 2, 2, 3, 3})
4
0
Null
0
1
6
2
=
=
=
=
=
=
0
Null
0
1
6
2
Herunterladen