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