Universität Siegen Fachgruppe Praktische Informatik Übung Datenbanksysteme I Blatt 5 – Ausgabe am 21.11.2016, Abgabe der Lösung bis 27.11.2016 Aufgabe 5.1 Abfragen in SQL Aufgabe 5.3 SQL-Abfragen schreiben [ einfach / Klausur-Bearbeitungszeit ca. 22 Min.; tatsächlich: ; vorbereitende Lektüre: ] [ mittel / Klausur-Bearbeitungszeit ca. 20 Min.; tatsächlich: ; vorbereitende Lektüre: ] Formulieren Sie die folgenden Anfragen auf den Tabellen fahrzeuge, vertreter, produkte und verkauft der vorigen Aufgabenblätter in SQL. Die SQL-Ausdrücke sollen in einer separaten SQL-Datei abgegeben werden (Das ist eine Textdatei mit der Endung *.sql). Innerhalb der sql-Datei schreiben Sie bitte in Kommentaren ihre Namen/Matrikelnummern und Kennzeichnen auch zu jedem Ausdrück, um welche Aufgabennummer bzw. Teilaufgabe es sich handelt. Kommentare können in SQL so verfasst werden: /* Aufgabe 5.1 a) */ Benutzen Sie für die folgenden Aufgaben Ihre in 5.2 eingespielte BankenDB und geben Sie Ihre Anfragen als Lösung ab. (Nur die Anfragen - nicht die Ergebnisse!). Die SQL-Ausdrücke sollen wie zuvor in einer separaten SQL-Datei abgegeben werden. a. Ermitteln Sie die Nachnamen aller Kunden, die eine Bonität von 1 haben. b. Ermitteln Sie die Namen aller Orte im Postleitzahlgebiet 6. c. Ermitteln Sie die Vor- und Nachnamen aller Kunden, die im PLZ-Gebiet 4 wohnen. d. Ermitteln Sie die Personen-Nummer des Mitarbeiters mit dem Nachnamen Porta. e. Ermitteln Sie die Nachnamen aller Kunden, die von dem Mitarbeiter mit der Personen-Nummer 10001 betreut werden. f. Ermitteln Sie die Nachnamen aller Kunden, die von einem Mitarbeiter mit Nachnamen Porta betreut werden. Hinweis: Personen tauchen hier zweimal in der FROM-Klausel auf. a. Welche Fahrzeuge werden mit Diesel betrieben? b. Welche Vertreter machen mehr als 30000 EUR Jahresumsatz? c. Welche Diesel-Fahrzeuge haben mehr als 30000 km? d. Welche Fahrzeuge wurden vor 2001 angemeldet oder haben mehr als 30000 km? e. Welche PLZ-Gebiete werden zur Zeit betreut? f. Zeige die Personal-Nummern, Vor- und Nachnamen aller Verteter, die eine Personal-Nummer kleiner 2000 haben. g. Wie viele km hat Herr Müllers Wagen gefahren? h. Welche Produkte (Bezeichn, ArtikelNr) werden von dem Vertreter Müller verkauft? i. Welche Vertreter (Vorname, Name) verkaufen Produkte, die teurer als 500,00 EUR sind? j. Zeige Namen und Umsatz aller Vertreter an, die das Produkt ‘EasyHoover’ verkaufen. k. Welche Produkte verkauft der Vertreter, dessen Wagen die Fahrgestell-Nummer 2735BAH hat? Vertiefungsaufgabe 5.4 SQL-Abfragen lesen [ mittel / Klausur-Bearbeitungszeit ca. 10 Min.; tatsächlich: ; vorbereitende Lektüre: ] Die folgenden Anfragen wurden auf der BankenDB ausgeführt, die mit den im Anhang angegebenen CREATE TABLE-Anweisungen eingerichtet wurde. (Sie haben diese in Aufgabe 5.2 eingespielt.) Wie lauten die Arbeitsaufträge, die der Programmierer dieser Anfragen erhalten hat? a. Aufgabe 5.2 Einrichten von SQLite und Einspielen der BankenDB [ einfach / Klausur-Bearbeitungszeit ca. 0 Min.; tatsächlich: ; vorbereitende Lektüre: ] b. Wir werden in den Übungen SQLite verwenden. Sie dürfen jedes beliebige SQLite-Tool oder die Konsole verwenden. Empfehlenswert für alle Betriebssysteme ist mittlerweile der “DB Browser for SQLite” (http://sqlitebrowser.org/ ). Installieren Sie SQLite bzw. Ihr bevorzugtes Tool und spielen Sie die BankenDB von unserer WWW-Seite ein. Machen Sie sich selbstständig mit dem Tool bzw. der Konsole vertraut. SELECT FROM WHERE AND GROUP BY ORDER BY SELECT FROM WHERE AND AND AND GROUP BY HAVING 1 AVG(saldo) AS durchschnitt, ort.plz person, konto, ort person.plz = ort. plz person.pers nr = konto.pers nr ort.plz durchschnitt desc person.vorname, person.nachname, ort.name, SUM(aktien position.anzahl) aktien position, depot, person, ort depot.pers nr = person.pers nr aktien position.depot nr = depot.depot nr person.plz = ort.plz aktien position.aktien name = ’MercST European Opps’ person.pers nr, person.vorname, person.nachname, ort.name SUM(aktien position.anzahl) > 0 . . . . . . . . . . Tabellen der BankenDB . . . . . . . . . . betrag real not null , datum date default current_date , foreign key ( von_pers_nr , von_kto_nr ) references konto ( pers_nr , kto_nr ) , foreign key ( an_pers_nr , an_kto_nr ) references konto ( pers_nr , kto_nr ) CREATE TABLE ort ( plz int , name varchar (20) not null , bu_land varchar (25) not null , primary key ( plz ) ); ); CREATE TABLE depot ( pers_nr int , depot_nr int , primary key ( pers_nr , depot_nr ) , foreign key ( pers_nr ) references person ( pers_nr ) ); CREATE TABLE person ( pers_nr int , plz int , anrede varchar (5) , vorname varchar (30) , nachname varchar (30) not null , strasse varchar (30) not null , hausnummer int not null , primary key ( pers_nr ) ); CREATE TABLE aktie ( name varchar (50) , kurs real , primary key ( name ) ); CREATE TABLE a kt ie n_ p os it io n ( pos_nr int , depot_nr int , aktien_name varchar (50) , anzahl int default 0 , primary key ( pos_nr , depot_nr ) , foreign key ( aktien_name ) references aktie ( name ) , foreign key ( depot_nr ) references depot ( depot_nr ) ); CREATE TABLE mitarbeiter ( pers_nr int , arbeitszeit int default 100 , status varchar (10) , foreign key ( pers_nr ) references person ( pers_nr ) ); CREATE TABLE kunde ( pers_nr int , bonitaet int default 2 , betreuer int references mitarbeiter ( pers_nr ) , foreign key ( pers_nr ) references person ( pers_nr ) ); CREATE TABLE kauf ( depot_pers_nr int , depot_nr int , pos_nummer int , kto_pers_nr int , kto_nr int , anzahl int NOT NULL , datum date default current_date , foreign key ( depot_pers_nr , depot_nr ) references a kt ie n_ p os it io n ( pos_nr , depot_nr ) , foreign key ( kto_pers_nr , kto_nr ) references konto ( pers_nr , kto_nr ) ); CREATE TABLE konto ( pers_nr int , kto_nr int , saldo real , kredit_limit real , primary key ( pers_nr , kto_nr ) , foreign key ( pers_nr ) references person ( pers_nr ) ); CREATE TABLE verkauf ( depot_pers_nr int , depot_nr int , pos_nummer int , kto_pers_nr int , kto_nr int , kurs real , anzahl int not null , datum date default current_date , foreign key ( depot_pers_nr , depot_nr ) references a kt ie n_ p os it io n ( pos_nr , depot_nr ) , foreign key ( kto_pers_nr , kto_nr ) references konto ( pers_nr , kto_nr ) ); CREATE TABLE einzahlung ( pers_nr int , kto_nr int , betrag real not null , datum date default current_date , foreign key ( pers_nr , kto_nr ) references konto ( pers_nr , kto_nr ) ); CREATE TABLE auszahlung ( pers_nr int , kto_nr int , betrag real not null , datum date default current_date , foreign key ( pers_nr , kto_nr ) references konto ( pers_nr , kto_nr ) ); CREATE TABLE ueberweisung ( ID integer primary key autoincrement , gebucht int (1) not null default ’0 ’ , von_pers_nr int , von_kto_nr int , an_pers_nr int , an_kto_nr int , v e r w e n d u n g s z w ec k varchar (27) , 2