SQL-Übungsaufgaben (zur “Let’s Meet”-Datenbank)

https://oer-informatik.de/lets_meet-beispielloesung_uebungsaufgaben

https://bildung.social/@oerinformatik/110378362964551953

tl/dr; Übungsaufgaben zu SQL-DDL- und DML-Befehlen am Beispiel der “Let’s Meet”-Datenbank. Da deren Daten als SQL-Importskript vorliegen, können die Aufgaben auch unmittelbar im DBMS ausprobiert werden… (Zuletzt geändert am 13.06.2023)

Ausgangslage

Ausgangsbasis der folgenden Aufgaben ist die Datenbank einer Dating/Meeting-App, die anhand des folgenden Relationenmodells erstellt wurde. Es sollen bei den Lösungen die hier abgedruckten Namen verwendet werden:

Relationenmodell der Let’s Meet Datenbank
Relationenmodell der Let’s Meet Datenbank

Die Fragen basieren auf der Datenbank aus der “Let’s Meet” Datenbank-Lernsituation, können aber auch ohne Hintergrundinfos nur mit obigem Relationenmodell bearbeitet werden.

Wer die Abfragen mit einer gefüllten Datenbank ausprobieren will, der kann die folgenden SQL-Skripte importieren. Es müssen alle drei SQL-Skripte der Reihe nach ausgeführt werden.

https://gitlab.com/oer-informatik/db-sql/lets-meet-db/-/blob/main/beispielloesung/postgresql/letsmeet_1_struktur_ddl_example_postgre.sql

https://gitlab.com/oer-informatik/db-sql/lets-meet-db/-/blob/main/beispielloesung/postgresql/letsmeet_2_import_einzeiler_postgre.sql

https://gitlab.com/oer-informatik/db-sql/lets-meet-db/-/blob/main/beispielloesung/postgresql/letsmeet_3_normierung_postgre.sql

Für Hintergrundwissen lohnt sich ein Blick in die anderen Beiträge, in denen die Datenbank modelliert (Teil 1), importiert (Teil 2) und im Bestand normalisiert (Teil 3) wird.

Aufgaben

Erstellen der Tabelle tblHobby2User

  1. Erstelle den SQL-Befehl, mit dem die Tabelle tblHobby2User wie oben angegeben erzeugt werden kann. Die IDs sind in tblHobby und tblUser als fortlaufende Nummern realisiert. Die Priorität soll als Gleitkommazahl umgesetzt werden. Es muss keine Lösch- und Änderungsweitergabe berücksichtigt werden.

Bewertung 6 Punkte: CREATE 1P / Datentypen 2P / PK 2P / FK 1P

  1. Welche Anpassung muss am Befehl aus Aufgabe a) vorgenommen werden, wenn das Feld priority eingabepflichtig sein soll? (Wenn es oben bereits eingabepflichtig umgesetzt wurde: welcher Bestandteil des SQL-Befehls ist dafür verantwortlich?)

Ausgabe von Userdaten

In der Tabelle tblUser sind beispielhaft folgende Daten enthalten (Auszug).

user_id firstname lastname telephone street street_no
708 Gheorghe Florentina 05222 / 92995 Kirchstraße 50
719 Edith Vehlow 0611 / 17692 Uhlandstr. 67
720 Stefan Hubert (030) 4108976 Am Vogelanger 21
736 Marcus Göllnitz (02702) 78293 Rembrandtstr. 37 b
739 Szymański Dariusz 06897 / 55039 Markt 27
746 Sabine Hubert 07752 / 41061 Jarmener Str. 49
  1. Nenne den SQL-Befehl, mit dem nur die Vornamen aller User ausgegeben werden, die mit Nachnamen “Hubert” heißen. Die Ausgabe soll nach der user_id absteigend sortiert sein.

Bewertung: 5 Punkte

  1. Die Telefonnummern sind auf zweierlei Art erfasst: “030 / 12345” und “(030) 12345”. Erstelle einen SQL-Befehl, mit dem alle Daten von Datensätzen ausgegeben werden, deren Telefonnummern in der Schreibweise mit Schrägstrich erfasst sind! Die Ausgabe soll nach Telefonnummern aufsteigend sortiert sein.

Bewertung: 5 Punkte

Auswertung der Alterstruktur

  1. Es soll für jede Stadt ermittelt werden, an welchem Datum der jüngste und der älteste User (m/w/nb) geboren wurde. Die Ausgabe soll wie folgt aussehen (Sortierung egal):
Stadt Ältester Jüngster
Hamburg 1958-04-05 2002-04-24
Lübeck 1958-01-24 2001-09-30
Berlin 1959-04-14 2002-12-05
Kiel 1958-05-29 2001-12-26
Dortmund 1959-03-24 2002-08-27
Essen 1959-07-26 2002-08-13
  1. Mithilfe der Funktion extract(year from age(birthday)) kann beispielsweise in PostgreSQL das Alter eines Users in Jahren (als Zahl) ausgegeben werden:

Erstelle mithilfe dieses Befehls eine Abfrage, die alle Städte auflistet, in denen mehr als 10 User leben, die 50 Jahre oder älter sind. Es soll die Stadt und die Anzahl der mindestens 50-jährigen wie folgt dargestellt werden, Sortierung egal:

Stadt Anzahl
Berlin 24
Hamburg 18

Bewertung gesamt: 10 Punkte

Einfügen neuer Nutzer

In die Datenbank soll ein neuer Nutzer aufgenommen werden. Erstelle alle Abfragen, die nötig sind, um die angezeigten Daten zu speichern. Sofern Du nicht mit Subqueries arbeitest und zum Einfügen IDs aus anderen Tabellen benötigst, erstelle die Abfragen, mit denen Du diese IDs auslesen kannst und nenne fiktive Ergebnisse zum Weiterarbeiten. Es kann davon ausgegangen werden, dass es nur eine Userin “Martina Mustermann” und einen “Peter Meyer” gibt und dass das Hobby “Tanzen” bereits in der Datenbank unter diesem Namen angelegt ist.

firstname lastname postcode city Hobby Hobby Prio befreundet mit
Peter Meyer 31319 Sehnde Tanzen 100 Martina Mustermann

Bewertung 19 Punkte

Analyse Profilbilder und Freundschaften

  1. Es sollen alle Nutzer per E-Mail angeschrieben werden, die über kein Profilbild (tblProfilePicture) verfügen. Hierzu soll eine Abfrage erstellt werden, die alle in der Datenbank befindlichen Adressen ausgibt, für die kein Profilbild hinterlegt ist.
  1. Ausgegeben werden sollen alle Einträge der tblUser und deren zugehörige Freunde (über tblFriendship) wie unten angegeben, Sortierung egal.
Vorname1 Nachname1 Vorname2 Nachname2
Peter Meyer Martina Mustermann
Peter Meyer Helmut Meyerhof
Kay Fabian NULL NULL
Marco Kriener Cetin Hamide
Marco Kriener Sybille Dropmann

Anpassungen in der Datenbank

  1. Der “Gerhard-Schröder-Platz” in München wurde umbenannt und heißt jetzt “Angela-Merkel-Forum”. Passe die betreffenden Adressen in tblUser entsprechend an!

|

  1. Die Priorisierung in tblHobby2User wurde bislang mit Zahlen von 0-100 umgesetzt. Um eine größere Bandbreite abzudecken sollen alle Werte jetzt um den Faktor 10 erhöht werden (zukünftig also zwischen 0 und 1000 sein). Erstelle eine Abfrage, um den Bestand anzupassen!

Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: SQL-Übungsaufgaben (zur "Let’s Meet"-Datenbank)” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/lets_meet-beispielloesung_uebungsaufgaben veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/db-sql/lets-meet-db. Stand: 13.06.2023.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: