5. Übungsblatt (Testatwoche: Mai 2010)

Ähnliche Dokumente
4. Übungszettel (Musterlösung)

1 Relationenalgebra [8 P.] Gegeben seien die folgenden Relationenschemata: Hafen(HNR, Ort, Grundsteinlegung)

Übung 1: SQL. Übungen finden bei Bedarf anstelle der Vorlesungen statt Fragen? Vorlesung Datenbankeinsatz WS 04/05 IPD

Datenbanksysteme I WS 18/19 Teillösung Übungsblatt 4-6

Introduction to Data and Knowledge Engineering. 6. Übung SQL

DB I S. 1 Relationenalgebra [8 P.] Gegeben seien die folgenden Relationenschemata: Person(PNR, Vorname, Nachname, Geburtsdatum, Wohnort Ort.

Daten-Definitionssprache (DDL) Bisher: Realwelt -> ERM -> Relationen-Modell -> normalisiertes Relationen-Modell. Jetzt: -> Formulierung in DDL

Wiederholung VU Datenmodellierung

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

SQL als Zugriffssprache

SQL. Ziele. Grundlagen von SQL. Beziehung zur relationalen Algebra SELECT, FROM, WHERE. Joins ORDER BY. Aggregatfunktionen. dbis.

dbis Praktikum DBS I SQL Teil 2

Übung Datenbanken in der Praxis. Anfragen an Datenbanken mit SQL

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

ACCESS SQL ACCESS SQL

Wiederholung VU Datenmodellierung

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

Oracle 10g Einführung

select DISTINCT Name, ort From Verkauf; selektiert Name und Ort von Tabelle Verkauf - DISTINCT steht dass keine Zeile mehrfach vorkommt

Informatik II Vorlesung am D-BAUG der ETH Zürich. Vorlesung 12, 2017 Datenbanksysteme: Datendefinition in SQL, Kompliziertere Datenbankabfragen

Übersicht der wichtigsten MySQL-Befehle

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Datenbanken. Zusammenfassung. Datenbanksysteme

Kapitel 5: Der SQL-Standard

Informatik II Vorlesung am D-BAUG der ETH Zürich. Vorlesung 12, Datenbanksysteme: Datendefinition in SQL, Kompliziertere Datenbankabfragen

Datenbanksysteme I WS 17/18 HS-Übung. Universität Leipzig, Institut für Informatik Abteilung Datenbanken Prof. Dr. E. Rahm, V. Christen, M.

SELECT dient dazu, aus einer vorhandenen Datenbank bestimmte Spalten und Zeilen auszugeben es handelt sich also um eine Auswahlabfrage.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Finalklausur zur Vorlesung Datenbanksysteme I Wintersemester 2003/2004 Prüfer: Prof. R. Bayer, Ph.D. Datum: Zeit: 16.

Structured Query Language (SQL) als standardisierte Anfragesprache für relationale Datenbanken

SQL 2. Ziele. Fortgeschrittene SQL-Konstrukte. Aggregatfunktionen revisited. Subqueries. Korrelierte Subqueries

Grundlagen von Datenbanken

SQL: Abfragen für einzelne Tabellen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Kapitel 6. Datenmalipulation (DML) d. h. insert, update, delete, select im Relationenmodell (in Oracle)

Datenbanksysteme 2013

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

Übungsblatt 10: Lösungsvorschlag

Lösungen der Übungsaufgaben von Kapitel 10

Übungsaufgaben mit Lösungen

SQL Data Manipulation Language (DML) und Query Language (QL)

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

DBS ::: SERIE 5. Join Right Semi- Join Left Semi-Join Projektion Selektion Fremdschlüssel. Kreuzprodukt

Universität Augsburg, Institut für Informatik WS 2008/2009 Prof. Dr. W. Kießling 23. Nov Dr. A. Huhn, M. Endres, T. Preisinger Lösungsblatt 5

insert, update, delete Definition des Datenbankschemas select, from, where Rechteverwaltung, Transaktionskontrolle

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

Metadaten oder Metainformationen sind Daten, die Informationen über Merkmale anderer Daten enthalten, aber nicht diese Daten selbst (Wikipedia)

Datenbanksysteme 1 Frühjahrs-/Sommersemester Abril 2012

Aggregatfunktionen in der Relationenalgebra?

GROUP BY, HAVING und Sichten

Verbunde (Joins) und mengentheoretische Operationen in SQL

Rückblick. SQL bietet viele Möglichkeiten zur Anfrageformulierung

Verbunde (Joins) und mengentheoretische Operationen in SQL

5.8 Bibliotheken für PostgreSQL

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Einführung in Datenbanken und SQL

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

4. Aufgabenblatt - Auswertung -

Datenbank- und Informationssysteme. Lösungsvorschläge zu Übungsblatt 2. Sommersemester CREATE DOMAIN KennzeichenDomain AS VARCHAR(9);

Seminar 1 SQL Abfragen DML. MatrNr Name Vorname Age Gruppe Schmidt Hans Meisel Amelie

Datenbanksysteme I Aufgabenblatt 4: SQL

Welche Kunden haben die gleiche Ware bestellt? select distinct a1.name, a2.name from Auftrag a1, Auftrag a2 where a1.ware = a2.ware.

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS Metadaten. Andreas Schmidt Metadaten 1/17

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Datenbanksysteme Kapitel 5: SQL Data Manipulation Language

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Übung 6. Tutorübung zu Grundlagen: Datenbanken (Gruppen Do-T24 / Do-T31 WS 2016/2017)

Wir haben folgende Ausprägung der Relation Studenten:

Datenbanksysteme 1 Herbst-/Wintersemester Oktober 2014

Übung zu Datenbanken. Musterlösung zur 1. Probeklausur. Dipl.-Inform. Sascha Kriewel

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Datenmanagement I SoSe 2006 Aufgabenblatt 4

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Schlüssel. Definition: Ein Schlüssel (key) einer Relation r(r) ist eine Til Teilmenge K von R, so dass für je zwei verschiedene Tupeln t 1

Die Anweisung create table

Vorlesung Datenbanken I Zwischenklausur

Kapitel 8: Datenintegrität

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Prüfung Informatik für Ökonomen II. 14. Januar Teil 1: Datenbanktechnik Musterlösungen

Vorlesung Datenbankmanagementsysteme

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

Garten - Daten Bank. - survival pack -

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort... 13

Übung Datenbanksysteme Updates, Integritätsbedingungen, funktionale Abhängigkeiten

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Datenbanksysteme noch Kapitel 7: SQL. Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

Daniel Warner SQL. Das Praxisbuch. Mit 119 Abbildungen. Franzis

Musterlösung zur Finalklausur Datenbanksysteme am

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Fortsetzung: Projektion Selektion. NULL Werte

Datenbanken Wintersemester 11/12. Prof. Dr. W. May

Transkript:

5. Übungsblatt (Testatwoche: 18. - 20. Mai 2010) Einführung in Datenbanksysteme Datenbanken für die Bioinformatik Heinz Schweppe, Katharina Hahn Aufgabe 1 (Kardinalitäten von Ergebnisrelationen) 6 Punkte Gegeben sind die Relationen A, B und C mit den Attributen a1, a2, bzw. b1, b2, bzw. c1, c2. und den Kardinalitäten A, B und C. Die Schranken der Kardinalitäten werden im folgenden als (min, max) angegeben. a) Zwischen welchen Schranken liegt die Kardinalität der folgenden Ergebnismengen. Geben Sie möglichst scharfe Schranken an. (1) FROM A JOIN B ON (a1 = b1) JOIN C ON (b2 = c3) (0, A B C ): Wenn eine der Relation leer ist, ist auch das Ergebnis leer ansonsten besteht es aus den Kreuzprodukten. (2) SELECT a1, a2 FROM A UNION SELECT b2, b1 FROM B (max{ A, B }, A + B ): Im geringsten Fall sind alle Tupel (a1, b2) redundant mit allen Tupeln (b2, b1), wodurch die Vereinigung (nach Entfernen der Duplikate) nur noch die eindeutigen Tupel enthält und das sind mindestens soviele wie in der kleineren der beiden Mengen (Duplikate innerhalb einer Menge werden ja nicht entfernt). Oder aber es sind alle Tupel paarweise unterschiedlich, dann besteht die Vereinigung genau aus der Summe der beiden Mengen. (3) SELECT a1 FROM A WHERE a1 NOT IN (SELECT b2 FROM B) (0, A ): Im ersten Fall sind alle Attribute a1 in den Attributen b2 enthalten, im zweiten keines. (4) FROM A, B, C (0, A B C ): Wenn eine der Tabellen leer ist, ist auch das Kreuzprodukt leer. b) Nehmen Sie an, dass ai Schlüssel von A, bj ein Fremdschlüssel auf A und ck Schlüssel von C ist. Zwischen welchen Schranken liegt die Kardinalität der folgenden Mengen. Geben Sie möglichst scharfe Schranken an. (1) FROM A JOIN B ON (ai = b1) (0, B ): B ist hier die limitierende Relation, da nur Elemente aus A ausgewählt werden, die sich in B wiederfinden. Im Extremfall existiert zwar nur ein einziges Element in A aber alle Elemente b1 aus B verweisen darauf (b1 muss nicht eindeutig sein), und das Ergebnis enthält ein Tupel für jedes aus B. Wenn umgekehrt nur ein Element in B existiert, dann steht im Ergebnis auch nur ein Tupel, egal, wie viele Tupel A enthält. (2) FROM A JOIN B ON (ai = bj) JOIN C ON (b2 = ck) (0, B ): Im ersten Verbund gilt dasselbe wie für (1). Im zweiten Verbund ist diese Beziehung genau umgekehrt, da ck ein Schlüssel von C und somit eindeutig ist. Wieder bestimmt also allein B die Anzahl der Ergebnistupel. Aufgabe 2 (Advanced SQL) 14 Punkte Gegeben ist das Kinodatenbankenschema des letzten Übungsblatts.

KinoDB ( Orte(Kino, Adresse, Telefon), Filme(Titel, Regie, Schauspieler), Programm(Kino, Titel, Zeit) ) Formulieren Sie folgende Anfragen in SQL. a) Welche Filme (Titel) laufen nicht mehr aktuell im Kino? SELECT DISTINCT Titel WHERE Titel NOT IN ( ); b) Wieviele Filme laufen aktuell, bei denen Sofia Coppola Regie geführt hat? SELECT COUNT(DISTINCT Titel) NATURAL JOIN Programm WHERE Regie = 'Sofia Coppola'; c) Welche Filme (Titel) laufen nur zu einer Uhrzeit. GROUP BY Titel HAVING COUNT(DISTINCT Zeit) = 1; d) In wie vielen Kinos läuft A Single Man nach 18h? SELECT COUNT(DISTINCT Kino) WHERE Titel = 'A Single Man' AND Zeit > '18:00'; e) In welchen laufenden Filmen spielen ausschließlich Schauspieler mit, die schon mal mit Steven Spielberg gearbeitet haben? EXCEPT -- Filme mit Schauspielern, die noch nicht mit Steven Spielberg -- gearbeitet haben. f WHERE NOT EXISTS (( SELECT Schauspieler WHERE f.schauspieler = Schauspieler) INTERSECT ( -- Alle Mitarbeiter von Steven Spielberg. SELECT Schauspieler WHERE Regie = 'Steven Spielberg')); Aufgabe 3 (Advanced SQL, Mondial Datenbank) 15 Punkte Formulieren Sie folgende Anfragen in SQL. Einige der Anfragen lassen sich unter zu Hilfenahme der Mengenquantoren ALL, ANY und EXISTS formulieren. Geben Sie jeweils gültige SQL-Statements an. a) Welche Länder liegen nicht an Meeren, wohl aber alle ihre Nachbarländer? --Lösungsmöglichkeit: --ohnekueste enthaelt alle Laender, die selbst nicht am Meer liegen --nachbarlaender enthaelt alle Laender ohne Kueste mit ihren Nachbarn WITH ohnekueste AS ( SELECT c.code AS okcode, c.name AS okname FROM mondial.country c WHERE c.code NOT IN ( SELECT country FROM mondial.geo_sea) ), nachbarlaender AS (

) SELECT c.code AS nbid, b.country2 AS nbid2 FROM mondial.country c, mondial.borders b WHERE c.code = b.country1 AND c.code NOT IN ( SELECT country FROM mondial.geo_sea) --selektiere alle Laender aus ohnekueste, die selbst nicht Nachbar zu einem Land ohne Kueste sind. Ist ein Land L1 in ohnekueste Nachbar zu einem Land L2 in nachbarlaender, das selbst keine Kueste besitzt, entspricht L1 nicht mehr den Suchkriterien (es hat ein Nachbarland ohne Küste). SELECT DISTINCT okname FROM ohnekueste WHERE NOT EXISTS ( FROM nachbarlaender WHERE nachbarlaender.nbid2 = ohnekueste.okcode) ORDER BY okname; b) Welche Länder (Name) mit mehr als 10 Millionen Einwohnern haben eine höhere Bevölkerungsdichte (Einwohner/Fläche) als alle ihre Nachbarländer? SELECT c.name, c.population, c.population/c.area AS density WHERE c.population > 10000000 AND c.population/c.area > ALL ( SELECT c2.population/c2.area 2, borders b WHERE (b.country1 = c.code AND b.country2 = c2.code) OR (b.country2 = c.code AND b.country1 = c.code)) c) Geben Sie alle Flüsse an, die in ein Meer münden. Das Meer soll dabei nur an eines der Landesteile grenzen, durch die der Fluss fließt. Das Meer kann aber an andere Landesteile grenzen, durch die der Fluss nicht fließt. SELECT r.name FROM river r, geo_river gr, geo_sea gs WHERE r.name = gr.river AND r.sea <> '' AND gr.province = gs.province AND gr.country = gs.country AND r.sea = gs.sea GROUP BY r.name HAVING COUNT (gs.sea)=1 ORDER BY r.name; d) Welche Länder, außer dem bevölkerungsreichsten Land haben mehr als 100 Millionen Einwohner? Lassen Sie Ländername, Bevölkerungszahl und Gesamtfläche ausgeben. SELECT c.name, c.population, c.area WHERE c.population > 100000000 AND c.population < ANY (SELECT c2.population 2 WHERE c2.population > 100000000 ) ORDER BY c.name

e) Welche Länder haben eine mindestens fünfmal größere Gesamtfläche als jeder der deutschen Nachbarstaaten. Lassen Sie Ländername und Gesamtfläche ausgeben. SELECT c.name, c.area WHERE c.area/5 > ALL ( SELECT c2.area 2, borders b WHERE (b.country1 = 'D' AND b.country2 = c2.code) OR (b.country2 = 'D' AND b.country1 = c2.code)) ORDER BY c.name Aufgabe 4 (SQL Gruppenprädikate) 4 Punkte Kann man wenn ja, wie; wenn nein, warum nicht das HAVING-Prädikat für Gruppen durch Zeilenprädikate ausdrücken? Ja! Bezieht sich das HAVING-Prädikat nur auf einzelne Spalten, kann die Bedingung in die WHERE-Klausel aufgenommen werden. Bezieht sich die Bedingung des HAVING-Prädikats auf die Aggregatfunktion der Gruppen, so kann man die Tabelle vorher in einzelne Tabellen zerlegen, in denen jeweils nur Tupel einer Gruppe auftauchen, durch Anwendung der Aggregatfunktion bekommt man pro Tabelle dann ein Tupel, auf das man mit Hilfe der WHERE-Klausel dann die Bedingung anwenden kann. Durch eine Vereinigung der einzelnen Tupel bekommt man dann das gewünschte Ergebnis. Aufgabe 5 (SQL DATE und TIMESTAMP) 12 Punkte Machen Sie sich mit den Datum- und Zeitstempelformaten von Postgres vertraut, z.b. unter http://developer.postgresql.org/pgdocs/postgres/functions-datetime.html für die Version 9. Betrachten Sie nun folgende Tabelle: CREATE TABLE users ( username VARCHAR(15) PRIMARY KEY, firstname VARCHAR(15), lastname VARCHAR(19), birthday DATE, registered TIMESTAMP ); Beantworten Sie folgende Anfragen in SQL. Geben Sie jeweils gültige SQL Statements an. a) Geben Sie den ältesten Benutzer mit Namen, Vornamen und Geburtsdatum aus. Falls es mehrere gibt, sollen alle sortiert nach Namen ausgegeben werden. SELECT firstname, lastname, birthday WHERE birthday <= ALL ( SELECT birthday ) ORDER BY lastname

b) Geben Sie alle Benutzer, die älter als 18 Jahre sind, unter Verwendung (1) von CURRENT_DATE, WHERE (CURRENT_DATE - birthday >= 18*365) (2) der AGE-Funktion aus. WHERE EXTRACT(YEAR from AGE(birthday)) >= 18 c) Geben Sie alle Benutzer aus, die beigetreten (Attribut registered) sind, bevor andere Benutzer geboren wurden. WHERE DATE(registered) < ANY (SELECT birthday ) d) Geben Sie alle Benutzer aus, die nach 16h beigetreten sind. WHERE EXTRACT(HOUR from registered) >= 16 e) Geben Sie die Paare von Benutzern aus, die am gleichen Tag Geburtstag haben (beachten Sie, dass diese nicht im gleichen Jahr geboren sein müssen). Geben Sie jeweils die Nachnamen, Vornamen und Geburtsdaten der Benutzer aus. Achten Sie darauf, dass ein solches Paar von Benutzers (u1, u2) nicht zusätzlich als (u2, u1) ausgegeben wird. SELECT u1.username, u2.username, u1.birthday, u2.birthday u1, users u2 WHERE u1.username < u2.username AND EXTRACT(DAY from u1.birthday) = EXTRACT(DAY from u2.birthday) AND EXTRACT(MONTH from u1.birthday) = EXTRACT(MONTH from u2.birthday)