Datenbanksysteme (LU 2.0 / LU 1.0)

Werbung
Datenbanksysteme (LU 2.0 / LU 1.0)
Arbeitsunterlagen WS 2002/2003
Nicole Hartmann
Gerhard Krizovsky
Heinrich Moser
Gerald Pfeifer
Katrin Seyr
10. Dezember 2002
----
Inhaltsverzeichnis
1 Übungs betrieb
1.1 Lehrziel .
1.2 Übungsmodus
1.3 Übungsräume
1.4 Anmeldung . .
1.5 Prüfungsgespräche
1.6 Unterlagen & aktuelle Informationen.
1.7 Termine im Überblick.
1.8 Übungstest
.
1.9 Betreuung.........
1.10 Ausarbeiten der Beispiele .
1.10.1 Systemumgebung .
1.10.2 Eingabe der Beispiele
1.10.3 Secure Shell
1.10.4 Secure Copy
2
Beispielsammlung
2.1 BeispielI..............
2.1.1
Allgemeines
.
2.1.2
Gruppe A: Jungschargruppe
2.1.3
Gruppe B: Wifi-Kurs ...
2.1.4
Gruppe C: Ticket-Service
2.2 Beispiel 2 . . . . . . . . . . . . .
2.2.1
Allgemeines
.
2.2.2
Gruppe A: Autovermietung Buchbinder
2.2.3
Gruppe B: PAY TV Fernsehsender ...
2.2.4
Gruppe C: Weinbauseminare Gsellmann .
2.3 Beispiel3
.
2.3.1
Allgemeines
.
2.3.2
Gruppe A: Autovermietung Buchbinder
2.3.3
Gruppe B: PAY TV Fernsehsender ...
2.3.4
Gruppe C: Weinbauseminare Gsellmann .
1
1
1
2
2
2
3
3
4
4
4
4
5
5
5
7
7
7
7
12
16
20
20
21
22
23
24
24
25
26
27
3
Interaktives SQL
3.1 Allgemeines...............
3.1.1 Anmerkungen zur Schreibweise
3.1.2 Online-Dokumentation.....
3.1.3 Probleme und Fehlermeldungen
3.2 SQL *PLUS
.
3.2.1 Aufruf und Beenden von SQL *PLUS
3.2.2 SQL*PLUS-Befehle
3.2.3 Das Cornmand-File .
3.3 SQL
.
3.3.1 Kurze Einführung ..
3.3.2 SQL als Datendefinitionssprache .
3.3.3 Operatoren
.
3.3.4 Funktionen in SQL
.
3.3.5 SQL als Datenmanipulationssprache .
3.3.6 Transaktionsmanagement .
3.4 Syntax der SQL-Statements .
3.4.1 /*
*/
.
3.4.2 ALTER TABLE
.
3.4.3 Expression (expr, expr-list) .
3.4.4 COMMIT
.
3.4.5
3.4.6
3.4.7
3.4.8
3.4.9
3.4.10
3.4.ll
3.4.12
3.4.13
3.4.14
3.4.15
3.4.16
3.4.l7
3.4.18
3.4.19
3.4.20
3.4.21
Condition
.
Constraint clause ..
CREATE CLUSTER
CREATE INDEX ..
CREATE SEQUENCE
CREATE TABLE .
CREATE VIEW
DELETE .....
DROP CLUSTER
DROP INDEX
DROP TABLE
DROP VIEW
INSERT ...
RENAME ..
ROLLBACK
SAVEPOINT
SELECT
3.4.22 UPDATE ..
II
29
29
29
29
30
30
30
30
31
32
32
37
40
44
46
46
47
47
48
49
51
51
53
54
55
56
57
58
59
59
59
60
60
60
61
62
63
63
66
4
PL/SQL
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
Was ist PLlSQL . . . . . . . . .
Blockstruktur von PLlSQL . . .
4.2.1
Kommentare in PLlSQL
Deklaration und Benutzung von Variablen und Konstanten
4.3.1
Datentypen
.
4.3.2
Deklaration von Variablen und Konstanten
4.3.3
Wertzuweisung zu PLlSQL-Variablen
4.3.4
Benutzerdefinierte Unterdatentypen
4.3.5
Attribute von Datentypen ....
4.3.6
Konvertierung von Datentypen .
Kontrollstrukturen . . . .
4.4.1
IF-Statement
..
4.4.2
LOOP Statement
4.4.3
WHILE-Schleife
4.4.4
FOR-Schleife..
4.4.5
EXIT-Statement
4.4.6
EXIT- WHEN Statement
4.4.7
LOOP Labels
Operatoren
.
Cursor
.
4.6.1
Cursoroperationen
4.6.2
Cursor FOR Loops
4.6.3
Cursorvariablen . .
4.6.4
Cursorattribute
. .
4.6.5
CURRENT OF Klausel
Unterprogramme
.
4.7.1
Prozeduren
.
4.7.2
Funktionen
.
4.7.3
Arten von Parametern
Fehlerbehandlung
. . . . . . .
. 4.8.1
Vordefinierte Exceptions
4.8.2
Benutzerdefinierte Exceptions
4.8.3
EXCEPTION~T
....
4.8.4
SQLCODE - SQLERRM .
Transaktionen.........
4.9.1
RETURNING Klausel
PLlSQL-Packages .....
4.10.1 DBMS_OUTPUT.
PLlSQL und SQL *Plus . .
Stored Procedures . . . . .
4.12.1 Erstellen von Stored Procedures
111
69
69
70
70
71
71
71
72
72
73
74
74
75
75
75
75
76
76
76
77
77
78
79
80
80
81
81
82
82
82
83
84
84
85
85
86
87
87
88
89
89
89
4.12.2 Entfernen von Stored Procedures .
4.12.3 Aufrufen von Stored Procedures
4.13 Nähere Informationen . . . . . . . . . .
A Beispielrelationen
A.1 Tabellenstruktur . . . . . . .
A.2 Daten
.
A.3 Physische Datenorganisation
A.3.1 Beispiel Taxiunternehmen
A.3.2 Das EER-Diagramm
A.3.3 Das Relationenmodell
A.3A Implementierung
90
90
90
91
91
92
93
93
94
94
96
B Musterbeispiele und -lösungen
B.I Ein PLlSQL-Beispiel
...
B.1.1 Aufgabenstellung .
B.1.2 Lösung
.
99
99
99
99
C EER-Design
103
IV
Kapitell
••
Ubungsbetrieb
1.1
Lehrziel
Im Rahmen dieser Lehrveranstaltung sollen die Benutzung und der Entwurf von relationalen Datenbanken geübt werden. Anhand des kommerziellen DBMS ORACLE 8.1.7 wird die Verwendung der
Abfragesprache SQL praktisch erprobt. Die Teilnehmer sollen nach Absolvierung der Übung in der
Lage sein, für reale Anwendungsgebiete eine adäquate Datenbankstruktur zu entwerfen, zu implementieren und mittels einer Abfragesprache die gewünschten Informationen zu gewinnen.
1.2
Übungsmodus
Im Laufe der Laborübung sind aufeinander aufbauende Beispiele eigenständig zu lösen. Die Abgabe
und Überprüfung der Korrektheit der Übungs beispiele erfolgt im Rahmen von Prüfungs gesprächen, in
denen die Vertrautheit mit dem zugehörigen Stoffgebiet unter Beweis gestellt werden muss. Die Anmeldung zu diesen Gesprächen erfolgt über eine eigene Webseite. Diese wird im Laufe der Übung unter dem Abschnitt Aktuelles (unter http://www.dbai.tuwien.ac.atJeducationidbuel)
bekannt gegeben.
Am Ende des Semesters findet ein Übungstest statt. Um zu diesem Test antreten zu können, müssen
alle Beispiele positiv absolviert worden sein. Die Note der Laborübung ergibt sich ausschließlich aus
der beim Test erbrachten Leistung.
Übungsmodus der LU Datenbanksysteme 2.0
In dieser Laborübung müssen alle drei Übungsbeispiele
gelöst werden.
Übungsmodus der LU Datenbanksysteme 1.0
Es sind das zweite und dritte Übungsbeispiel zu lösen.
Beispiel gelöst werden.)
1
(Auf freiwilliger Basis kann auch das 1.
1.3
Übungs räume
Der Übungsraum befindet sich im neuen Informatikgebäude in der Favoritenstraße 9 - 11, im Erdgeschoß. Sie gelangen zum Informatiklabor, indem Sie das Gebäude durch den Eingang Favoritenstraße 11 betreten und gerade aus am Portier vorbeigehen. (Dieser Raum dient auch als Übungsraum für einige andere Informatikvorlesungen.)
Es stehen PCs mit Linux zur Verfügung, mit denen
Sie über Secure-Shell eine Verbindung zum Übungsrechner aufbauen können. Selbstverständlich
ist es auch möglich von zu Hause oder von ihrem Arbeitsplatz mit Secure-Shell auf den Übungsrechner zuzugreifen.
Beim Arbeiten unter Linux stehen die Programme Secure-Shell (ssh) und
Secure-Copy (scp) ohnedies zur Verfügung. Beim Arbeiten mit Microsoft Windows finden Sie unter http://www.chiark.greenend.org.ukrsgtathamiputty/download.html
einen ssh-Client (PuTTY) und
einen scp-Client (PSCP). Falls Sie lieber ein anderes Programm verwenden möchten, finden Sie unter
http://www.jfitz.comltips/ssh~oLwindows.html
eine Liste von möglichen Alternativen.
1.4
Anmeldung
Die Anmeldung zur Übung erfolgt in der Zeit von l.1O.2002 bis 10.10.2002 und ist mit Hilfe eines jeden Browsers über das WWW möglich. Die dafür zuständige Webpage wird zu Beginn der
Anmeldung im Abschnitt Aktuelles der Übungshomepage angeführt. Bitte beachten Sie, dass die
Anmeldung zu beiden LVAs (Datenbanksysteme LU 2.0 1l.0) nicht möglich ist. Nach erfolgter Anmeldung wird Ihnen eine Email zugesandt. Da es Übungsbeispiele zu je drei Gruppen gibt, wird Ihnen
in dieser Nachricht eine Gruppe zugeteilt. Auch enthält diese Email ein Initialpasswort, welches Sie
für folgende Anmeldungen benötigen:
• Anmeldung an den Rechnern im Informatiklabor
• Anmeldung am Übungsrechner
(falls Sie nicht von zu Hause aus arbeiten)
(minteka.dbai.tuwien.ac.at)
• Anmeldung zu den Abgabegesprächen
über das WWW (Details: siehe Übungshomepage)
Beachten Sie bitte, dass Sie, wenn Sie z.B. das minteka-Passwort mit passwd ändern, nach wie vor
das ursprüngliche Initialpasswort für die Anmeldung im Informatiklabor und für die Anmeldung zu
den Abgabegesprächen benötigen. Informationen zur Änderung dieser Passwörter finden Sie in der
FAQ-Sektion der Übungshomepage.
1.5
Pr 'ufungsgespäche
Die Gespräche selbst finden beim Tutor im Übungsraum statt. Die Fragen der Tutoren werden die für
das Beispiel relevanten Stoffgebiete aus dem Übungsskriptum abdecken und besonders auf die von
Ihnen gefundene Lösung Bezug nehmen. Haben Sie die Beispiele selbst erarbeitet, dann werden diese
Gespräche für Sie kein Problem darstellen. Sollte ein Tutor beim Prüfungs gespräch allerdings Mängel
bezüglich Ihres Wissenstandes feststellen, dann haben Sie noch die Möglichkeit das Beispiel direkt
2
bei einem der verantwortlichen Assistenten abzugeben. Da solche Fälle leider sehr häufig auftreten,
ist eine vorherige Anmeldung bei den betreuenden Assistenten notwendig. Die Tutoren haben die
ausdrückliche Anweisung erhalten in dieser Hinsicht ausnahmslos konsequent zu sein, vor allem bei
Zweifeln bezüglich der Eigenständigkeit der Ausarbeitung. In Ihrem eigenen Interesse sollten Sie
bedacht sein, schon beim ersten Antritt sehr gut vorbereitet zu sein. Sie ersparen damit uns und vor
allem sich selbst unnötigen Aufwand.
Sollten Sie ihre Beispiele schon früher fertig gestellt haben, dann können Sie auch schon vor der,
in der Termintabelle angeführten, .Jetztmöglichen Abgabe" das Gespräch bei einem Tutor absolvieren. Stellt der Tutor bei diesem Gespräch Mängel bezüglich Ihres Wissensstandes oder Fehler im
gelösten Beispiel fest, so wird das Prüfungsgespräch abgebrochen und Sie melden sich erneut zu einem Prüfungs gespräch. Prüfungsgespräche in den Tagen der "letztmöglichen Abgabe" können nicht
abgebrochen werden und müssen daher positiv oder negativ bewertet werden.
Die Anmeldung zu einem Prüfungsgespräch ist nur dann erforderlich, wenn Sie in den Tagen der
.Ietztmöglichen Abgabe" abgeben möchten. Die Webseite zur Anmeldung eines Prüfungsgesprächs
wird rechtzeitig im Abschnitt Aktuelles (unter http://www.dbai.tuwien.ac.atJeducationidbue/)
bekannt
gegeben.
1.6
Unterlagen & aktuelle Informationen
Das Skriptum ist zu Beginn der Vorlesung am 7.10.2002 erhältlich, danach im Sekretariat. In der
Newsgroup at.tuwien.lva.datenbanken
werden die neuesten Informationen bekanntgegeben und etwaige Fragen bezüglich der auszuarbeitenden Beispiele diskutiert. Sollten Sie mit der Funktionsweise
der installierten Newsreader nicht vertraut sein, so wenden Sie sich an einen Tutor.
1.7
Termine im Überblick
l.1O.2002 - 10.10.2002
7.10.2002
2l.1O.2002 - 25.10.2002
3l.1O.2002
Mo. 4.11.2002 - Fr. 8.11.2002
21.11.2002
Mo. 25.1l.2002 - Fr. 29.11.2002
10.12.2002
Do. 12.12.2002 - Mi. 18.12.2002
9.1.2003 16:30-18:30
Mitte März
Anmeldung zur Laborübung über das WWW
Übungsbeginn
Anmeldung bei den Tutoren bestätigen
(NUR für LVA LU Datenbanksysteme l.0!)
Ende der Anmeldefrist für das Prüfungsgespräch Beispiel 1
letztmögliche Abgabe Beispiel 1
Ende der Anmeldefrist für das Prüfungs gespräch Beispiel 2
letztmögliche Abgabe Beispiel 2
Ende der Anmeldefrist für das Prüfungsgespräch Beispiel 3
letztmögliche Abgabe Beispiel 3
Übungstest
Nachtragstest
Studenten der LVA LU Datenbanksysteme l.0 müssen ihre Anmeldung von Mo. 2l.1O.2002 bis
Fr. 25.10.2002 bei einem Tutor im Labor bestätigen. Sobald das erste Übungsbeispiel bzw. die
3
------
-
-
---
Anmeldung beim Tutor bestätigt wurde, wird auf jeden Fall ein Zeugnis zur entsprechenden
ausgestellt.
1.8
LVA
Übungstest
Am Do. 9.1.2003, 16:30 - 18:30 wird ein Übungstest zur Leistungsüberprüfung abgehalten. Die
rechtzeitige und erfolgreiche Abgabe der zugeteilten Übungsbeispiele ist Voraussetzung für eine
Zulassung zum Übungstest und gilt automatisch als Anmeldung.
Zum Test sind ausschließlich die Skripten (DBVO+DBUE) als Unterlagen zugelassen, keine ausgearbeiteten Beispiele.
Konnten Sie aus triftigen Gründen nicht beim Test antreten, dann besteht die Möglichkeit sich mittels ärztlicher oder amtlicher Bestätigung im Sekretariat zum Nachtragstest anzumelden. Aufgrund
der neuen Rechtslage muss diese Anmeldung innerhalb von zwei Wochen nach dem ersten Test
erfolgen, andernfalls wird ein negatives Zeugnis ausgestellt. Weiters sind alte Testangaben unter
http://www.dbai.tuwien.ac.atleducationldbue/verfügbar.
Tip: Die beste Vorbereitung für den Übungstest ist, Übungsbeispiele ohne Zuhilfenahme des
ORACLE Servers zu lösen und in letzter Stufe den ORACLE Server dazu zu verwenden, die Lösung
nach ihrer Richtigkeit zu überprüfen.
1.9
Betreuung
In den Übungsräumen können Sie die Betreuung durch Tutoren in Anspruch nehmen. Um auch
jenen Kollegen, die keine Zeit oder Lust haben im Labor zu arbeiten, mit Rat und Tat zur Seite stehen zu können, besteht die Möglichkeit, über [email protected]
Fragen
an die Tutoren zu richten.
Sie werden sich bemühen, während ihrer Aufsicht im Labor, so
schnell wie möglich zu antworten.
Sollten Sie Anregungen, Beschwerden oder Fragen haben,
die weder vom Skriptum, der Newsgroup (at.tuwien.lva.datenbanken),
des FAQ-Abschnitts unter
http://www.dbai.tuwien.ac.aUeducationidbue/.
von Kollegen oder den Tutoren beantwortet werden
konnten, so besteht die Möglichkeit via [email protected]
Fragen an die Übungsverantwortlichen zu richten.
Nähere Informationen zur Betreuung der Laborübung finden Sie unter
http://www.dbai.tuwien.ac.aUeducationidbue/
1.10
Ausarbeiten der Beispiele
1.10.1 Systemumgebung
Unser Server für den Übungsbetrieb ist minteka.dbai.tuwien.ac.at.
Secure-Shell zugänglich, egal ob Sie sich aus den Übungsräumen,
TU-Netz oder von zu Hause einloggen.
4
Dieser ist ausschließlich über
von einem anderen Rechner im
Für jeden Übungsteilnehmer wird ein UNIX-Account mit dem Usern amen u-cmatrikelnummercangelegt.
Das Starten der Übungsumgebung (sqlplus) wird im SQL-Teil des Skriptums vorgestellt. Vergessen
Sie nicht, sich nach jeder Sitzung wieder mit logout oder exit aus dem System auszuloggen!
1.10.2 Eingabe der Beispiele
Zur Eingabe Ihrer Beispiele stehen Ihnen nach dem Einloggen auf minteka.dbai.tuwien.ac.at
der
vi- und der emacs-Editor zur Verfügung. Sollten Sie mit diesen nicht vertraut sein, so finden Sie auf
folgenden Web seiten Beschreibungen:
http://math.la.asu.edu/vLtutorial/vicontents.html
http://www.geek
-girl.comJemacs/refcard.html
Als sehr einfach zu bedienender (dafür aber auch nicht sehr leistungsfähiger)
zur Verfügung.
Editor steht auch pico
1.10.3 Secure Shell
Folgendermaßen
können Sie sich auf minteka mittels Secure Shell einloggen:
ssh benutzername @minteka.dbai.tuwien.ac.at
[email protected]'s
password:
Nach Eingabe des Passwortes sind Sie auf minteka eingeloggt.
1.10.4 Secure Copy
Secure Copy dient dazu, Files von Ihrem Rechner auf minteka (und umgekehrt) zu kopieren.
Beispiel für einen Filetransfer: Sie kopieren aus dem aktuellen Arbeitsverzeichnis Ihres lokalen Rechners die Datei bsp1.sql unter dem Namen abgabe1.sql in Ihr HOME- Verzeichnis auf minteka.
scp bspl.sql [email protected]:abgabel.sql
username @minteka.dbai.tuwien.ac.at's
password:
Nach Eingabe des Passwortes wird die Datei auf minteka kopiert.
5
Kapitel 2
Beispielsammlung
2.1
Beispiel 1
2.1.1
Allgemeines
1
Lehrziel:
• Interaktive Verwendung von SQL
Bezüglich der interaktiven Verwendung von SQL, wie Sie sie für die Lösung von Beispiel! benötigen,
lesen Sie in den Abschnitt "Interaktives SQL" (Kapitel 3) in den Übungsunterlagen.
Das Beispiel ist als Commandfile auszuarbeiten. In diesem File müssen die Abfragen in der gleichen Reihenfolge wie in der AufgabensteIlung stehen. Halten Sie sich bitte an die Richtlinien zur
Erstellung eines Commandfiles (siehe Kapitel 3).
Nehmen Sie bitte einen Ausdruck Ihres Übungsbeispieles zur Abgabe mit; ohne Ausdruck
können Sie nicht abgeben.
Beachten Sie bitte, dass Ihre Ausgabe dem Format (Spaltenüberschriften,
angegebenen Musterlösungen entsprechen muss.
2.1.2
Sortierung usw.) der hier
Gruppe A: Jungschargruppe
In einer Jungschargruppegruppe
werden Daten zu Jungschargruppen (Gruppe) gespeichert. Jede
Gruppe hat einen oder mehrere Leiter (Leiter) und besteht aus einer maximalen Anzahl von Mitgliedern (Mitglied). Jeder Leiter kann maximal eine Gruppe betreuen. Weiters werden unterschiedliche
Jungscharlager (Lager) veranstaltet, auf denen Wettbewerbe (Wettbewerb) durchgeführt werden. Ein
Wettbewerb wird von einem Leiter organisiert.
(In diesem Beispiel wird angenommen, dass die Sozialversicherungsnummer
nur vierstellig aber
trotzdem eindeutig ist.)
iDiese Angaben sind auch unter http://www.dbai.tuwien.ac.at/education/dbue/
Formaten erhaltlich.
7
in verschiedenen
CREATE TABLE gruppe
(gnr
INTEGER NOT NULL,
gname VARCHAR2(20) NOT NULL,
maxanz INTEGER,
PRIMARY KEY (gnr));
CREATE TABLE leiter (svnr
INTEGER NOT NULL,
ausweisnr INTEGER NOT NULL,
vorname
VARCHAR2(20) ,
nachname VARCHAR2(20) ,
gehalt
INTEGER,
gnr
INTEGER,
PRIMARY KEY (svnr),
UNIQUE (ausweisnr),
FOREIGN KEY (gnr) REFERENCES gruppe (gnr));
CREATE TABLE mitglied
(vorname
nachname
geburtsdatum
gnr
PRIMARY KEY
FOREIGN KEY
CREATE TABLE lager (lagnr
lagname
ort
preis
PRIMARY
CREATE TABLE wettbewerb
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
gruppe
gruppe
gruppe
gruppe
gruppe
gruppe
gruppe
gruppe
gruppe
gruppe
gruppe
gruppe
gruppe
VARCHAR2(20) NOT NULL,
VARCHAR2(20) NOT NULL,
DATE NOT NULL,
INTEGER,
(vorname, nachname, geburtsdatum),
(gnr) REFERENCES gruppe (gnr));
INTEGER NOT NULL,
VARCHAR (20)r
VARCHAR(20) ,
INTEGER,
KEY (lagnr));
(lagnr
INTEGER NOT NULL,
datum
DATE,
ausweisnr INTEGER,
PRIMARY KEY (lagnr, datum),
FOREIGN KEY (lagnr) REFERENCES lager (lagnr),
FOREIGN KEY (ausweisnr) REFERENCES leiter (ausweisnr));
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
(1, 'Elfen' 15) ;
(2, 'E1ben' , 15) ;
(3, 'Zauberer' , 15) ;
(4,
'Teddys' , 15) ;
(5, 'Monkeys' , 20) ;
(6,
'Quaxis' , 20) ;
(7,
'Te1etubbies' , 25) ;
(8,
'Muppets' , 25) ;
(9,
'Bubus' , 10) ;
(10,'Blues' r 10) ;
(11, 'Reds' 25) ;
(12,'Orks', 20) ;
(13,'Drachen', 15) ;
r
r
8
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
leiter
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
mitglied
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
lager
lager
lager
lager
lager
lager
lager
lager
lager
lager
lager
lager
lager
lager
(1234,4531,
(2244,2378,
(0808,5673,
(1235,8843,
(1236,1245,
(1237,9763,
(1238,6531,
(1239,8431,
(1240,6791,
(1241,8361,
(1242,9142,
(1243,6271,
(1244,9341,
(1245,8271,
(1246,9734,
(1247,9987,
(1248,7352,
(1249,7641,
(1250,7511,
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
'Hans', 'Kolarik',
90, 1);
'Andrea',
'Steiner' , 150, 1);
'Horst', 'Liebhard',
200, 7);
'Claudia',
'Huber', 100, 7);
'Beate', 'Leuchte',
110, 7);
'Alexandra',
'Muster', 250, 2);
'Michaela',
'Liebhard',
256, 3);
'Anke', 'Gaubitzer' , 250, 3);
'Susi', 'Liebhard',
250, 4);
'Barbara',
'Schwarz',
250, 4);
'Peter' , 'Rot', 170, 4);
'Peter' , 'Liebhard',
170, 5);
'Anja' , 'Fischer',
100, 6);
'Markus',
'Wilson', 100, 6);
'Rony', 'Bach', 130, 6);
'Andi', 'Liebhard',
130, 8);
'Moni' , 'Koller', 140, 8);
'Debbie',
'Sommer', 140, 8);
'Angela',
'Dusek', 150, 9);
('Martin',
'Griesser', '13-JUL-1998',
2);
('Daniela' , 'Ko1arik', '06-JUN-1998',
2);
('Mario',
'Nabel', '20-JUN-1998',
2);
('Hugo', 'Nabel', '08-SEP-1998',
2);
('Angelika',
'Schmidt', '12-FEB-1998',
2);
('Hubert',
'Hanser' ,'13-APR-1998',
2);
('Guido',
'Bauer' ,'13-DEC-1998',
2);
('Karin' , 'Kauer' ,'13-SEP-1998',
2);
('Greald',
'Neuner' ,'10-AUG-1997',
3);
('Monika',
'Neuner' ,'10-AUG-1997',
3);
('Walter',
'Eber' ,'12-JAN-1997',
3);
('Lena', 'Schwarz' ,'17-MAR-1997',
3);
('Sara', 'Schwarz', '05-AUG-1997',
4);
('Anna', 'Scherz', '05-AUG-1997, , 4);
('Karin' , 'Schmerz', '22-JUL-1997',
4);
(1, 'Pol', 'Podersdorf' ,1220);
(2, 'W1' ,'Wien' ,1400);
(3, 'Ba1', 'Baden' ,1260);
(4, 'Lo1', 'Loipersdorf' ,1300);
(5, 'Wal', 'Waltersdorf' ,200);
(6, 'Ha1', 'Halbturn' ,250);
(7, 'Fr1', 'Frauenkirchen' ,480);
(8, 'Ne1', 'Neusiedl' ,1200);
(9, 'Ru1', 'Rust' ,1350);
(10, 'Vi1', 'Villach' ,100);
(11, 'Sa1', 'Salzburg' ,120);
(12,'In1', 'Innsbruck' ,125);
(13, 'Wo1' ,'Wolfsberg' ,789);
(14,'Fi1' ,'Fischamend' ,800);
9
-------.
-----_.
INSERT
INSERT
INTO
INTO
lager
lager
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
wettbewerb
VALUES
VALUES
(15,'Gä1', 'Gänserndorf' ,830);
(16,'Ab1', 'Absdorf' ,456);
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
(1, 'Ol-AUG-2001' ,4531);
(2, '02-AUG-2001' ,4531);
(3,'Ol-JUN-2001' ,4531);
(4, 'Ol-SEP-2001' ,8361);
(5,'06-JUN-2001' ,8361);
(6,'20-JUN-2001' ,8361);
(7, '03-JUN-2001', 4531);
(8, '15-AUG-2001' ,4531);
(9,'Ol-0CT-2001',4531);
(10,'11-FEB-2001'
,4531);
(11, '15-APR-2001',4531);
(12, '20-JUN-2001' ,6531);
(13, 'Ol-JUN-2001' ,6531) ;
(14, '02-JUN-2001' ,9734);
(15, '01- APR -2 001' ,6531) ;
(16, 'Ol-JUN-2001' ,6531);
(1, '05-SEP-2001', 6791);
(2,'20-JUN-2001' ,8271);
(3, '05-JUN-2001' ,6791) ;
(4,'05-MAR-2001' ,6791);
(5,'05-JUN-2001',9734);
(6, '05-AUG-2001' ,9734);
(7, '05-SEP-2001' ,1245) ;
(8, '20-JUN-2001',9734);
1. Geben Sie eine Liste aller Lager aus, auf denen Wettbewerbe stattfinden, die von einem Leiter
mit dem Nachnamen 'Liebhard' organisiert werden. Geben Sie die Liste absteigend sortiert
nach dem Datum des Wettbewerbs aus.
LAGERNAME
DATUM
Pol
Inl
Bal
Wol
Abl
Gäl
Lol
05-SEP-Ol
20-JUN-Ol
05-JUN-Ol
Ol-JUN-Ol
Ol-JUN-Ol
Ol-APR-Ol
05-MAR-Ol
7 rows
selected.
2. Geben Sie für alle Gruppen den Namen der Gruppe, sowie die Anzahl der dazugehörigen Mitglieder aus. Sortieren Sie aufsteigend nach Gruppennamen.
10
GRUPPENNAME
ANZAHL
Blues
Bubus
Drachen
EIben
Elfen
Monkeys
Muppets
Orks
Quaxis
Reds
Teddys
Teletubbies
Zauberer
o
o
o
8
o
o
o
o
o
o
3
o
4
13 rows selected.
3. Um festzustellen, ob sich die geplanten Lager lohnen, sollen Sie eine Abfrage erstellen, welche
alle teuren Lager ausgibt, in denen seit 1.6.2001 ein Wettbewerb stattgefunden hat. Ein Lager ist
dann teuer, wenn der Preis nicht mehr als 300 Euro unterhalb des Preises des teuersten Lagers
liegt.
LAGNR
PREIS
1
2
3
4
8
9
1220
1400
1260
1300
1200
1350
6 rows selected.
4. Geben Sie die durchschnittlichen
denden Wettbewerbe an.
DATUM
01.06.2001
05.06.2001
Lager-Preise für die am 1.6.2001 bzw. am 5.6.2001 stattfin-
DURCHSCHNITTSPREIS
835
730
11
5. Um festzustellen, welche Gruppen besonders hohe Kosten verursachen, sollen alle Gruppen,
bei denen Kosten mehr als 200 Euro pro Gruppe betragen, ausgegeben werden. Die Kosten
entsprechen der Summe der Gehälter der Leiter.
GRUPPENNAME
KOSTEN
EIben
Elfen
Muppets
Quaxis
Teddys
Teletubbies
Zauberer
250
240
410
330
670
410
506
7 rows selected.
6. Geben Sie die Anzahl der Mitglieder aus, die in Gruppen sind, die weniger als 2 Leiter haben,
sowie die Anzahl der Mitglieder, die in Gruppen sind, die 2 oder mehr Leiter haben. Jedes
Mitglied kann nur zu einer Gruppe gehören.
8
2.1.3
7
Gruppe B: Wifi-Kurs
Das Wifi-Institut speichert Daten zu den Kursteilnehmern (Teilnehmer). Weiters werden die Daten
zu Zeugnissen (Zeugnis) und den Kursleitern (Kurs leiter) gespeichert. Ebenfalls noch die Kurse
(Kurs), die angeboten werden. Ein Zeugnis wird von einem Kursleiter an einen Teilnehmer für einen
bestimmten Kurs ausgestellt.
CREATE TABLE teilnehmer
(tnr
vorname
name
PRIMARY
INTEGER NOT NULL,
VARCHAR2(20) ,
VARCHAR2(20) ,
KEY (tnr));
CREATE TABLE kursleiter
(leitnr INTEGER NOT NULL,
kname VARCHAR2 (20),
PRIMARY KEY (leitnr));
CREATE TABLE kurs (knr INTEGER NOT NULL,
bez VARCHAR2 (20),
PRIMARY KEY (knr));
12
CREATE TABLE zeugnis (tnr
INTEGER NOT NULL,
knr
INTEGER NOT NULL,
note
INTEGER,
leitnr INTEGER NOT NULL,
PRIMARY KEY (tnr, knr) ,
FOREIGN KEY (tnr)
REFERENCES teilnehmer (tnr),
FOREIGN KEY (knr)
REFERENCES kurs (knr)
FOREIGN KEY (leitnr) REFERENCES kursleiter (leitnr}) ;
r
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
teilnehmer
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
(1234,'Erwin', 'Maier');
(1235,'Stephan', 'Steiner') ;
(1236,'Maria' , 'Liebhard') ;
(1237,'Christa', 'Huber') ;
(1238,'Susanne', 'Leuchte') ;
(1239,'Renate', 'Muster') ;
(1240,'Hans', 'Liebhard' );
(1241,'Anita', 'Gaubitzer') ;
(1242, 'Jochen' r 'Liebhard' );
(1243,'Joachim', 'Schwarz') ;
(1244,'Herta' , 'Rot') ;
(1245,'Werner' , 'Liebhard' );
(1246,'Thomas', 'Fischer');
(1247,'Michael' , 'Wi1son') ;
(1248,'Astrid' , 'Bach') ;
(1249,'Elias', 'Liebhard' );
(1250,'Alex' r 'Koller');
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
kursleiter
kursleiter
kursleiter
kursleiter
kursleiter
kursleiter
kursleiter
kursleiter
kursleiter
kursleiter
kursleiter
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
(5234,
(5235,
(5236,
(5237,
(5238,
(5239,
(5240,
(5241,
(5242,
(5243,
(5244,
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
kurs
kurs
kurs
kurs
kurs
kurs
kurs
kurs
kurs
kurs
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
'Steiner');
'Jochen Huber');
'Anke Baum');
'Joachim Fischer');
'Markus Doming') ;
'Barbara Neck');
'Stephan Gau');
'Erich Gruss');
'Sandra Weber');
'Norbert Ganz');
'Rudi Stau') ;
(100, 'Mathematik') ;
(200, 'Deutsch') ;
(300, 'Englisch') ;
(400, 'Spanisch') ;
(500, 'Programmieren');
(600, 'Italienisch');
(700, 'BWL') ;
');
(800, 'Algori t.hmeri
(900, 'Psychologie') ;
(1000, 'Mathematische Logik') ;
l3
INSERT
INTO
kurs
VALUES
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
zeugnis
zeugnis
zeugnis
zeugnis
zeugnis
zeugnis
zeugnis
zeugnis
zeugnis
zeugnis
zeugnis
zeugnis
(1100,
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
'Rechnernetzwerke')
(1234,
(1234,
(1234,
(1237,
(1237,
(1238,
(1240,
(1240,
(1241,
(1243,
(1244,
(1244,
100,
200,
400,
200,
400,
400,
700,
800,
900,
1000,
1000,
1100,
1,
3,
2,
1,
5,
3,
2,
5,
4,
5,
2,
3,
;
5242) ;
5234) ;
5242) ;
5238) ;
5240) ;
5234) ;
5242) ;
5234) ;
5235) ;
5243) ;
5240) ;
5242) ;
1. Welche Teilnehmer bekamen vom Kursleiter Steiner schon eine positive Note? Geben Sie
vollen Namen und die Kursnummer der Teilnehmer sortiert nach Familienname aus.
VORNAME
FAMILIENNAME
Susanne
Erwin
Leuchte
Maier
KURSNUMMER
400
200
2. Geben Sie eine Liste aller ausgestellten Zeugnisse sortiert nach dem Namen des Kursleiters und
danach nach dem Familiennamen des Teilnehmers aus.
LEITER
Jochen
Markus
Norbert
Sandra
Sandra
Sandra
Sandra
Steiner
Steiner
Steiner
Stephan
Stephan
12 rows
Huber
Doming
Ganz
Weber
Weber
Weber
Weber
Gau
Gau
TEILNEHMER
KURS
Gaubitzer
Huber
Schwarz
Liebhard
Maier
Maier
Rot
Leuchte
Liebhard
Maier
Huber
Rot
Psychologie
Deutsch
Mathematische
Logik
BWL
Mathematik
Spanisch
Rechnernetzwerke
Spanisch
Algorithmen
Deutsch
Spanisch
Mathematische
Logik
selected.
3. Geben Sie die Anzahl der Zeugnisse, die pro Kurs ausgestellt wurden, geordnet nach Kursbezeichnung aus.
14
KURS
ANZAHL
Algorithmen
BWL
Deutsch
Englisch
Italienisch
Mathematik
Mathematische
Logik
Programmieren
Psychologie
Rechnernetzwerke
Spanisch
11 rows
1
1
2
o
o
1
2
o
1
1
3
selected.
4. Geben Sie alle Paare von Teilnehmern aus, die denselben Kurs besucht und positiv abgeschlossen haben. Auszugeben sind die Kursnummer und die Namen der beiden Teilnehmer. Sortieren
Sie die Tupel nach der Kursnummer, den Namen des Ersten und des Zweiten.
KNRNAME
NAME
200
200
400
400
Maier
Huber
Maier
Leuchte
Huber
Maier
Leuchte
Maier
5. Gesucht werden alle Teilnehmer, die in einem Kurs besser als oder gleich wie der Durchschnitt
des Kurses abgeschnitten haben. Geben Sie den Familiennamen des Teilnehmers, die Bezeichnung des Kurses, die Note des Teilnehmers in diesem Kurs als auch die Durchschnittsnote des
Kurses an.
TEILNEHMER
KURS
NOTE
Maier
Huber
Maier
Leuchte
Liebhard
Liebhard
Gaubitzer
Mathematik
Deutsch
Spanisch
Spanisch
BWL
Algorithmen
Psychologie
15
1
D_NOTE
1
1
2
2 3.33333333
3 3.33333333
2
2
5
5
4
4
Mathematische
Logik
Rechnernetzwerke
Rot
Rot
2
3
3.5
3
9 rows selected.
6. Geben Sie für jeden Kursleiter an, wie viele Zeugnisse er bereits ausgestellt hat. Geben Sie
weiters für jeden Kursleiter an, ob er im Durchschnitt eher gut (Durchschnittsnote < 3) oder
eher schlecht (Durchschnittsnote >= 3) benotet. Die Sortierung kann bei diesem Beispiel
vernachlässigt werden.
NOTE LEITER
ZEUGNISSE
--------------------
----------
1
4
1
1
Markus Doming
Sandra Weber
Jochen Huber
Norbert Ganz
>= 3 Steiner
>= 3 Stephan Gau
< 3
< 3
>= 3
>= 3
3
2
6 rows selected.
2.1.4
Gruppe C: Ticket-Service
Es werden Daten zu Ticketverkäufen (Verkauf) und Filialen (Filiale) in eine Datenbank gespeichert.
Weiters werden Daten zu den Angestellten (Angestellter) sowie zu den Ticketgruppen (Ticketgruppe)
gespeichert. Ebenfalls wird bei den Angestellten die Art der Tätigkeit vermerkt.
CREATE TABLE ticketgruppe
(tnr
INTEGER NOT NULL,
name
VARCHAR2(30) ,
verkaufspreis INTEGER,
PRIMARY KEY (tnr));
CREATE TABLE filiale (fname
fort
groesse
PRIMARY
CREATE TABLE angestellter
VARCHAR2(20) NOT NULL,
VARCHAR2 (20) NOT NULL,
INTEGER,
KEY (fname, fort));
INTEGER NOT NULL,
(svnr
VARCHAR2 (20),
name
teilzeit VARCHAR2 (1),
INTEGER,
gehalt
VARCHAR2 (20),
fname
VARCHAR2 (20),
fort
PRIMARY KEY (svnr),
16
FOREIGN KEY (fname, fort)
REFERENCES filiale (fname, fort));
CREATE TABLE verkauf
(vnr
INTEGER NOT NULL,
tnr
INTEGER NOT NULL,
svnr
INTEGER NOT NULL,
datum DATE,
anzahl INTEGER NOT NULL,
PRIMARY KEY (vnr),
FOREIGN KEY (tnr) REFERENCES ticketgruppe (tnr),
FOREIGN KEY (svnr) REFERENCES angestellter (svnr));
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
ticketgruppe
ticketgruppe
ticketgruppe
ticketgruppe
ticketgruppe
ticketgruppe
ticketgruppe
ticketgruppe
ticketgruppe
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
filiale
filiale
filiale
filiale
filiale
filiale
filiale
filiale
filiale
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
(1,
(2,
(3,
(4,
(5,
(6,
(7,
(8,
(9,
'Bob Dylan Sitzplatz', 10);
'Bob Dylan Stehplatz', 5);
'Bob Dylan Studenten', 4);
'Oasis Kinder', 12);
'Oasis Senioren', 15);
'Oasis Erwachsene', 20);
'AIR 1. Reihe', 15);
'AIR 2.-5. Reihe', 13);
'AIR ab 6. Reihe', 11);
('Geiselbergstrasse' , 'Wien', 120);
('Baumgasse' , 'Wien', 300);
('Herbststr. 2', 'Wien', 600);
('Grueng. 12', 'Graz', 60);
('Fichtengasse' , 'Graz' , 70);
('Bergg. 8', 'Wien', 78);
('Bergg. 11', 'Wien', 130);
('Rainerg. 10', 'Wien', 180);
('Gudrunstr. 31', 'Graz', 90);
INSERT INTO angestellter
VALUES (1234, 'Herbert Huber', 'N', 1800, 'Baumgasse' , 'Wien');
INSERT INTO angestellter
VALUES (1235, 'Doris Gruber' , 'J', 850, 'Baumgasse' , 'Wien');
INSERT INTO angestellter
VALUES (1236, 'Cilli Zank', 'N', 1700, 'Rainerg. 10', 'Wien');
INSERT INTO angestellter
VALUES (1237, 'Anna Bong', 'N', 2000, 'Rainerg. 10', 'Wien');
INSERT INTO angestellter
VALUES (1238, 'Hans Maier' , 'J',
1600,'Herbststr. 2' , 'Wien');
INSERT INTO angestellter
VALUES (1239, 'Peter Wuff', 'N', 1900, 'Herbststr. 2', 'Wien');
INSERT INTO angestellter
VALUES (1240, 'willi Wuff', 'N', 1900, 'Herbststr. 2', 'Wien');
INSERT INTO angestellter
VALUES (1241, 'Thomas Grazer', 'J',
1000, 'Herbststr. 2', 'Wien');
INSERT INTO angestellter
17
VALUES
INSERT INTO
VALUES
INSERT INTO
VALUES
INSERT INTO
VALUES
INSERT INTO
VALUES
INSERT INTO
VALUES
(1242, 'Tobi Tube', 'N', 2000, 'Grueng. 12', 'Graz');
angestellter
(1243, 'Mari Mair',
'N', 2200, 'Gudrunstr.
31', 'Graz');
angestellter
(1244, 'Andi Schrunz',
'N', 1700, 'Bergg. 8', 'Wien');
angestellter
(1245, 'Markus Huber',
'N', 1700, 'Bergg. 8', 'Wien');
angestellter
(1246, 'Natalie Kranz',
'J', 1200, 'Bergg. 8', 'Wien');
angestellter
(1247, 'Antje Glanz',
'N', 1800, 'Bergg. 11', 'Wien');
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
verkauf
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
(1, 1, 1234, '01-JAN-2001',
(2, 2, 1235, '02-FEB-2001',
(3, 3, 1236, '03-MAR-2001',
(4, 4, 1237, '04-APR-2001',
(5, 5, 1238, '06-JUN-2001',
(6, 6, 1239, '23-NOV-2001',
(7, 7, 1240, '17-0CT-2001',
(8, 8, 1240, '11-AUG-2001',
(9, 9, 1242, '11-JAN-2001',
(10, 1, 1243, '23-JAN-2001',
(11, 2, 1244, '14-FEB-2001',
(12, 4, 1244, '12-JAN-2001',
(13, 6, 1246,'23-JAN-2001',
(14, 8, 1247, '30-APR-2001',
(15, 2, 1246, '12-JAN-2001',
(16, 2, 1237,'15-JUN-2001',
(17, 4, 1239,'23-JAN-2001',
(18, 6, 1238,'22-MAR-2001',
(19, 2, 1239,'18-MAR-2001',
(20, 4, 1239, '01-JAN-2001',
(21, 1, 1239, '01-JAN-2001',
(22, 3, 1239, '03-FEB-2001',
(23, 5, 1242,'12-FEB-2001',
(24, 1, 1234,'11-JUN-2001',
(25, 2, 1234,'01-JAN-2001',
(26, 3, 1234, '12-JUN-2001',
30);
40);
50);
10);
20);
30);
40);
50);
10);
20);
4);
40);
50);
30);
10);
1);
30);
2);
50);
100);
12);
33);
32);
31);
11);
36);
1. Geben Sie alle Angestellten
Vollzeit arbeiten.
aus, die in der Filiale Baumgasse
arbeiten und ob Sie Teilzeit oder
NAME
T
Doris Gruber
Herbert Huber
J
N
2. Geben Sie alle Tickets aus, die seit dem 01.06.2001
kaufspreis mehr als 10 Euro beträgt.
18
verkauft wurden und bei denen der Ver-
TNR NAME
5
6
7
8
Oasis Senioren
Oasis Erwachsene
AIR 1. Reihe
AIR 2.-5. Reihe
3. Geben Sie die Anzahl der Filialen aus, die größer als 110m2 sind und weniger als 2 Angestellte
haben, oder kleiner als 100m2 sind und mehr als 1 Angestellten haben. Filialen ohne Mitarbeiter
sollen nicht mitgezählt werden.
ANZAHL
BEDINGUNG
1 Gr<100
1 Gr>110
+ Ang>l
+ Ang<2
4. Geben Sie alle Angestellten
eingenommen haben.
aus, die seit dem 01.06.2001 Verkäufe mit mehr als 400 Euro
SVNRNAME
EINNAHME
1234 Herbert Huber
1239 Peter Wuff
1240 Willi Wuff
5. Geben Sie das durchschnittliche
VOLLZEIT
454
600
1250
Gehalt der Vollbeschäftigten
bzw. der Teilzeitbeschäftigten.
TEILZEIT
1870
1162.5
6. Geben Sie alle Angestellten, den Status (Voll-od. Teilzeit) und die Anzahl der Verkäufe aus.
Listen Sie nur Angestellte auf, die weniger als 3 Verkäufe getätigt haben und sortieren Sie nach
Namen der Angestellten aufsteigend.
SVNRNAME
T
1244
1237
1247
1236
N
Andi Schrunz
Anna Bang
Antje Glanz
Cilli Zank
19
ANZAHL
N
2
2
N
1
N
1
-------
1235
1238
1243
1245
1246
1241
1242
1240
Doris Gruber
Hans Maier
Mari Mair
Markus Huber
Natalie Kranz
Thomas Grazer
Tobi Tube
willi Wuff
J
J
1
2
N
1
N
o
J
2
J
o
N
2
N
2
12 rows selected.
2.2
Beispiel 2
2.2.1 Allgemeines
In den letzten Jahren wurde deutlich, dass ein Großteil der Übungsteilnehmer dazu neigt, die Abgabe
soweit wie möglich hinauszuzögern. Das Resultat dieses Verhaltens war stets eine Unmenge an Abgabewilligen an den letzten Tagen des Übungsbetriebes, die von den Tutoren nicht bewältigt werden
konnte und deren Beispiel daher negativ beurteilt werden musste. In Ihrem eigenen Interesse sollten
Sie deshalb bestrebt sein, einen möglichst frühen Termin (ideralerweise noch vor der .Jetztmöglichen
Abgabewoche") zu wählen, um bei einer etwaigen falschen Lösung noch genügend Zeit für die notwendigen Korrekturen zu haben.
Lehrziel:
• Anwendung des EER-Modells
• Umsetzung eines konkreten Modells in eine relationale Datenbank
• Einsatz von Clustern und Indizes
Lösen Sie für das Beispiel Ihrer Gruppe folgende Aufgaben.
• Lesen Sie den Artikel ,,A Logical Design Methodology for Relational Databases" von
TJ.Teorey et al. (siehe Anhang C). Erstellen Sie aufgrund des dort beschriebenen Verfahrens
ein Extended-Entity -Relationship- Diagramm.
• Leiten Sie aus dem EER-Diagramm die Relationen der Datenbank in 3. Normalform so ab, dass
sie verbundtreu und abhängigkeitstreu sind. Wiederholen Sie dazu das entsprechende Kapitel
im Vorlesungsskriptum.
• Organisieren Sie die abgeleiteten Relationen in Cluster und legen Sie eventuell noch Indexe an.
Beziehen Sie sich dabei nur auf die angegebenen Abfragen und versuchen Sie deren Effizienz zu
steigern. Informationen über Indexe und Cluster finden Sie in diesem Skriptum in Kapitel 3.3.2.
20
• Definieren Sie die ermittelten Cluster und Indizes mit den SQL-Statements CREATE CLUSTER beziehungsweise CREATE INDEX und die Relationen mit dem SQL-Statement
CREATE TABLE unter Beachtung der jeweiligen Constraints (NOT NULL, PRIMARY
KEY, FOREIGN KEY). Lesen Sie dazu zuerst den Teil über interaktives SQL in den Arbeitsunterlagen und studieren Sie insbesondere die Definitionen der benötigten SQL-Kommandos
(siehe Kapitel 3). Verwenden Sie dabei nur die Datentypen INTEGER, VARCHAR2 und
DATE. Tragen Sie in jede Relation mit INSERT mindestens 6 Tupel ein. Versuchen Sie im
Hinblick auf die zu formulierenden Queries möglichst aussagekräftige Testdaten zu finden.
• Geben Sie alle Queries mit SELECT -Statements aus. Anschließend geben Sie sämtliche Datenbankobjekte, die Sie erstellt haben, wieder frei. Dazu verwenden Sie DROP CLUSTER,
DROP INDEX, DROP TABLE und DROP VIEW.
• Für die Abgabe erstellen Sie ein Commandfile, das sämtliche für die Lösung der Aufgabenstellung benötigten SQL-Statements enthält.
Geben Sie beim Abgabegespräch das EER-Diagramm (lesbar handschriftlich oder gedruckt), den
Ausdruck des Commandfiles und den Ausdruck des Ergebnisfiles (spool!) beim Tutor ab. Dieser
wird im Rahmen des Abgabegesprächs Ihre Lösung kontrollieren und, wenn alles richtig ist, die
Abgabe bestätigen. Beachten Sie bitte, dass eine Abgabe ohne Ausdruck nicht möglich ist. Nach der
Abgabe verbleiben das EER und der Ausdruck des Commandfiles bzw. des Ergebnisfiles beim Tutor.
2.2.2
Gruppe A: Autovermietung Buchbinder
Das Unternehmen Buchbinder vermietet Autos. Daten über Abteilungen, Beschäftigte, Autos und
Ersatzteile werden erhoben. Folgende Informationen über die Abhängigkeit von Daten wurden ermittelt:
Die Autovermietung ist in Abteilungen unterteilt, die jeweils einen Namen und eine eindeutige Nummer besitzen. Zusätzlich sind alle Beschäftigten einer Abteilung angegeben. Jeder Beschäftigte hat
einen Namen, eine Wohnadresse (ein einfaches Attribut ,,Adresse" genügt hier) und eine eindeutige
Personalnummer. Jeder Beschäftigte gehört zu einer bestimmten Abteilung.
Weiters ist für jeden Beschäftigten seine Wochenarbeitszeit in Stunden und seine Lohnklasse (14) bekannt. Jeder Lohnklasse entspricht ein bestimmter Stundenlohn, der auch in der Datenbank
gespeichert wird. Jeder Beschäftigte hat eine Ausbildung für keinen, einen oder mehrere Autotypen.
Ein Autotyp wird durch die Typbezeichnung eindeutig identifiziert. Weiters werden für jeden Autotyp
die Wartungskosten gespeichert. Ein Ersatzteil ist genau einem Autotyp zugeordnet und hat eine
eindeutige Nummer, eine Bezeichnung und eine Größe.
Jedes Auto gehört einem Autotyp an, hat ein eindeutiges Autokennzeichen und gehört zu einer Abteilung. Zusätzlich sind zu jedem Auto der Kaufpreis und der Preis für die Vermietung pro Tag bekannt.
Weiters wird bei jeden Auto gespeichert, wie oft es pro Monat vermietet werden soll (Attribut: Sollvermietung) .
Ein Beschäftigter vermietet ein Auto für einen bestimmten Tag.
Weiters sind einige Abfragen bekannt, die regelmässig durchgeführt werden sollen:
21
1. Für statistische Auswertungen werden Autos gesucht, deren Anzahl an Vermietungen um mindestens 10% größer ist als ihre Sollvermietung. Es soll dabei das Autokennzeichen, die Anzahl
der vermieteten Tage und die Sollvermietung ausgegeben werden. Es genügt, wenn Sie die
Auswertung für einen bestimmten (von Ihnen frei wählbaren und mit Ihren Testdaten abgestimmten) Monat ausgeben.
2. Es sollen Gehaltslisten erstellt werden. Der Wochenlohn errechnet sich nach folgender Formel:
Wochenlohn = (Wochenarbeitszeit * Stundenlohn der entsprechenden Lohnklasse). Es soll der
Name des Angestellten, der Abteilungsname und der Wochenlohn ausgegeben werden.
3. Pro Lohnklasse wird die Anzahl jener Beschäftigten im Unternehmen gesucht, die Autos vermieten, für deren Autotyp Sie keine Ausbildung haben.
4. Es wird eine Aufstellung benötigt, die nach Abteilungsnummer sortiert ist, und für jede Abteilung die Anzahl der Autos und die gesamten Wartungskosten der Abteilung enthält.
5. Weiters wird für eine Liste benötigt, die angibt, wieviele Beschäftigte in einer Abteilung einen
bestimmten Autotyp vermieten. Diese Liste soll nach Abteilungsnummer sortiert sein.
2.2.3
Gruppe B: PAY TV Fernsehsender
Für den einen Fernsehsender ist eine Datenbank zu entwerfen und zu implementieren. Dazu werden die Daten jeder angebotenen Filmserie festgehalten, wobei jede Serie eine eigene Seriennummer
erhält. Weiters werden die Anzahl der Episoden, die Episodendauer (in Minuten) und der Preis der
Serie dazu gespeichert.
Für Serien, die besonders häufig ausgestrahlt werden, gibt es Pakete von Serien, die eine eindeutige
Bezeichnung und einen Preis besitzen. Zu einer Serie werden der Regisseur und die Schauspieler
gespeichert. Beim Regisseur werden die üblichen Personendaten (SVNR, Name, Alter) gespeichert.
Zum Schauspieler wird nur die Sozialversicherungsnummer
und der Name gespeichert.
Zu den Kunden, die die Serie auswählen, wird eine eindeutige Kundennummer vergeben. Kunden
können Privatpersonen als auch Firmen sein. Zu den Privatpersonen werden folgende Daten gespeichert: Name, Alter, Nationalität und Sprache (ein Attribut für die Sprache genügt). Zu den Firmen
wird der Name und der Ort gespeichert. Weiters können Firmen Rabatte (in Prozent) erhalten.
Ein Kunde kann mehrere Filmserien und mehrere Pakete abonnieren. Jedes Abonnement (= genau
1 Serie oder 1 Paket) enhält ein Bestelldatum. Serien und Pakete können von einem Kunden auch
mehrmals abonniert werden (mit einem jeweils anderen Bestelldatum).
1. Es sollen alle abonnierten Serien und die Anzahl der Kunden sowie die Summe der Einnahmen
für diese Serie ausgegeben werden. Einnahmen über Pakete können ignoriert werden. Beachten
Sie, dass Firmenkunden möglicherweise Rabatte erhalten.
2. Um die Preisgestaltung der Pakete besser überblicken zu können, sollen die Preise der Pakete
mit der Summe der Preise der Einzelfilme, aus denen ein Paket besteht, verglichen werden.
Geben Sie eine Liste der Pakete mit dem Paketpreis, sowie die Summe der Einzelpreise und
22
die Differenz zwischen Summe der Einzelpreise und dem Paketpreis aus. Listen sind dabei nur
solche Pakete auf, bei denen die Differenz zw. Summe der Einzelpreise und Paketpreis mehr
als 30% des Paketpreises beträgt.
3. Um den Rabatt für besonders gute Firmen zu erhöhen, sollen all jene ermittelt werden, die bisher bereits mindestens 3 verschiedene Serien und mindestens 2 verschiedene Pakete abonniert
haben.
4. Die Preise für die Serien sollen erhöht werden. Dabei sollen alle Serien, die öfter als der Durchschnitt der Anzahl der Abonnements pro Serie abonniert worden sind (direkt, nicht über Pakete), festgestellt werden und der Preis um 5% angehoben werden. Der Preis der dazugehörigen
Pakete (= Paket bei dem mind. eine Serie vorkommt, die verteuert wird) soll um 2% erhöht
werden. Geben Sie eine Preisliste mit den alten und neuen Preisen für Serien und Filmpakete
aus. 1 (Es genügt, wenn Sie nur die Serien und Pakete ausgeben, die von der Änderung betroffen
sind.)
5. Man möchte allen guten Privatkunden einen neuen Werbekatalog zusenden. Diesen gibt es nur
in englischer und deutscher Sprache. Dazu wird die Sprache der Kunden herangezogen, wobei
alle Kunden beschickt werden, die mehr als 300 Euro ausgegeben oder mehr als 3 Filmpakete
gewählt haben. Geben Sie eine Liste aus, die den Kundennamen, die Sprache des Kunden, die
Anzahl der gewählten Serien und Paketen, sowie den dazugehörigen Katalog enthält. Englischsprachige Kunden erhalten einen englischsprachigen Katalog, alle anderen einen deutschsprachigen.
2.2.4
Gruppe C: Weinbauseminare Gsellmann
Um in Zukunft die Weinseminare optimieren zu können, hat die Firma Gsellmann in ein EDV-System
investiert. Jetzt werden alle Daten über das System verwaltet.
Jede Person, die an einem Seminar teilnehmen oder es leiten will, muss Mitglied der Weinbaugenossenschaft sein. Folgende Daten werden zu einem Mitglied gespeichert: Mitgliedsnummer, Name,
Alter, PLZ, Beitragsart (vollzahlend oder teilzahlend). Zu Seminarleitem werden noch Ausbildungsstufe (Übungsleiter oder staatlich geprüft) und das Gehalt pro Seminar gespeichert.
Ein Seminarleiter kann mehrere Seminare leiten. Jedes Mitglied hat die Möglichkeit, beliebig viele
Seminare zu besuchen (od. Seminarpakete). Ein Seminar kann jedoch nur solange belegt werden bis
die maximale Teilnehmeranzahl erreicht ist.
Zu jedem Seminar wird eine eindeutige Seminamummer, der Seminamame, das Beginndatum und
das Enddatum des Seminars, sowie die Kosten des Seminars für ein Mitglied (Preis) gespeichert.
Auch die Kategorie (Anfaenger, Fortgeschrittener, ... ) wird festgehalten.
Ein Serninarpaket besteht aus mehreren Seminaren, die aber, im Paket belegt, billiger kommen. Ein
Serninarpaket hat einen eindeutigen Namen und einen Preis.
lGeben Sie bitte nur eine Liste aus; es ist nicht erforderlich, dass Sie tatsachlich einen UPDATE in der Datenbank
durchfuhren.
23
Ein Seminar kann zu mehreren Zeitpunkten (Datum und Uhrzeit)? und in verschiedenen Seminarorten stattfinden, d.h. ein Seminar besteht aus mehreren Seminareinheiten. Weiters kann auch jede
Seminareinheit unterschiedlich lang dauern (Speicherung in ganzen Minuten).
Es werden auch sämtliche Orte, die der Weinbaugenossenschaft zur Verfügung stehen, erfasst. Zu
jedem Ort wird der Name, die Grösse des Seminarraumes und die Wandfarbe gespeichert.
1. Alle Seminarorte mit der Wandfarbe "gelb" sollen neu gestrichen werden. Da sie während
dieser Zeit nicht zur Verfügung stehen, benötigt der Betrieb eine Liste aller Seminare, die im
Monat Mai 2002 zumindest einen Seminartermin an so einem Ort haben. Geben Sie zu jedem
dieser Seminare die Anzahl der Teilnehmer aus.
2. Um die Bezahlung der Seminarleiter zu optimieren, sollen für jeden Seminarleiter die Zahl der
Seminare, die er betreut, sowie die Anzahl der Seminartermine ausgegeben werden.
3. Um die Preisgestaltung der Seminarpakete besser überblicken zu können, sollen die Preise der
Seminarpakete mit der Summe der Preise der einzelnen Seminare, aus denen ein Seminarpaket
besteht, verglichen werden. Geben Sie eine Liste der Pakete mit dem Paketpreis aus, sowie die
Summe der Einzelpreise und der Differenz zwischen Summe des Einzelpreises und dem Paketpreis aus. Listen Sie dabei nur solche Pakete auf, bei denen die Differenz zwischen Summe
Einzelpreis und Paketpreis mehr als 30% des Paketpreises beträgt.
4. Weiters soll eine Auswertung erstellt werden, die die Anzahl der Vollzahlenden und die Anzahl
der Teilzah1enden pro Seminar ausgibt, sowie die Gesamtsummen der Einnahmen pro Seminar.
(Teilzahlende zahlen nur den halben Preis.) Teilnehmer an Seminarpaketen, die dieses Seminar
enthalten, sollen zwar mitgezählt werden, können jedoch für die Berechnung der Einnahmen
ignoriert werden.
5. Die Preise der Seminare sollen erhöht werden. Dabei sollen alle Seminare, die öfter als der
Durchschnitt der Gesamtbuchungen pro Seminar gebucht worden sind (direkt, nicht über Pakete), festgestellt werden und Ihr Preis um 4% angehoben werden. Der Preis der dazugehörigen
Seminarpakete (Paket bei dem mind. ein Seminar vorkommt, das verteuert wird) soll um 3%
erhöht werden. Geben Sie eine Preisliste mit den alten und neuen Preisen der Seminare und
Seminarpakete aus.' (Es genügt, wenn Sie nur die Seminare und Pakete ausgeben, die von der
Änderung betroffen sind.)
2.3 Beispiel3
2.3.1 Allgemeines
Lehrziel:
2Beachten Sie, dass der ORACLE-Datentyp
DATE sowohl ein Datum als auch eine Uhrzeit zusammen in einem
Attribut speichern kann.
3Geben Sie bitte nur eine Liste aus; es ist nicht erforderlich, dass Sie tatsachlich einen UPDATE in der Datenbank
durchfuhren.
24
• Verwendung von PLlSQL
Bezüglich der in PLlSQL auszuarbeitenden ORACLE-Abfragen, wie Sie sie für die Lösung von Beispiel 3 benötigen, lesen Sie ,,PLlSQL" (siehe Kapitel 4) in den Übungsunterlagen.
Die Beispiele basieren auf denselben Relationen wie Ihr vorheriges Beispiel (Beispiel 2); auch Ihre
Beispieldaten sollten für dieses Beispiel in Ihrer Datenbank vorhanden sein. Evtl. wird es notwendig,
passende Testdaten hinzuzufügen, um aussagekräftige Resultate zu erhalten.
Die Aktualisierungen und Ergänzungen einer Relation stellen Transaktionen dar. Treffen Sie entsprechende Vorkehrungen, um die Atomizität der Transaktionen zu gewährleisten.
Fügen Sie in Ihre Beispiele eine einfache Fehlerbehandlung (Ausgabe des Fehlers und angemessene
Behandlung der Transaktion) ein.
2.3.2
Gruppe A: Autovermietung Buchbinder
Neue Beschäftigte werden beim Autoverleih aufgenommen. Dabei werden diese Daten in neua.sql
gespeichert und sollen nun in die Datenbank übertragen werden. Die Datei hat folgende Form:
<Name>
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
<Abteilung>
into
into
into
into
into
into
into
into
into
into
<Lohnklasse
neuer_mitarbeiter
neuer_mitarbeiter
neuer_mitarbeiter
neuer_mitarbeiter
neuer_mitarbeiter
neuer_mitarbeiter
neuer_mitarbeiter
neuer_mitarbeiter
neuer_mitarbeiter
neuer_mitarbeiter
> «Pers.Nr.»
values
values
values
values
va1ues
values
values
values
values
values
('Katja' ,
('Geri' ,
('Hans'
('Erwin' ,
('Erwin' r
('Renate' r
('Lisi' ,
('Hedi' ,
('Sonja' ,
('Jochen',
r
"C.'
lA',
'B'
I
I
'A',
'CI
'D'
'EI
1Ft
'A',
'BI,
I
I
I
I
2,
1,
4,
3,
2,
1,
2,
3,
4,
3,
1700) ;
1711) ;
1732) ;
1772) ;
1712) ;
1744) ;
1767) ;
1788) ;
1799) ;
1755) ;
1. Löschen Sie alle Beschäftigten die noch nie ein Auto vermietet haben. Entfernen Sie auch alle
Abteilungen in denen nun kein Mitarbeiter mehr beschäftigt ist. Bedenken Sie, dass Sie, um
referentielle Integrität zu wahren, ggf. auch abhängige Daten (z.B. Autos dieser Abteilung)
entfernen müssen.
2. Legen Sie eine temporäre Tabelle an, und führen Sie dann das Skript /public/neua.sql
diese Tabelle mit Daten zu befüllen.
aus, um
3. Arbeiten Sie die temporäre Tabelle Datensatz für Datensatz ab. Fügen Sie einen neuen Datensatz in die Mitgliedertabelle ein, wobei als Schlüssel die kleinste freie Pers.Nr. verwendet
werden soll. (Ignorieren Sie die in der Tabelle neuer.mitarbeiter angegebene Pers.Nr.) Falls
die Abteilung noch nicht existiert, muss diese neu angelegt werden. Auch hier soll die kleinste
freie Abteilungsnummer verwendet werden.
25
4. Die Mietpreise der Autos sollen überarbeitet werden. Ändern Sie die Preise folgendermassen
ab und runden Sie die Ergebnisse (auf ganze Zahlen):
Autopreise werden um 3% erhöht.
Autos die seit dem 01.01.2002 nicht vermietet wurden kosten generell um 10 Euro weniger.
2.3.3
Gruppe B: PAY TV Fernsehsender
Der Fernsehsender hat eine Liste mit neuen Serien erstellt. Weiters hat er zu jeder dieser Serien einen
Regisseur hinzugefügt. Die Serien hat er in der Datei neub.sql gespeichert. Jede Zeile hat folgendes
Format:
<Episodenanzahl
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
> <Dauer>
neue - serie
neue - serie
neue -serie
neue serie
neue serie
neue serie
neue - serie
neue serie
neue serie
neue - serie
neue -serie
<Preis>
<RegisseurSVNR
> <RegisseurName
values (10O, 60, 400, 8573,
values (135, 75, 300, 8574,
values ( 87, 80, 200, 8576,
values ( 74, 55, 100, 8577,
values ( 36, 60, 200, 8578,
values (130, 25, 700, 8579,
va1ues ( 80, 60, 800, 8590,
va1ues (123, 55, 100, 8587,
values ( 92, 25, 150, 8591,
values ( 13, 2O, 320, 8594,
values ( 27, 30, 200, 8624,
'Erwin' r
'Hans' r
'Dieter'
'silly' r
'Hans' ,
'Geri' ,
'Bauer'
'Fritz' r
'Geri' ,
'Franz' ,
'Holger' ,
r
t
><Name>
'AllyMcbeal');
'Speedy') ;
'Dallas');
'Columbo') ;
'Universum' );
'Wetter') ;
'ZIB');
'Sport2' );
'Sportl');
'MAUS');
'LuckyLuke') ;
1. Löschen Sie alle Serien, die seit 01.05.2002 nicht mehr (direkt oder über ein Paket) abonniert
wurden. Entfernen Sie ebenfalls alle Privatkunden, die seit diesem Datum keine Serie mehr
gewählt haben (um referentielle Integrität zu wahren, müssen ggf. auch abhängige Tabellen
bearbeitet werden). Firmen werden nicht entfernt.
2. Legen Sie eine temporäre Tabelle an, und führen Sie dann das Skript /public/neub.sql
diese Tabelle mit Daten zu befüllen.
aus, um
3. Arbeiten Sie die temporäre Tabelle Datensatz für Datensatz ab. Fügen Sie einen Datensatz in
die Serientabelle ein. Wenn der Regisseur in der Tabelle nicht vorhanden ist, tragen Sie diesen
ein. Wählen Sie dabei immer die kleinste noch freie Seriennummer als neue Seriennummer.
Ist eine Serie mit diesem Namen schon vorhanden, so ändern Sie alle relevanten Tabellen. Den
Fall, dass mehrere Serien mit diesem Namen existieren, können Sie vernachlässigen. (Falls in
Ihrer Datenbankstruktur bisher kein Attribut Serienname vorgesehen war, fügen Sie dieses bitte
hinzu.)
4. Die Preise der Serien sollen überarbeitet werden. Ändern Sie die Preise folgendermassen
und runden Sie die Ergebnisse (auf ganze Zahlen):
26
ab
Serien werden generell um 3 % teurer.
Serien die seit dem 01.04.2002 mindestens 5 mal abonniert worden sind (ggf. auch über ein
Serienpaket), werden außerdem um 15 Euro billiger.
2.3.4 Gruppe C: Weinbauseminare Gsellmann
Neue Mitglieder müssen immer eine Beitrittserklärung ausfüllen. Diese Daten wurden in der Datei
neuc.sql gespeichert und sollen nun in die Datenbank übertragen werden. Die Datei hat folgende
Form:
<Name>
<Alter>
<Sem.Nr.>
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
<PLZ>
neue_anmeldungvalues
neue_anmeldung values
neue_anmeldung values
neue_anmeldung va lues
neue_anmeldung values
neue_anmeldung va lues
neue_anmeldung values
neue_anmeldung values
('Kat ja',
('Sepp',
L'Hans",
('Rupert',
('Kar!',
('Hans',
('Joachim'
('Sabine',
<Beitragsart>
> <Gehalt>
<Ausbildungsstufe
37,
1120, 'T',
5, 1700,
36,
2340, 'V', 4, 1799,
22,
9500, 'V', 3, 1790,
28,
1230, 'V', NULL, NULL,
39,
9500, 'T',
NULL, NULL,
40,
1100. 'T',
NULL, NULL,
, 41,
2380, 'T'
NULL, NULL,
42,
2351, 'V', NULL, NULL,
I
<Seminarname>
'Weinbau 1',2);
'Neinbau-Profikurs',3);
' Rotwein-Sorten
4);
-weLnbau 1', 2);
'Weinbau 1', 2),
'Weinbau-Profikurs',3),
'\veinbau-Profikurs',
3);
'Rotwein-Sorten',
4);
I
I
1. Löschen Sie alle Mitglieder, die noch nie ein Seminar geleitet und seit dem 01.01.2002 kein
Seminar besucht haben (Beginndatum des Seminars). Entfernen Sie ebenfalls alle Seminare,
deren Beginndatum vor dem 01.01.2002 liegt. Entfernen Sie auch alle Seminarpakete, in denen
diese Seminare vorkommen. Beachten Sie, dass Seminare auch über Pakete besucht werden
können.
2. Legen Sie eine temporäre Tabelle an, und führen Sie dann das Skript /public/neuc.sql
diese Tabelle mit Daten zu befüllen.
aus, um
3. Arbeiten Sie die temporäre Tabelle Datensatz füer Datensatz ab. Fügen Sie einen Datensatz
in die Mitglieder- und (falls notwendig) Seminarleiter-Tabellen ein, wobei als Schlüssel die
kleinste freie Nummer verwendet werden soll. Wenn die Spalten ,,Ausbildungsstufe" (kleiner
als 4: "Übungsleiter", größer oder gleich 4: "staatlich geprüft") und "Gehalt" NULL sind, so
handelt es sich um ein normales Mitglied, sonst um einen Seminarleiter.
Wenn das Seminar in der Seminartabelle noch nicht gespeichert ist, tragen Sie dieses dort ein.
Als Beginndatum ist der 01.09.2002 zu wählen, das Enddatum und die Kategorie werden auf
NULL gesetzt. Der Preis des Seminars ist der Durchschnittspreis aller bisher gespeicherten
Seminare, und die maximale Teilnehmeranzahl ist 100. Die Person wird zum Leiter dieses
Seminars.
Ist das Seminar schon vorhanden, so handelt es sich um ein Mitglied, dass dieses Seminar
belegen will. Ändern Sie alle relevanten Tabellen. Ist die Maximalanzahl eines Seminars bereits
erreicht, erhöhen Sie diese.
27
4. Die Preise der Seminarpakete sollen überarbeitet werden. Ändern Sie die Preise folgenderrnassen ab und runden Sie die Ergebnisse(auf ganze Zahl):
Seminarpakete werden generell um 3 % teurer.
Seminarpakete, die mindestens dreimal belegt worden sind, werden um 5 Euro billiger.
28
Herunterladen