Sie sind auf Seite 1von 15

Fakultät für Informatik

Professur Datenverwaltungssysteme

Datenbanken Grundlagen
Übung 8, Thema 3:
Structured Query Language
dvs.informatik.tu-chemnitz.de

Chemnitz ∙ 16.12.2020 ∙ Daniel Richter, Florian Hahn www.tu-chemnitz.de/informatik/DVS


Fakultät für Informatik
Professur Datenverwaltungssysteme

Teil A: Lösungen

dvs.informatik.tu-chemnitz.de

Chemnitz ∙ 16.12.2020 ∙ Daniel Richter, Florian Hahn www.tu-chemnitz.de/informatik/DVS


Fakultät für Informatik
Professur Datenverwaltungssysteme

Aufgabe 1 - Datum und Zeit mit SQL

Formuliere folgende Anfragen in SQL. Angaben in Klammern bezeichnen


die Benennung der Spalten der Ergebnistabelle.
a) Welche Flugzeuge wurden zwischen dem 1999-08-20 und dem 2000-
01-21 gewartet (fznr, kontr)?
b) Welche Maschine(n) (fznr, typ) hat „LUFTHANSA“ 1999 gekauft?
c) Vor wie vielen Tagen (tage) fanden die Flüge von „Bagdad“ nach
„Montreal“ statt?
d) In welchen Jahren (jahr) haben die Piloten (pinr) ihren Dienst bei der
jeweiligen Fluggesellschaft (gesell_bez) angetreten?

3 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

Aufgabe 1 - Datum und Zeit mit SQL


Musterlösung
a) Welche Flugzeuge wurden zwischen dem 1999-08-20 und dem 2000-01-21
gewartet (fznr, kontr)?
SELECT fznr, kontr FROM maschine WHERE kontr BETWEEN '1999-
08-20' AND '2000-01-21';
b) Welche Maschine(n) (fznr, typ) hat „LUFTHANSA“ 1999 gekauft?
SELECT fznr, typ FROM bestand NATURAL JOIN maschine WHERE
gesell_bez = 'LUFTHANSA' AND extract(YEAR FROM seit) = 1999;
c) Vor wie vielen Tagen (tage) fanden die Flüge von „Bagdad“ nach „Montreal“
statt?
SELECT extract(DAY FROM (now() - datum)) AS tage FROM flug
WHERE start_in = 'Bagdad' AND ziel = 'Montreal';
d) In welchen Jahren (jahr) haben die Piloten (pinr) ihren Dienst bei der
jeweiligen Fluggesellschaft (gesell_bez) angetreten?
SELECT extract(YEAR FROM seit) AS jahr, pinr, gesell_bez FROM
angestellt;

4 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

Teil B: Theorie

dvs.informatik.tu-chemnitz.de

Chemnitz ∙ 16.12.2020 ∙ Daniel Richter, Florian Hahn www.tu-chemnitz.de/informatik/DVS


Fakultät für Informatik
Professur Datenverwaltungssysteme

Unteranfragen in PostgreSQL…
- WHERE Klausel kann ersetzt werden durch neue Anfrage
- Beispiel: SELECT AVG(Gehalt) FROM Mitarbeiter; = 3500
SELECT ID,name FROM Mitarbeiter WHERE Gehalt > 3500;
- Durch dieses Beispiel werden 2 Anfragen für eine Information benötigt
- PostgreSQL führt erst den Subquery aus, danach den äußeren Query
- Unteranfrage kann für einen Rückgabewert oder für Rückgabewerte
benutzt werden und müssen unterschiedlich deklariert werden
- Beispiel: SELECT ID, name FROM Mitarbeiter WHERE GEHALT >
(SELECT AVG(Gehalt) FROM Mitarbeiter);
- Beispiel IN: SELECT name FROM Mitarbeiter WHERE M_ID NOT IN
(SELECT M_ID FROM Mitarbeiter);
- Beispiel: SELECT name FROM Mitarbeiter WHERE M_ID IN
(SELECT M_ID FROM Abteilung WHERE ABT_ID IN (…

6 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

CRUD Operatoren = Create Read Update Delete


CRUD SQL HTTP(REST)
C Create in SQL für das INSERT Statement POST
R Read in SQL für das SELECT Statement GET, HEAD
U Update in SQL für das UPDATE Statement PUT, PATCH
D Delete in SQL für das DELETE Statement DELETE

INSERT INTO maschine (fznr, kontr, typ) VALUES (1, '2000-01-


01', 'Concorde');
UPDATE maschine SET kontr = '2010-01-01' WHERE fznr = 1;
DELETE FROM fztyp WHERE typ = 'Concorde';

Schlüssel- Fremdschlüssel Beziehungen sind wichtig, da


Fremdschlüssel mit verändert werden ( UPDATE, DELETE)
7 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

Teil C: Live

dvs.informatik.tu-chemnitz.de

Chemnitz ∙ 16.12.2020 ∙ Daniel Richter, Florian Hahn www.tu-chemnitz.de/informatik/DVS


Fakultät für Informatik
Professur Datenverwaltungssysteme

Aufgabe 1 - Unteranfragen mit SQL

Löse folgende Anfragen ausschließlich mit Hilfe von Unteranfragen


(keine Joins oder Kreuzprodukte).
a)Wie heißt der älteste Pilot (name)?
b)Welcher Flugzeugtyp (typ) ist der schnellste (geschw)?
c)Wann wurden die Maschinen (fznr), die von Piloten mit Nachnamen
„Hummel“ geflogen werden, das letzte mal überprüft (kontr)?
d)Für welche unterschiedlichen Flugzeugtypen (typ) von „AIR BERLIN“
liegen Buchungen vor?
e)Welche Piloten (name) sind für keinen Flug eingesetzt?
f)Welche Piloten (name) haben die gleiche Qualifikation (quali) wie Pilot
„Jan Berger“ aber mehr Flugstunden (flug_h)?
g)Welche Passagiere (name) haben den selben Flug gebucht wie „Jim
Ziegel“ [außer „Jim Ziegel“]?
h)Wie teuer (preis) ist die billigste aller Buchungen der 1. Klasse von
„London“ nach „Boston“?
9 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

Aufgabe 1 - Unteranfragen mit SQL


Musterlösung
a) Wie heißt der älteste Pilot (name)?
SELECT name FROM pilot WHERE gebdat = (SELECT min(gebdat) FROM pilot);
b) Welcher Flugzeugtyp (typ) ist der schnellste (geschw)?
SELECT typ, geschw FROM fztyp WHERE geschw >= ALL (SELECT geschw FROM fztyp);
c) Wann wurden die Maschinen (fznr), die von Piloten mit Nachnamen „Hummel“ geflogen werden, das letzte mal überprüft (kontr)?
SELECT fznr, kontr FROM maschine WHERE fznr IN (SELECT fznr FROM flug WHERE pinr IN (SELECT pinr FROM pilot
WHERE name LIKE '% Hummel'));
d) Für welche unterschiedlichen Flugzeugtypen (typ) von „AIR BERLIN“ liegen Buchungen vor?
SELECT DISTINCT typ FROM maschine WHERE fznr IN (SELECT fznr FROM flug WHERE fnr IN (SELECT fnr FROM buchung))
AND fznr IN (SELECT fznr FROM bestand WHERE gesell_bez = 'AIR BERLIN');
e) Welche Piloten (name) sind für keinen Flug eingesetzt?
SELECT name FROM pilot WHERE pinr NOT IN (SELECT pinr FROM flug);
f) Welche Piloten (name) haben die gleiche Qualifikation (quali) wie Pilot „Jan Berger“ aber mehr Flugstunden (flug_h)?
SELECT name, quali, flug_h FROM pilot WHERE flug_h > (SELECT flug_h FROM pilot WHERE name = 'Jan Berger') AND
quali = (SELECT quali FROM pilot WHERE name = 'Jan Berger');
g) Welche Passagiere (name) haben den selben Flug gebucht wie „Jim Ziegel“ [außer „Jim Ziegel“]?
SELECT DISTINCT name FROM passagier WHERE name <> 'Jim Ziegel' AND panr IN (SELECT panr FROM buchung WHERE
fnr IN (SELECT fnr FROM buchung WHERE panr IN (SELECT panr FROM passagier WHERE name = 'Jim Ziegel')));
h) Wie teuer (preis) ist die billigste aller Buchungen der 1. Klasse von „London“ nach „Boston“?
SELECT min(preis) AS preis FROM buchung WHERE klasse = 1 AND fnr IN (SELECT fnr FROM flug WHERE start_in = 'London'
AND ziel = 'Boston');
10 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

Aufgabe 2 - Datenmodifikation mit SQL


Löse folgende Aufgaben unter der Annahme, dass keine Schlüssel-
Fremdschlüsselbeziehungen als Constraints definiert wurden. Es können
mehrere Statements verwendet und gebraucht werden.
a)Der Pilot „Nico Oppermann“ ist „Captain“ geworden.
b)Die Fluggesellschaft „BRITISH AIRWAYS“ hat am 2002-03-05 ein Flugzeug
vom Typ „Airbus A319“ gekauft, das unter der internen Flugzeugnummer 274
erfasst wird. Die Kontrolle erfolgte am Kaufdatum.
c)Alle Flugzeuge von „AIR FRANCE“ wurden zuletzt am 2000-08-01 überprüft.
d)Die Preise für alle Flüge in der 1. Klasse werden verdoppelt.
e)Die „LUFTHANSA“ stellt einen neuen „Chiefpilot“ mit Namen „Albert Wutzler“
unter der Pilotennummer 293 ein. Dieser wurde am 23. August 1958 geboren
und hat bisher 1695 Flugstunden absolviert. Er wird ab sofort eingestellt.
f)Die Buchung(en) für „Maria Langer“ soll(en) für den doppelten Preis in die
erste Klasse umgewandelt werden.
g)Der Flug mit Flugnummer 1 fällt aus. Dazugehörige Passagiere ohne weitere
Buchungen werden ebenfalls gelöscht.
h)Der Flugzeugtyp „Airbus A320“ wird ausgemustert.
11 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

Aufgabe 2 - Datenmodifikation mit SQL


Musterlösung
a) Der Pilot „Nico Oppermann“ ist „Captain“ geworden.
UPDATE pilot SET quali = 'Captain' WHERE name = 'Nico Oppermann';
b) Die Fluggesellschaft „BRITISH AIRWAYS“ hat am 2002-03-05 ein Flugzeug vom Typ „Airbus A319“
gekauft, das unter der internen Flugzeugnummer 274 erfasst wird. Die Kontrolle erfolgte am Kaufdatum.
INSERT INTO maschine (fznr, kontr, typ) VALUES (274, '2002-03-05', 'Airbus A319');
INSERT INTO bestand (fznr, gesell_bez, seit) VALUES (274, 'BRITISH AIRWAYS‘, '2002-03-05');
c) Alle Flugzeuge von „AIR FRANCE“ wurden zuletzt am 2000-08-01 überprüft.
UPDATE maschine SET kontr = '2000-08-01' WHERE fznr IN (SELECT fznr FROM bestand
WHERE gesell_bez = 'AIR FRANCE');
d) Die Preise für alle Flüge in der 1. Klasse werden verdoppelt.
UPDATE buchung SET preis = preis * 2 WHERE klasse = 1;
e) Die „LUFTHANSA“ stellt einen neuen „Chiefpilot“ mit Namen „Albert Wutzler“ unter der Pilotennummer 293
ein. Dieser wurde am 23. August 1958 geboren und hat bisher 1695 Flugstunden absolviert. Er wird sofort
eingestellt.
INSERT INTO pilot (pinr, name, gebdat, quali, flug_h) VALUES (293, 'Albert Wutzler',
'1958-08-23', 'Chiefpilot', 1695);
INSERT INTO angestellt (gesell_bez, pinr, seit) VALUES ('LUFTHANSA', 293, now());
12 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

Aufgabe 2 - Datenmodifikation mit SQL


Musterlösung
f) Die Buchung(en) für „Maria Langer“ soll(en) für den doppelten Preis in die erste Klasse umgewandelt
werden.
UPDATE buchung SET preis = preis * 2, klasse = 1 WHERE panr IN (SELECT panr FROM
passagier WHERE name = 'Maria Langer');
g) Der Flug mit Flugnummer 1 fällt aus. Dazugehörige Passagiere ohne weitere Buchungen werden ebenfalls
gelöscht.
DELETE FROM buchung WHERE fnr = 1;
DELETE FROM flug WHERE fnr = 1;
DELETE FROM passagier WHERE panr NOT IN (SELECT panr FROM buchung);
h) Der Flugzeugtyp „Airbus A320“ wird ausgemustert.
DELETE FROM buchung WHERE fnr IN (SELECT fnr FROM flug NATURAL JOIN maschine
WHERE typ = 'Airbus A320‘);
DELETE FROM flug WHERE fznr IN (SELECT fznr FROM maschine WHERE typ = 'Airbus
A320');
DELETE FROM bestand WHERE fznr IN (SELECT fznr FROM maschine WHERE typ = 'Airbus
A320');
DELETE FROM maschine WHERE typ = 'Airbus A320';
DELETE FROM fztyp WHERE typ = 'Airbus A320';
DELETE FROM passagier WHERE panr NOT IN (SELECT panr FROM buchung);
13 www.tu-chemnitz.de/informatik/DVS
Fakultät für Informatik
Professur Datenverwaltungssysteme

Teil D: Hausaufgaben

dvs.informatik.tu-chemnitz.de

Chemnitz ∙ 16.12.2020 ∙ Daniel Richter, Florian Hahn www.tu-chemnitz.de/informatik/DVS


Fakultät für Informatik
Professur Datenverwaltungssysteme

Aufgabe 1 - Datenmodifikation und -erstellung mit SQL

a)Generiere neue Varianten aller Tabellen der Datenbank


„Air“. Definiere beim Anlegen einer Tabelle Schlüssel und
Fremdschlüsselbeziehungen und überlege und definiere
weitere geeignete Integritätsbedingungen.
b)Kopiere mit SQL die vollständigen Inhalte der
ursprünglichen Tabellen der Datenbank „Air“ in die neu
erzeugten Varianten. In welcher Reihenfolge müssen die
Inhalte kopiert werden?

15 www.tu-chemnitz.de/informatik/DVS