Sie sind auf Seite 1von 19

Lösungen inf-schule

Datenbanksysteme –
Datenbank für Geodaten

Inhalt
I. Relationale Datenbanken.........................................................................................................2
I.1 Einstieg..............................................................................................................................2
I.2 Übungen.............................................................................................................................2
II. Verknüpfung von Daten..........................................................................................................4
II.1 Einstieg Datensatz finden.................................................................................................4
II.2 Einstieg Fehler in Daten...................................................................................................4
II.3 Einstieg Daten aus zwei Tabellen.....................................................................................5
II.4 Übungen...........................................................................................................................6
III. Verbessern der Ausgabe........................................................................................................9
III.1 Einstieg- Probleme der Ausgabe.....................................................................................9
III.2 Übungen..........................................................................................................................9
IV. Beziehungstabellen..............................................................................................................10
IV.1 Übungen........................................................................................................................10
V. Ergebnisse zusammenfassen.................................................................................................12
V.1 Einstieg – Statische Daten..............................................................................................12
V.2 Übungen..........................................................................................................................12
VI. Beziehungen innerhalb von Tabellen..................................................................................15
VI.1 Übungen........................................................................................................................15

1
I. Relationale Datenbanken
I.1 Einstieg
Aufgabe 1
Was bedeuten die einzelnen Teile (SELECT / FROM / WHERE) des SQL-Befehls?

Select – Liste der auszugebenden Attribute


From – Liste der Tabellen, aus denen Daten entnommen werden.
Where – Bedingungen, die die Datensätze erfüllen müssen.

Aufgabe 2
Schreibe SQL-Befehle, um
1. alle Orte in Frankreich auszugeben.

SELECT name, einwohner


FROM ort
WHERE land = 'Frankreich'

2. alle Orte in Deutschland auszugeben und zwar deren Namen, Länge und
Breite.

SELECT name, laenge, breite


FROM ort
WHERE land = 'Deutschland'

I.2 Übungen
Aufgabe 1
Erstelle die Struktur einer Tabelle für die Daten der Schülerinnen und Schüler deiner
Klasse.
Schüler
Name Geschlecht Geburtsdatum
‚Malte‘ ‚m‘ ‚30.7.2002‘

Aufgabe 2
Immer wieder parken Autos von Fremden auf dem Lehrerparkplatz. Das Sekretariat
benötigt daher die Information, welches Auto von welchem Lehrer gefahren wird.
Dafür wurde die Lehrer-Tabelle ergänzt: KFZ der Lehrer

2
Warum ist die Tabelle nicht gut gelungen und widerspricht eigentlich sogar den
Regeln einer relationalen Datenbanktabelle?

Man kann keine Aufzählungen in einer Spalte machen

Aufgabe 3
Gib alle Länder aus. Dabei sollen Name, Einwohner, Hauptstadt angezeigt und nach
Einwohner absteigend sortiert werden.

SELECT name, einwohner, hauptstadt


FROM land
ORDER BY einwohner DESC

Aufgabe 4
Gib alle Länder in Europa aus. Anzeige nur der Namen.

SELECT name
FROM land
WHERE kontinent = 'Europa'

Aufgabe 5
Welche Länder haben zwischen 10 und 100 Mio. Einwohner? Absteigend nach
Einwohner sortiert.

SELECT Name, Einwohner


FROM land
WHERE Einwohner <1000 AND Einwohner >100
ORDER BY Einwohner DESC

Aufgabe 6
Welche Länder [Orte] haben einen "Arm" oder ein "Bein" im Namen?
SELECT Name
3
FROM land
WHERE Name LIKE '%Arm%' OR Name LIKE '%bein%'

Aufgabe 7
Welche Orte in Deutschland liegen weiter westlich als Kaiserslautern (7.768° Ost)?
SELECT Name, Breite
FROM ort
WHERE land = 'Deutschland' AND laenge < 7.768

Aufgabe 8
Welche Länder liegen in Asien und Australien?

SELECT Name, Kontinent


FROM land
WHERE Kontinent = 'Asien' OR Kontinent = 'Australien'

II. Verknüpfung von Daten


II.1 Einstieg Datensatz finden
Aufgabe 1
Welcher Datensatz ist der richtige?
Kannst du einen SQL-Befehl formulieren, der nur genau den richtigen Datensatz
ausgibt?

SELECT Name, Einwohner


FROM ort
WHERE land = 'Deutschland' AND Name = 'Berlin'

Aufgabe 2
Führe Peters Recherche einmal für die Hauptstadt der USA durch.
Wieder soll dann ein SQL-Befehl nur den richtigen Datensatz aus der ort-Tabelle
ausgeben. Welche Probleme ergeben sich jetzt?

SELECT Name, Einwohner


FROM ort
WHERE Name = 'Washington' AND Einwohner >100000

4
II.2 Einstieg Fehler in Daten
Aufgabe 1: Suche der größten Länder Europas
Die größten Länder Europas in der Datenbank zu finden, sollte für dich jetzt kein
Problem mehr sein. Formuliere eine entsprechende SQL-Anfrage!
Tipp: Sortiere nach der Einwohnerzahl absteigend!
Länder in Europa
Ein Land fehlt eindeutig in der Liste. Welches ist es? Findest du auch den Grund
heraus?
SELECT LNR, Name, Einwohner, Flaeche, Kontinent, KontinentFlaeche
FROM land
WHERE kontinent = 'Europa'
ORDER BY Einwohner DESC

Frankreich fehlt, da der Kontinent dort als „Europe“ eingetragen wurde. Lässt sich
herausfinden mit Abfrage:
SELECT LNR, Name, Einwohner, Flaeche, Kontinent,
FROM land
WHERE LNR = ‘F’

Aufgabe 2: Fehler in den Daten


Betrachte einmal die Länderdaten in Europa genauer.
Fallen dir noch weitere Fehler auf? Welche Ursache haben diese Fehler?
Die Angaben zur Fläche und Einwohnerzahl von Europa sind inkonsistent. In
Deutschland wurden die Zahlen mit drei Stellen mehr gespeichert. Kann mit
folgendem SQL-Befehl gefunden werden:

Kaum zu finden: In Paris wurde der Landesname falsch gepflegt. Kann evtl. als
Zusatzaufgabe gestellt werden: Die größten Städte in Deutschland und Frankreich
mit ihrem Land, sortiert absteigend nach Einwohnern. Dann wird schnell sichtbar,
dass Paris fehlt.

SELECT Name, Land, Einwohner


FROM ort
WHERE land = 'Deutschland' OR land ='Frankreich'
ORDER BY Einwohner DESC

5
Aufgabe 3: Identifizieren von Datensätzen
Ein wichtiges Nachrichtenportal für die Computerwelt ist das Portal von heise.de.
Als besonderen Service kann man alle archivierten Meldungen auch später noch
nachlesen. Man findet sie unter einem speziellen "Permalink", der sich nicht mehr
ändert. Ein Beispiel siehst du hier: http://heise.de/-1643710.
Warum heißt die "Webseite" wohl -1643710 und nicht besser lesbar "Unerlaubte
Ortung bei Mietwagenfirma" ?

Damit man die einzelnen Seiten mit Nummern wieder Erkennt.

II.3 Einstieg Daten aus zwei Tabellen


Aufgabe 1
Jetzt sollen wieder alle Länder ausgegeben werden - zusammen mit dem Namen des
Kontinents.
Ändere den SQL-Befehl ab, so dass er die Länder mit den Daten aus beiden Tabellen
anzeigt (Erweiterung des FROM-Teils):

Wenn du es ausprobierst, ist das Ergebnis noch nicht wie erwartet. Warum?
Wie ist das Datenbanksystem vorgegangen?
Jede Zeile wurde mit jeder anderen Zeile kombiniert und alle Attribute beider
Tabellen ausgegeben.
Aufgabe 2
Abhilfe könnte eine Bedingung im SQL-Befehl schaffen.
WHERE KNR = KNR
Probiere es aus! Kannst du die Meldung übersetzen und erklären?
Column ambiguous error

II.4 Übungen
Aufgabe 1
Stelle dir vor, du willst die folgenden Dinge in einer Datenbanktabelle speichern:
die in Deutschland zugelassenen Autos
alle zur Zeit erhältlichen Bücher
alle Schülerinnen und Schüler in deiner Schule
die Lehrerinnen und Lehrer deiner Schule
Welche Primärschlüssel könnte man dann jeweils wählen? Wo sollte man einen
"künstlichen" Primärschlüssel einfügen?

6
Auto kennzeichen
Büchernummer
benutzername
benutzername

Aufgabe 2
Für die Verwaltung der Noten einer Klasse hat sich ein Lehrer eine Datenbank
erstellt:

Klassenverwaltung

Warum wäre das Attribut "Name" ein möglicher Primärschlüssel für die Schüler-
Tabelle?

Es gibt doppelte Namen aber falls Geschwister mit dem selben Namen an die Schule
kommen gibt es Probleme

Warum kann das aber später zu Problemen führen?

Was ist im Moment ein möglicher Primärschlüssel der Noten-Tabelle?

Was ist der Fremdschlüssel in der Noten-Tabelle?


Name
Ändere beide Tabellen so ab, dass die Probleme aus Aufgabenteil 1 vermieden
werden können.

Schülernummer statt Name. Name in der Notentabelle und Schülernummer


aus Vor und Nachnamen zusammen setzten

7
Aufgabe 3
Orte sind in der Regel einem bestimmten Land zugeordnet. Wie muss die Tabelle
"ort" verändert werden, so dass man von dort auf die entsprechenden Länderdaten
zugreifen kann?
Dem Ort die LNR mit gegeben wird mit der er auf die Länder zugreifen kann

Aufgabe 4
Formuliere SQL-Befehle für die folgenden Anfragen.
Gib alle Länder (Namen, Einwohner) aus, die in Asien liegen.

SELECT kontinent.name, land.name, land.einwohner


FROM kontinent, land
WHERE land.KNR = kontinent.KNR AND kontinent.name = 'Asien'

Sortiere die asiatischen Länder noch nach der Einwohnerzahl absteigend.

SELECT kontinent.name, land.name, land.einwohner


FROM kontinent, land
WHERE land.KNR = kontinent.KNR AND kontinent.name = 'Asien'
ORDER BY land.Einwohner DESC

Welche europäischen Länder haben mehr als 300.000 km2 Fläche?

SELECT kontinent.name, land.name, land.einwohner


FROM kontinent, land
WHERE land.KNR = kontinent.KNR AND kontinent.name ="Europa" AND
land.Flaeche > 300
ORDER BY land.Einwohner DESC

Nicht gewünschte Formulierung, da künstliche Schlüssel nicht direkt in Abfragen


verwendet werden sollten (sind ja in der Regel auch nicht bekannt).

Aufgabe 5

8
Die folgenden Abfragen beziehen sich jetzt auf alle drei Tabellen (ort, land,
kontinent) der terra3-Datenbank.
Gib alle Orte mit mehr als 10 Mio. Einwohner mit ihren Ländern aus. Sortierung nach
Einwohnerzahl absteigend.

SELECT ort.name, ort.Einwohner, land.name, kontinent.name


FROM kontinent, land, ort
WHERE land.KNR = kontinent.KNR AND ort.LNR = land.LNR AND
ort.einwohner > 10
ORDER BY ort.Einwohner DESC

Welche Orte in Europa haben mehr als 1 Mio. Einwohner?

SELECT ort.name, ort.Einwohner, land.name, kontinent.name


FROM kontinent, land, ort
WHERE land.KNR = kontinent.KNR AND ort.LNR = land.LNR AND
ort.einwohner > 1 AND kontinent.name = 'Europa'
ORDER BY ort.Einwohner DESC

Welche Orte haben mehr als 1 Mio. Einwohner und liegen in Ländern, die weniger als
10 Mio. Einwohner haben?

SELECT ort.name, ort.Einwohner, land.name, kontinent.name


FROM land, ort
WHERE AND ort.LNR = land.LNR AND ort.einwohner > 1
AND land.einwohner > 10
ORDER BY ort.Einwohner DESC

Erzeuge eine Tabelle mit den Hauptstädten der Länder.


Hilfe: Das Attribut HauptONR in der land-Tabelle kann helfen!

SELECT land.name, ort.name, land.einwohner


FROM land, ort
WHERE ort.LNR = land.LNR AND ort.ONR = HauptONR
ORDER By land.Einwohner DESC

9
III. Verbessern der Ausgabe
III.1 Einstieg- Probleme der Ausgabe
Aufgabe 1
Vielleicht ist dir bei den Beispielen aus dem letzten Kapitel ein Problem mit den
Spaltenüberschriften der Ergebnisse aufgefallen. Was gibt der SQL-Befehl aus?
Welches Problem gibt es mit den Spaltenüberschriften?
Der Befehl gibt Hauptstädte von Ländern aus, geordntet nach Größe der
Einwohner in den Hauptstäten

Es gibt Zwei mal Name

Aufgabe 2
Formuliere einen SQL-Befehl für folgende Aufgabe: Es sollen alle Länder ausgegeben
werden (nur die Namen der Länder), in denen es Millionenstädte gibt. Wieder ist die
Ausgabe nicht optimal. Warum?
Pro Milionenstadt gibt es Eine zeile

III.2 Übungen
Aufgabe 1
Gib alle Orte aus, die über dem 65. nördlichen Breitengrad liegen Ausgabe von
Name, Breite des Ortes und des Landesnamens Sortierung nach dem Breitengrad.

SELECT DISTINCT ort.name


AS Name, ort.Breite
AS Breitengrad, land.name
AS Land
FROM ort, land
WHERE ort.LNR = land.LNR
AND ort.Breite > 65

Aufgabe 2
Welche Länder liegen südlich des Äquators (Ausgabe des Landesnamens)?

SELECT DISTINCT land.name


AS Land
FROM ort, land
WHERE ort.LNR = land.LNR
AND ort.breite < 0

10
Aufgabe 3
Welche Kontinente liegen südlich des Äquators (Ausgabe nur des Kontinents)?

SELECT DISTINCT kontinent.name


AS Kontinent
FROM ort, land, kontinent
WHERE ort.LNR = land.LNR
AND land.KNR = kontinent.KNR
AND ort.Breite < 0

Aufgabe 4 - für Experten zum Exkurs-Kapitel


Kannst du die Ausgabe aus Beispiel 2 im Exkurs auch noch auf die Grad-Minuten
erweitern?

11
IV. Beziehungstabellen
IV.1 Übungen
Aufgabe 1
Welche Orte liegen an der Saar? Hilfe: Denke daran, dass du nicht direkt Werte in
Fremdschlüsseln abfragen solltest. Daher wird der FROM-Teil so aussehen müssen:
FROM fluss, stadtfluss, ort.

SELECT ort.Name
FROM ort, stadtfluss, fluss
WHERE ort.ONR = stadtfluss.ONR
AND stadtfluss.FNR = fluss.FNR
AND fluss.Name = 'Saar'

Aufgabe 2
Welche Flüsse fließen durch Hann. Münden? Warum kommen hier drei Flüsse heraus,
obwohl auf der Karte nur die Einmündung eines Flusses in einen anderen zu sehen
ist?

SELECT fluss.Name
FROM ort, stadtfluss, fluss
WHERE ort.ONR = stadtfluss.ONR
AND stadtfluss.FNR = fluss.FNR
AND ort.Name = 'Hann, Münden'

Aufgabe 3
Welche Orte durchfließt der Rhein in Rheinland-Pfalz? Ordne die Orte nach dem
Rheinkilometer.

SELECT ort.Name, stadtfluss.km AS Rheinkilometer


FROM ort, stadtfluss, fluss
WHERE ort.ONR = stadtfluss.ONR
AND stadtfluss.FNR = fluss.FNR
AND ort.Landesteil = 'Rheinland-Pfalz'
AND fluss.Name = 'Rhein'
ORDER BY stadtfluss.km

12
Aufgabe 4
Welche Länder durchfließt die Donau? Hilfe: Du wirst den SELECT DISTINCT-Befehl
benötigen.

SELECT DISTINCT land.Name


FROM ort, land, stadtfluss, fluss
WHERE fluss.FNR = stadtfluss.FNR
AND stadtfluss.ONR = ort.ONR
AND ort.LNR = land.LNR
AND fluss.Name = 'Donau'

Aufgabe 5
Welche Flüsse sind in Deutschland erfasst?

SELECT DISTINCT fluss.Name


FROM ort, land, stadtfluss, fluss
WHERE land.LNR = ort.LNR
AND stadtfluss.FNR = fluss.FNR
AND ort.ONR = stadtfluss.ONR
AND land.Name = 'Deutschland'

Aufgabe 6
Entwerfe eine Erweiterung der Datenbank für folgende Aufgabe:
Es sollen die Sprachen der Erde erfasst werden. Für jedes Land wird dabei
zugeordnet, welche Sprache(n) dort gesprochen werden. Als zusätzliche Information
kann man speichern, wie viel Prozent der Bevölkerung jeweils die Sprache sprechen.
Welche Tabellen und Attribute werden benötigt? Gib auch Beispiel-Datensätze an!
Die Lösung ergibt sich aus dem Schema der kompletten terra-Datenbank mit den
zusätzlichen Tabellen „gesprochen“ und „Sprache“: Schema der terra-DB

13
V. Ergebnisse zusammenfassen
V.1 Einstieg – Statische Daten
Aufgabe 1
Wie viele Länder sind für die anderen Kontinente gespeichert?

Aufgabe 2
Wie viele Städte liegen am Rhein?

V.2 Übungen
Aufgabe 1
Wie viele Orte sind insgesamt in der Datenbank?

Wie viele Orte sind davon in Frankreich?

Was ist die durchschnittliche Einwohnerzahl der französischen Orte?

-- besser gerundet:

Aufgabe 2
In welchen Staaten liegen Millionenstädte (mehr als 1 Mio. Einwohner)?
Zähle die Anzahl der Städte pro Land! Erweiterung: Sortiere nach der Anzahl der
Städte absteigend.

14
Aufgabe 3
Wie viele Einwohner haben die Länder eines Kontinents im Schnitt / minimal /
maximal?

-- Wieder könnte man noch runden:

Aufgabe 4
Welche Orte liegen an mehr als einem Fluss? Hilfe: Nutze den HAVING-Teil!
Kleine Erweiterung: Gib auch noch das Land mit aus und sortiere nach der Anzahl
absteigend! Achte einmal auf den Ort "Koblenz"; diesen gibt es in der Schweiz und in
Deutschland - jeweils an zwei Flüssen. Wird dieser korrekt ausgegeben? Hilfe: Du
kannst auch nach zwei Attributen gruppieren: GROUP BY land.Name, ort.Name
Auch eine Gruppierung nach einem nicht angezeigten Attribut ist möglich: GROUP BY
ort.ONR
Orte an mehreren Flüssen

Die Gruppierung nur nach ort.Name würde nicht funktionieren (auch wenn das Land
nicht gefordert ist), da der Name “Koblenz” als Stadt z.B. in der Schweiz und in
Deutschland erscheint und die Gruppierung rein anhand des Namens nicht korrekt
wäre.
Alternative, wenn nur die Orte gefragt sind (die Land-Tabelle wird dann gar nicht
benötigt):

Aufgabe 5
Wie viele Flüsse fließen durch Deutschland (soweit in der Datenbank erfasst)? Hilfe:
Ermittle zunächst mittels SELECT DISTINCT alle Flussnamen. Im zweiten Schritt
zähle die Flüsse. Auch hier gibt es einen Befehl, um Duplikate nur einmal zu zählen:

15
Ohne das DISTINCT würden alle Einträge für deutsche Städte in der stadtfluss-
Tabelle gezählt werden. Die fluss-Tabelle ist hier eigentlich gar nicht notwendig. Und
besser würde man noch COUNT(DISTINCT stadtfluss.FNR) ersetzten, falls es
mehrere Flüsse gleichen Namens gibt (wie z.B. die Kinzig).

Aufgabe 6
Summiere die Einwohner der Orte der asiatischen Länder pro Land. Gib auch die
Einwohnerzahl aus der land-Tabelle mit aus. Warum stimmen die Werte nicht
überein? Kannst du die Ausgabe noch so verbessern, dass die Werte leichter
vergleichbar sind?

Die Einheiten sind unterschiedlich, daher sollte man diese bei der Ausgabe wie
gezeigt anpassen. Es sind nicht alle Orte der Länder verzeichnet, daher ist die
Summe der Orte zu gering. Außerdem sind die Daten in sich nicht unbedingt
konsistent, da sie aus unterschiedlichen Quellen stammen.
Aufgabe 7 - zum Exkurs Subselect
Für diese Aufgabe musst du wahrscheinlich eine Subselect-Anweisung verwenden.
Welche Orte in Frankreich liegen jeweils am weitesten im Norden, Osten, Süden und
Westen? Erstaunlich? Vielleicht suchst du auch die Orte einmal in einer Karte!

16
Die Übersee-Departements in Frankreich führen zu so einer großen Differenz
zwischen den Maximal- und Minimalwerten

17
VI. Beziehungen innerhalb von Tabellen
VI.1 Übungen
Aufgabe 1
In welchen Fluss mündet die Amper? Löse mit einem einzigen SQL-Befehl!

Aufgabe 2
Welche Länder grenzen an Deutschland (mit Ausgabe der Ländernamen)?Hilfe: Im
WHERE-Teil muss eine OR-Bedingung vorhanden sein, da Deutschland in beiden
Spalten der Tabelle nachbarland vorkommen kann.

-- Die Ausgabe ist noch nicht „ideal“, mögliche „Speziallösung“:

Aufgabe 3
Welche österreichischen Flüsse münden in die Donau?

Aufgabe 4
Welche Länder haben Nachbarn in anderen Kontinenten? Hilfe: Du wirst die land-
Tabelle und die kontinent-Tabelle zweimal benötigen!

18
Aufgabe 5 - für Experten
Die Nachbarländer von Deutschland wurden in einer Aufgabe oben schon
herausgesucht. Vielleicht ist dir dabei auch als "Unschönheit" aufgefallen, dass
Deutschland einmal als erstes und einmal als zweites Land genannt wurde. Woran
liegt das? Der folgende SQL-Befehl löst das Problem mit einem neuen Konstrukt.
Kannst du den Befehl nachvollziehen? Welche Vorstellung von einem Ergebnis eines
SQL-Befehls liegt hier vor?

Hier werden zwei Fälle in unterschiedlichen SQL-Befehlen abgearbeitet (Deutschland


einmal als LNR1 und einmal als LNR2 in der nachbarland-Tabelle). Die Ergebnisse
werden als Mengen aufgefasst, die dann vereinigt (UNION) werden.
Aufgabe 6 - für Experten
Bei welchen Nachbarn von Deutschland wird Deutsch gesprochen?

Aufgabe 7 - für Experten


Welche Nachbarländer sprechen grundsätzlich die gleiche Sprache?

19