- Was wirst du lernen?
- Einstieg in Datenbanken
- Regelstandard der Datenbanken
- Datenbankmodellierung
- Redundanzen, Anomalien und Inkonsistenzen
- SQL
- Glossar
Die vorliegenden Materialien wurden von Daniel Hoherz und André Tempel erstellt. Sollten andere Editoren die Materialien erstellt haben, werden diese explizit genannt.
Du kennst sicherlich soziale Netzwerk wie Instagram oder TikTok und dir ist sicherlich auch klar, dass diese die ganzen Nutzerdaten irgendwie speichern müssen. Doch wie machen die das?
Eine der gängisten Varianten in der Informatik große Datenmengen zu speichern und zu verwalten, sind Datenbanken.
Du wirst im Folgenden Datenbanken kennenlernen und sehen wie diese aufgebaut sind. Darüber hinaus wirst du lernen wie du Informationen aus den Datenbanken gewinnen kannst.
Schaue dir unten die zu erwerbenden Kompetenzen an, sowie die Checklisten, um eine Idee der Einheit zu erhalten und lade dir dann hier die Checkliste für die Einheit herunter, um deinen Fortschritt zu überprüfen.
| Inhalt | Mindeststandard | Regelstandard | Expertenstandard |
|---|---|---|---|
| Datenbanken & ER-Modell |
Ich kann die Bestandteile einer relationalen Datenbank und eines ER-Modells beschreiben und die Datenbank als relationales Schema angeben. | Ich kann ein ER-Modell ins relationale Datenbankschema unter Berücksichtung der Kardinalitäten überführen sowie eine ER-Modell aus dem relationalen Schmema erstellen und Erweiterungen ergänzen. | Ich kann ER-Modelle und relationale Schemata aus einem Sachkontext modellieren. |
|
Checkliste ER-Modell Mindeststandard Ich kann in einer relationalen Datenbank die Begriffe Tabelle, Tabellenname, Datensatz, Attribut, Attributwert, Primär- und Fremdschklüssel beschreiben. Ich kann in einer relationalen Datenbank die Begriffe Tabelle, Tabellenname, Datensatz, Attribut, Attributwert, Primär- und Fremdschklüssel zuordnen. Ich kann die Entitäten und Attribute in einem ER-Modell bestimmen. Ich kann das relationales Datenbankschema aus der relationalen Datenbank heraus angeben. Ich kann die Attribute in Verbindungen mit deren Entitäten beschreiben. |
|||
|
Checkliste ER-Modell Regelstandard Ich kann ein ER-Modell um weitere Entitäten, Attribute, Relationen und Kardinalitäten ergänzen. Ich kann ein ER-Modell in das relationale Schema überführen. Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die 1:1-Relationen passend überführen. Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die 1:n-Relationen passend überführen. Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die n:m-Relationen passend überführen. Ich kann aus einem relationalem Schema das ER-Modell erstellen. |
|||
|
Checkliste ER-Modell Expertenstandard Ich kann Entitäten aus einem Sachkontext in ein ER-Modell modellieren. Ich kann Attribute aus einem Sachkontext in ein ER-Modell modellieren und mit den Entitäten verknüpfen. | |||
| Anomalien | Ich kann Redundanzen in Datenbanken benennen und die drei Formen der Anomalien benennen. | Ich kann in einer Datenbank die drei Formen der Anomalien ermitteln, erklären und darstellen zu welchen Inkonsistenzen diese führen. | Ich kann in einer Datenbank die drei Formen der Anomalien bestimmen und die Datenbank anpassen, um die Anomalien zu beseitigen. |
|
Checkliste Anomalien Mindeststandard Ich kann |
|||
|
Checkliste Anomalien Regelstandard Ich kann |
|||
| Checkliste Anomalien Expertenstandard Ich kann | |||
| SQL | Ich kann einfache SQL-Abfragen formulieren, um Daten aus einer Tabelle auszuwählen (Projektion) und sie nach bestimmten Bedingungen (Selektion) mithilfe von Vergleichsoperatoren filtern. | Ich kann logische Operatoren nutzen sowie meine Abfragen durch die Anwendung von Alias (AS), Sortierung (ORDER BY) und Entfernung von Duplikaten (DISTINCT) effektiv verändern, um komplexe Bedingungen und sinnvolle Ausgabe zu erzeugen. | Ich kann Ergebnisse meiner Abfragen durch das Nutzen von Aggregatfunktionen erstellen, die einen Informationsgewinn darstellen und präsentieren sowie SQL-Abfragen kritisch analysieren und optimieren. |
|
Checkliste SQL Mindeststandard Ich kann die SELECT-Anweisung verwenden, um spezifische Spalten aus einer Tabelle auszuwählen. Ich kann eine SQL-Abfrage mit einer Bedingung formulieren, die auf Gleichheit prüft. Ich kann die FROM-Klausel nutzen, um die Tabelle anzugeben, aus der die Daten ausgewählt werden. Ich kann die WHERE-Klausel einsetzen, um Bedingungen für die Selektion der Daten festzulegen. Ich kann Vergleichsoperatoren wie =, <, >, <=, >= und <> verwenden, um Datensätze zu filtern. |
|||
|
Checkliste SQL Regelstandard Ich kann logische Operatoren wie AND, OR und NOT einsetzen, um Bedingungen zu verknüpfen. Ich kann Aliasnamen mit der AS-Klausel verwenden, um Spalten in meinen Abfragen umzubenennen. Ich kann die ORDER BY-Klausel nutzen, um die Ergebnisse nach einer Spalte zu sortieren. Ich kann die DISTINCT-Klausel einsetzen, um doppelte Datensätze aus den Ergebnissen zu entfernen. Ich kann logische Operatoren sowie AS, ORDER BY und DISTINCT kombinieren, um komplexe Ausdrücke zu formulieren und sinnvolle Ausgaben zu erzeugen. |
|||
|
Checkliste SQL Expertenstandard Ich kann Aggregatfunktionen wie SUM, AVG, COUNT, MIN und MAX verwenden, um Daten zu aggregieren. Ich kann mathematische Operatoren wie Addition, Subtraktion, Multiplikation und Division in meinen Abfragen verwenden. Ich kann die Ergebnisse meiner Abfragen formatieren, um sie übersichtlicher und verständlicher zu präsentieren. Ich kann SQL-Abfragen auf ihre Effizienz und Lesbarkeit hin analysieren, um mögliche Optimierungspotenziale zu identifizieren. |
|||
Stell dir vor du hast gerade auf deiner Lieblings-Social-Media-Plattform dein Profil bearbeitet, ein neues Bild hochgeladen, einen Post kommentiert oder eine neue Freundschaftsanfrage angenommen. Doch wie werden diese Informationen gespeichert?
- Woher „weiß“ die Plattform eigentlich jederzeit, wer du bist und was du gerade gemacht hast?
- Wie kann es sein, dass dein Post oder Kommentar direkt bei deinen freunden im Feed erscheint?
- Was denkst du, wie deine Profilinformationen, Posts, Freundeslisten und Kommentare überhaupot gespeichert werden?
- Wie werden mehrere Millionen Nutzerprofile, Posts und Freundschaften so abgesüeichert, dass man sie jederzeit wiederfinden oder verändern kann?
- Warum werden dir bei einer Suchanfrage (zum Beispiel nach einem Freund) sofort passende Vorschläge angezeigt?
- Was passiert im „Hintergrund“, wenn du eine Freundschaftsanfrage verschickst? Muss dafür irgendwo etwas miteinander verknüpft werden?
- Wie könnten doppelte Profile oder fehlende Verknüpfungen (zum Beispiel: ein Post ohne Autor) durch „gutes Speichern“ verhindert werden?
Was du am Ende können wirst:
- Ich kann beschreiben, dass eine relationale Datenbank aus mehreren Tabellen besteht.
- Ich kann beschreiben, dass relationale Datenbanken als ER-Modelle dargestellt werden.
- Ich kann eine relationale Datenbank sowie ein ER-Modell als relationales Schema darstellen.
- Ich kann den Aufbau einer relationalen Datenbank mit den Begriffen Tabellename, Attribut, Attributwert, Datensatz, Primär- und Fremdschlüssel beschreiben.
- Ich kann beschreiben, was ein ER-Modell ist.
- Ich kann in einem ER-Modell Entitäten und Attribute als Bestandteile beschreiben.
- Ich kann in einem ER-Modell Relationen und Kardinalitäten beschreiben.
- Erstellt zu dritt oder viert (arbeitsteilig) in Goodnotes Karteikarten mit den Begriffen und ggf. Abbildungen und den korrekten Beschreibungen und Benennungen dazu, damit ihr diese für die Klassenarbeit nutzen könnt.
-
Unten ist eine kleine Datenbank einer Social-Media-Plattform zu sehen. Momentan besteht diese nur aus den beiden Tabellen Nutzer und Posts, also anders formuliert: Es werden sich die Benutzer der Plattform und deren Posts in der Datenbank gespeichert.
Nutzer
Nutzer-ID Name E-Mail Registrierungsdatum Geburtsdatum Wohnort 1 Max max.mustermann@mail.de 10.05.2023 15.03.2005 Berlin 2 Lisa lisa.schmidt@mail.de 15.06.2023 22.07.2006 Hamburg 3 Tom tom.weber@mail.de 20.07.2023 05.11.2005 München 4 Anna anna.huber@mail.de 01.08.2023 30.04.2006 Köln 5 Paul paul.neumann@mail.de 12.09.2023 18.09.2005 Frankfurt 6 Sarah sarah.hoffmann@mail.de 25.10.2023 14.02.2006 Stuttgart 7 David david.schulz@mail.de 05.11.2023 08.06.2005 Düsseldorf 8 Lena lena.bauer@mail.de 30.12.2023 27.10.2006 Leipzig Posts
Post-ID Nutzer-ID Inhalt Datum Uhrzeit Likes Kommentare 101 1 Urlaub am Strand 🌊 20.07.2023 14:30 42 8 102 2 Neues Buch gelesen! 📚 22.07.2023 16:45 28 5 103 3 Gestern im Kino gewesen 🎬 23.07.2023 18:20 35 6 104 4 Mein neues Fahrrad 🚴 25.07.2023 12:10 56 12 105 5 Konzert war mega! 🎵 28.07.2023 20:15 89 15 106 6 Selbstgemachte Pizza 🍕 30.07.2023 19:30 64 9 107 7 Wanderung im Schwarzwald 🏞️ 02.08.2023 15:40 33 4 108 8 Neues Handy ausgepackt 📱 05.08.2023 11:25 47 7 109 1 Zoo-Besuch mit Freunden 🦁 08.08.2023 17:10 52 10 110 3 Geburtstagsfeier war super! 🎉 10.08.2023 22:05 78 14 111 5 Neuer Haarschnitt 💇 12.08.2023 13:30 29 3 112 7 Erster Tag im neuen Job 💼 15.08.2023 09:15 61 8 -
Die Datenbank der Social-Media-Plattform ist hier als ER-Modell dargestellt und noch um Freundschaften ergänzt worden.
Lade dir hier das Bild des ER-Modells herunter und beschrifte das ER-Modell mit den passenden Fachbegriffen aus dem Video.
Erstellen aus dem ER-Modell das relationale Schema, soweit dir das möglich ist. Bei den Stellen, wo du es nicht kannst, notiere dir, was dich an einer Überführung hindert.
Beschreibe die Entitäten „Nutzer“ und „Posts“ sowie die zugehörigen Beziehung unter Verwendung der Fachbegriffe.
Eine 1:1-Beziehung ist bisher nicht in dem ER-Modell enthalten.
Erweitere das ER-Modell mit einer passenden 1:1-Beziehung in dem Social-Media-Kontext.
Lade dir hier das Bild der Tabellen herunter und beschrifte die Tabellen mit den passenden Fachbegriffen, wie du es in dem Video gesehen hast.
Erstellen aus der Datenbank das relationale Schema.
Beschreibe die Tabelle „Posts“ unter Verwendung der Fachbegriffe.
Bei der Aufgabe aus dem ER-Modell oben ein relationales Schema zu erstellen, sind einige Schwierigkeiten aufgekommen. Wie stellt man nämlich in relationalem Schema die Beziehungen dar? Bei der 1:n-Beziehung sieht das leicht aus. Da hat die Entität beim n den Primärschlüssel der anderen Entität als Fremdschlüssel(Nutzer-ID als Fremdschlüssel in der Tabelle Posts). Doch wie sieht das bei einer 1:1- und n:m-Relation aus?
Stellen Sie jeweils eine Vermutung auf, wie eine Lösung aussehen könnt.
Was du am Ende können wirst:
- Ich kann ein ER-Modell um weitere Entitäten, Attribute, Relationen und Kardinalitäten aus Sachkontexten ergänzen.
- Ich kann ein ER-Modell in ein relationales Schema überführen.
- Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die 1:1-Relationen passend überführen.
- Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die 1:n-Relationen passend überführen.
- Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die n:m-Relationen passend überführen.
- Ich kann aus einem relationalem Schema das ER-Modell erstellen.
Bei der Überführung des ER-Modells in eine konkrete Datenbank muss man bei den Relationen besonders aufpassen. Denn diese müssen bei der Überführung in das relationale Datenbankschema besonder berücksichtigt werden.
- 1:1-Beziehung
- Bei einer 1:1 Beziehung nehmen wir den Primärschlüssel einer der beiden Relationen und setzen ihn bei der anderen Relation als Fremdschlüssel ein.
Beispiel: Jeder Nutzer hat für sich Einstellungen getätigt und die spezifischen Einstellungen gehören zu einem Nutzer.Um das Modell nun in das relationale datenbankschema zu überführen, geben wir der Tabelle Einstellungen noch den Primärschlüssel von Nutzer als Fremdschlüssel und somit erhalten wir folgendes relationales Datenbankschema:
1:1-Relation
Nutzer(Nutzer-ID, Name, Wohnort, Geburtstdatum, E-Mail, Registrierungsdatum)
Einstellungen(Einstellung-ID, ⭡Nutzer-ID, Sprache, DarkMode, PushBenachrichtigungen) - 1:n-Beziehung
- Bei einer 1:n Beziehung nehmen wir den Primärschlüssel der 1-er Relation und setzen ihn als Fremdschlüssel in die n-Relation ein.
Beispiel: Nutzer können beliebig viele Posts verfassen, aber jeder Post gehört nur zu einer Person.Wie in dem ER-Modell bereits berücksichtigt, erhält die Tabelle bei der Überführung zum relationalen Datenbankschema den Primärschlüssel der Tabelle Nutzer als Fremdschlüssel, da bei Posts die n-Relation ist:
1:n-Relation
Nutzer(Nutzer-ID, Name, Wohnort, Geburtstdatum, E-Mail, Registrierungsdatum)
Posts(Post-ID, ⭡Nutzer-ID, Inhalt, Datum, Uhrzeit, Likes, Kommentare) - n:m-Beziehung
- Bei einer n:m Beziehung wird eine zusätzliche Relation (Zuordnungstabelle) gebildet, die jeweils die Primärschlüssel der n-Relation und m-Relation als Fremdschlüssel enthält.
Beispiel: In diesem Beispiel können mehrere Nutzer miteinander befreundet sein. Wir müssen hier ein neue Tabelle erzeugen, die die Relationbefreundetwiderspiegelt – nennen wir sieFreundschaften. Damit nun abgebildet werden kann, dass ein Nutzer mit einem anderen Nutzer befreundet ist, erhält die Tabelle zwei Mal den Primärschlüssel von Nutzer als Fremdschlüssel (Attributsnamen dürfen nciht identisch sein).
n:m-Relation Nutzer(Nutzer-ID, Name, Wohnort, Geburtstdatum, E-Mail, Registrierungsdatum)
Freundschaften(Freundschaft-ID, ⭡Nutzer1-ID, ⭡Nutzer2-ID)
- Gib das relationale Datenbankschema des folgende ER-Modells an.
ER-Modell: Social-Media - Erweitere das folgende ER-Modell, um die beschriebenen Sachverhalte.
Du kannst das ER-Modell hierüber öffnen.
ER-Modell: Social-Media Beiträgen können gegen Urheberrecht verstoßen (s. Aufgabe 1) und genauso können auch Kommentare dagegen verstoßen.
Ergänze entsprechend die Entität und die Beziehung.Die Social-Media-Plattform muss natürlich auch Freundschaftsanfrage verwalten. Jede Freundschaftsanfrage ist durch eine ID, den Absender und Empfänger der Anfrage, einem Status und einem Datum gekennzeichnet.
Erweitere das ER-Modell um die Entität und die Beziehung.Natürlich arbeitet unsere Social-Media-Plattform auch mit Hashtags, diese haben eine ID und einen Namen. Wie man sich vorstellen kann, können Beiträge mit Hashtags versehen werden.
Erweitere das ER-Modell entsprechend.In Beiträgen können Nutzer markiert werden.
Erweitere das ER-Modell entsprechend.Aus unklaren Gründen möchte Nutzer auf mal ihr Profil löschen. Dazu wurde die Löschanfrage erstellt, die sich Datum, Grund und Status der Anfrage speichert und mit dem Nutzer verbunden ist.
Erweitere das ER-Modell um die Entität und die Beziehung.Manchmal müssen Nutzer ihre Beiträge nachträglich bearbeiten. Dabei kann es ein, dass sie mehrmals ihren Beitrag verändern. Um dieses zu protokollieren, gibt es eine Beitragshistorie. Dabei wird sich jedes Mal nur der letzte alte Inhalt gemerkt und wann der Beitrag geändert wurde.
Erweitere das ER-Modell um die Entität und die Beziehung.Gib das relationale Datenbankschema für dein ER-Modell an.
In der vorherigen Aufgabe 2 hast du bereits einzelnen Sachverhalten in ein bestehendes ER-Modell ergänzt und somit dieses erweitert. Nun soll es darum gehen, ein solches ER-Modell komplett selbstständig aus einem Sachkontext zu entwerfen.
Überlege zunächst, welche Schritte dafür notwendig sein könnten.
Was du am Ende können wirst:
- Ich kann aus einem Sachkontext die Entitäten bestimmen.
- Ich kann aus einem Sachkontext die Attribute bestimmen.
- Ich kann aus einem Sachkontext die Relationen bestimmen.
- Ich kann aus einem Sachkontext die Kardinalitäten bestimmen.
- Ich kann die gewonnen Informationen über Entitäten, Attribute, Relationen und Kardinalitäten als ER-Modell darstellen.
Damit Datenbanken gut und reibungslosen arbeiten können und Millionen von Daten verarbeiten können, müssen sie gut aufgebaut sein. Das ist ähnlich wie mit dem Fundament eines Hauses. Ist dieses nicht gut, trägt es das restliche Haus nicht, was da darauf gesetzt wird.
Um ER-Modelle (das Fundament) gut zu modellieren, bietet sich die folgenden Herangehensweise an:
Mit dieser Anleitung könnt ihr aus jedem Sachkontext ein korrektes ER-Diagramm mit Entitäten, Attributen, Relationen und Kardinalitäten erstellen.
- Schritt 1: Text markieren & Entitäten identifizieren
- Frage: Welche Hauptbegriffe (Nomen) werden im Text genannt, die als Objekte gespeichert werden müssen?
→ Diese werden zu Entitäten (Rechtecke im ER-Diagramm).
Beispieltext: „Eine Schule verwaltet Lehrer und Klassen. Jeder Lehrer unterrichtet in einer oder mehreren Klassen und hat ein Fach, das er primär unterrichtet. Eine Klasse besteht aus Schülern, die Noten in verschiedenen Fächern erhalten.“
Markierte Entitäten (fett): Lehrer, Klassen, Fach, Schüler - Schritt 2: Attribute den Entitäten zuordnen
- Frage: Welche Eigenschaften hat jede Entität?
→ Diese werden als Attribute (Ovale) an die Entitäten gehängt.
Beispiel:Tipp:Entität Attribute Primärschlüssel (unterstrichen) Lehrer Name, Fachbereich, Einstellungsdatum Personalnummer Klasse Raum, Jahrgangsstufe Klassenname Fach Fachleitung Fachname Schüler Name, Geburtsdatum Schüler-ID - Eindeutige Identifikation: Jede Entität braucht ein Primärattribut (z. B. Personalnummer bei Lehrern).
- Keine Redundanz: Attribute, die sich aus anderen ergeben (z. B. Alter aus Geburtsdatum), weglassen!
- Schritt 3: Relationen zwischen Entitäten erkennen
-
Frage: Wie hängen Entitäten zusammen?
→ Verben im Text helfen (z. B. „unterrichtet“, „besteht aus“, „erhält“).
Beispiel:Relation Beteiligte Entitäten Beschreibung unterrichtet Lehrer → Klasse Ein Lehrer unterrichtet in Klassen. hat_Primärfach Lehrer → Fach Ein Lehrer hat ein Hauptfach. gehört_zu Schüler → Klasse Ein Schüler gehört zu einer Klasse. erhält_Note Schüler → Fach Ein Schüler erhält Noten in Fächern. - Schritt 4: Kardinalitäten bestimmen
-
Frage: Wie viele Entitäten der einen Art gehören zu wie vielen der anderen?
→ Minimal- und Maximalanzahl pro Beziehung klären (z. B. „mindestens 1, höchstens n“).
Beispiel:Relation Beteiligte Entitäten Kardinalität Erklärung Beispiel unterrichtet Lehrer → Klasse N:M Ein Lehrer kann viele Klassen unterrichten, eine Klasse hat viele Lehrer. Herr Müller (Lehrer) unterrichtet 5a und 6b; Klasse 5a hat mehrere Lehrer (Müller, Schmidt). hat_Primärfach Lehrer → Fach 1:N Ein Lehrer hat ein Primärfach, ein Fach kann von vielen Lehrern unterrichtet werden. Herr Müller (Lehrer) hat Mathe als Primärfach; Mathe wird von 5 Lehrern unterrichtet. gehört_zu Schüler → Klasse N:1 Viele Schüler gehören zu einer Klasse. 25 Schüler (N) sind in einer Klasse (1) (z. B. 10a). erhält_Note Schüler → Fach N:M Ein Schüler hat Noten in vielen Fächern, ein Fach wird von vielen Schülern belegt. Max (Schüler) hat Noten in Mathe und Deutsch; Mathe wird von 30 Schülern belegt. - Schritt 5: ER-Diagramm zeichnen
- Zeichne nun das ER-Modell entweder per Hand mithilfe vom yEd-Graph Editor (am PC ist das besser zu machen).
- Modelliere in Einzelarbeit aus dem Sachkontext das ER-Modell. Folge dabei den Schritten.
Die Plattform BuchLeseWelt verbindet Menschen mit Büchern und Gleichgesinnten:
Auf der Plattform können sich Nutzer:innen registrieren, die Bücher entdecken und sich in Lesegruppen über Lektüren austauschen möchten. Jede dieser Nutzer:innen wird durch einen einzigartigen Benutzernamen und eine E-Mail-Adresse identifiziert, unter der sie angemeldet ist. Zudem werden ihr vollständiger Name sowie ihr bevorzugtes Buchgenre gespeichert. Besonders wichtig ist jedem Nutzer bzw. jeder Nutzerin ein bestimmtes Buch, das als ihr absolutes Lieblingswerk gilt – wobei dasselbe Buch durchaus von mehreren Personen als Favorit ausgewählt sein kann.
Die Bücher selbst werden über eine eindeutige ISBN identifiziert und enthalten weitere Informationen wie Titel, Erscheinungsjahr und Genre.
Jedes Buch entsteht durch die kreative Arbeit von mindestens einer Autor:in, die durch ihren Namen und ihr Geburtsjahr beschrieben wird.
Um den Austausch zu fördern, können sich Nutzer:innen in Lesegruppen zusammenschließen. Diese Lesegruppen tragen einen Namen, haben ein Gründungsdatum und legen eine maximale Anzahl an Mitgliedern fest, die sie aufnehmen möchten.Identifiziere die Entitäten aus dem Sachkontext.
Ermittle die Attribute zu den Entitäten
Bestimme die Beziehungen zwischen den Entitäten.
Definiere die Kardinalitäten der Relationen.
Zeichne das ER-Modell per Hand oder im yEd Graph Editor.
Die Plattform BuchLeseWelt verbindet Menschen mit Büchern und Gleichgesinnten:
Auf der Plattform können sich Nutzer:innen registrieren, die Bücher entdecken und sich in Lesegruppen über Lektüren austauschen möchten. Jede dieser Nutzer:innen wird durch einen einzigartigen Benutzernamen und eine E-Mail-Adresse identifiziert, unter der sie angemeldet ist. Zudem werden ihr vollständiger Name sowie ihr bevorzugtes Buchgenre gespeichert. Besonders wichtig ist jeder Nutzer:in ein bestimmtes Buch, das als ihr absolutes Lieblingswerk gilt – wobei dasselbe Buch von mehreren Nutzer:innen als Favorit ausgewählt sein kann.
Die Bücher selbst werden über eine eindeutige ISBN identifiziert und enthalten weitere Informationen wie Titel, Erscheinungsjahr und Genre.
Jedes Buch wird von mindestens einer Autor:in geschrieben, die durch ihren Namen und ihr Geburtsjahr beschrieben wird.
Um den Austausch zu fördern, können sich Nutzer:innen in Lesegruppen zusammenschließen. Diese Lesegruppen tragen einen Namen, haben ein Gründungsdatum und legen eine maximale Mitgliederanzahl fest.
Schauen wir uns nochmal eine andere Variante für das Verwalten der Klassenfahrt an.
| Klassenfahrt | ||||||
|---|---|---|---|---|---|---|
| UNName | Adresse | Kapazität | Kosten | Name | Rolle | Telefon |
| Berghütte Alpenblick | Bergstraße 8, 87561 Oberstdorf | 30 | 35 | Max Müller | Schüler | 0176 12345678 |
| Berghütte Alpenblick | Bergstraße 8, 87561 Oberstdorf | 30 | 35 | Lisa Schmidt | Schüler | 0176 87654321 |
| Herberge Alpenveilchen | Bergstraße 5, 87561 Oberstdorf | 20 | 40 | Frau Meier | Begleitung | 0176 11223344 |
| Berghütte Alpenblick | Bergstraße 8, 87561 Oberstdorf | 30 | 35 | Tom Becker | Schüler | 0176 22334455 |
| Herberge Alpenveilchen | Bergstraße 5, 87561 Oberstdorf | 20 | 45 | Herr Schmidt | Begleitung | 0176 22114433 |
| … | … | … | … | … | … | … |
Diskutiert miteinander, ob die folgenden Situationen mögliche Probleme in der Datenbank verursachen können:
- Nachträglich wird Frau Demir als eine weitere Begleitperson hinzugenommen. Sie soll in die Datenbank aufgenommen werden, hat aber noch keine Unterkunft zugewiesen bekommen.
- Die Klasse 10b entdeckt zu einem späteren Zeitpunkt noch eine weitere Unterkunft, die sehr schön zu sein scheint. Die Unterkunft soll in die Datenbank aufgenommen werden. Allerdings fehlen noch die finalen Informationen zur Kapazität und zu den Kosten.
- Leider wurden beim Anlegen der Datensätze die Kosten für die Unterkunft „Berghütte Alpenblick“ falsch eingetragen.
- Die Unterkunft „Berghütte Alpenblick“ muss aufgrund eines Brandschadens von Renovierungsarbeiten so lange schließen, dass es auch den Zeitraum der Fahrt betrifft. Alle Datensätze, die sich auf diese Unterkunft beziehen, sollen demnach aus der Datenbank gelöscht werden.
Ich kann Redundanzen in Datenbanken benennen, die drei Formen der Anomalien erklären sowie die damit verbundenen Inkonsistenzen und die Datenbank anpassen, um die Anomalien zu beseitigen.
In der obigen Tabelle sind viele Daten mehrfach vorhanden. Zum Beispiel sind die Informationen zu den verschiedenen Unterkünften mehrfach in der Tabelle.
Man möchte gerne, dass jede Information möglichst wenig, am besten nur einmal, in der Datenbank ist. Vollständig wird dies allerdings nie funktionieren.
Dass es die Berghütte Alpenblick gibt, weiß man bereits, wenn man nur einen der Datensätze betrachtet, in dem diese Unterkunft auftaucht. Jede weitere Nennung ist eine Redundanz. Diese können unerwünschte Nebenwirkungen, bei Veränderungen der Datenbank, verursachen.
Änderungsanomalie/Update-Anomalie
Die Straßen in Oberstdorf erhalten eine neue Einteilung in Postleitzahlen. In allen Datensätzen, in denen eine Unterkunft in Oberstdorf vorkommt, muss die Adresse geändert werden. Hierbei kann es passieren, dass zu ändernde Attribute übersehen werden. Dies hat zur Folge, dass es anschließend Unterkünfte in Oberstdorf gibt, die die gleichen Namen aber eine andere Postleitzahl haben. Dies ist eine Inkonsistenz der Datenbank.
Löschanomalie
Nach der Klassenfahrt schließt die Unterkunft Herberge Alpenveilchen für immer. Alle Datensätze, in denen diese Unterkunft auftaucht, müssen nun entfernt werden. Möchte man im Nachhinein aus Abrechnungsgründen noch die Personen wissen, welche in dieser Unterkunft übernachtet haben, sind diese Daten verschwunden. Auch dies ist eine Inkonsistenz der Datenbank.
Einfügeanomalie
Eine neue Schülerin kommt plötzlich in die Klasse, hat aber noch keine Unterkunft zugewiesen bekommen. Die Daten der Schülerinnen könnten zwar eingefügt werden, aber das Schlüsselattribut UNName ist nun schwer zu identifizieren. Dies ist ebenfalls eine Inkonsistenz der Datenbank.
| Anomalien verursachen Inkonsistenzen in Datenbanken. Aufgrund von Redundanzen können diese Anomalien entstehen. Je weniger Redundanz in einer Datenbank sind, desto weniger Anomalien können bei Änderungen der Daten und damit Inkonsistenzen in der Datenbank auftreten. Die drei Anomalietypen sind: | ||
|---|---|---|
| Änderungsanomalie/Update-Anomalie | Löschanomalie | Einfügeanomalie |
| Bei Veränderungen von Attributwerten, müssen alle Datensätze, in denen diese verändert werden sollen, geändert werden, damit die Datenbank konsistent bleibt. | Durch das Entfernen von Datensätzen, die nicht mehr benötigt werden, kann es passieren, dass Schlüsselattributwerte verloren gehen, die zu einem späteren Zeitpunkt noch benötigt werden. | Durch das Einfügen von unvollständigen Daten, kann es passieren, dass Schlüsselattribute nicht mehr eindeutig identifiziert werden können. |
- Wir betrachten eine Beispieldatenbank für einen Onlinebuchhandel.
Online-Buchhandel BName Name Vorname Adresse Email ISBN Titel Autor Preis pMueller Müller Peter Hauptstr. 8… … 987-3-6… Der Herr der Ringe J.R.R. Tolkien 32,90 Susi Sorglos Susanne Wiesenweg 14… … 987-3-5… Der Zauberberg Thomas Mann 12,95 Susi Sorglos Susanne Wiesenweg 14… … 987-1-4… Watchmen Alan Moore 13,95 Susi Sorglos Susanne Wiesenweg 14… … 987-3-6… Der Herr der Ringe J.R.R. Tolkien 32,90 KleinUdo Klein Udo Bruchstr. 37… … 987-1-4… Watchmen Alan Moore 13,95 … … … … … … … … … Gebt einen geeigneten Primärschlüssel für die Tabelle Online-Buchhandel an.
Erläutert je ein konkretes Beispiel für eine Anomalie, die bei dieser Variante der Datenbank auftreten kann.
Verändert die Datenbank so, dass es weniger Redundanzen gibt.
-
Eine Fahrschule hat für die Verwaltung ihrer Daten eine Datenbank in Form einer Tabelle angelegt.
Fahrschule Name Vorname GDatum Anzahl Studenten Theorie bestanden Praxis bestanden FLehrer VName FLehrer NName Flehrer Nummer Lampe Luis 03.05.2004 12 ja nein René Renner 0171-1234567 Käfer Kara 12.09.2004 4 nein nein Leonie Lustig 0151-7654321 Mai Mara 30.01.2003 22 ja ja Tom Tonne 0171-9876543 … … … … … … … … … Gebt einen geeigneten Primärschlüssel für die Tabelle an. Untersucht hierbei zwei Fälle:
- Der Primärschlüssel soll aus einer Kombination mehrerer Attribute bestehen.
- Es wird ein neues Attribut „ID“ eingeführt und die Datensätze erhalten eine fortlaufende Nummer.
Erläutert anhand der Tabelle, was man unter Redundanzen und Anomalien versteht. Bezieht euch bei den Anomalien auf mindestens zwei verschiedene konkrete Beispiele der Tabelle und beschreibt mögliche Inkonsistenzen.
Stell dir vor, du scrollst durch deine sozialen Medien und siehst ständig neue Trends, die von Influencern und Freunden geteilt werden. Vielleicht bist du neugierig, welche Filme gerade im Trend sind oder welche Musik die Charts stürmt. In einer Welt, die von Daten geprägt ist, ist es entscheidend zu verstehen, wie man diese Informationen analysiert und interpretiert. Hier kommt SQL (Structured Query Language) ins Spiel – eine leistungsstarke Abfragesprache, die dir hilft, mit Datenbanken zu interagieren und wertvolle Informationen zu extrahieren.
Die Abfragesprache SQL (Structured Query Language) ist ein Standard für die hier betrachteten relationalen Datenbanksysteme.
Eine Abfragesprache wie SQL ist eine deklarative Sprache. Im Gegensatz zu prozeduralen Sprachen, wie z. B. Java, Python oder C++ wird hier nicht schrittweise im Code angegeben, wie der Computer das gewüchste Ziel erreichen soll. Man gibt nur das Ziel an und das Datenbankmanagementsystem entscheidet, wie es dieses erreicht.
In unserem Beispiel oben haben wir gesehen, wie eine solche SQL-Abfrage formuliert wird:
Gib diejenigen Bezeichnung von der Tabelle Aktivitätg aus, für welche die Kosten kleiner als 15 € sind.
SELECT Bezeichnung
FROM Aktivität
WHERE Kosten < 15;
Umgangssprachlich kann man folgende Fragen stellen:
- Was soll ausgegeben werden?
- Aus welcher Tabelle/welchen Tabellen sollen die Dtaen genommen werden?
- Welche zusätzliche Bedingung/zusätzlichen Bedingungen gelten?
Formale Fragen sind:
- Welche Attribute sind auszugeben?
- Welche Tabelle/Tabellen werden genutzt?
- Welche zusätzliche Bedingung/zusätzlichen Bedingungen gelten?
Daraus ergibt sich das folgende Grundgerüst jeder SQL-Abfrage ist:
SELECT Spalte(n)
FROM Tabelle(n)
WHERE Bedingun(en);
← Projektion
← Selektion (optional)
Die Groß-/Kleinschreibung der Schlüsselworte dient nur zur besseren Lesbarkeit. Sie ist in SQL nicht notwendig.
Mit einer Projektion werden gewünschte Spalten herausgefiltert. Die übrigen werden nicht angezeigt.
Beispiel:
| Buch | |||
|---|---|---|---|
| ISBN | Titel | Autor | Preis (€) |
| 978-3-608-93800-5 | Der Hobbit | J.R.R. Tolkien | 24,00 |
| 978-3-453-52842-0 | Ich, der Roboter | Isaac Asimov | 10,00 |
| 978-0-785-83983-5 | A Tale of Two Cities | Charles Dickens | 11,99 |
Um aus der Tabelle nun nur die Autoren zu erhalten, formuliert man folgenden SQL-Abfrage:
SELECT Autor
FROM Buch;
→
| Autor |
|---|
| J.R.R. Tolkien |
| Isaac Asimov |
| Charles Dickens |
Bei der Ausgabe werden die gewünschten Attributswerte und der Name der Spalten angezeigt.
Dieser kann, wie wir später noch sehen werden, angepasst werden.
Möchte man sich eine komplette Tabelle anzeigen lassen, schreibt man hinter SELECT ein *.
SELECT *
FROM Buch;
→
| ISBN | Titel | Autor | Preis (€) |
|---|---|---|---|
| 978-3-608-93800-5 | Der Hobbit | J.R.R. Tolkien | 24,00 |
| 978-3-453-52842-0 | Ich, der Roboter | Isaac Asimov | 10,00 |
| 978-0-785-83983-5 | A Tale of Two Cities | Charles Dickens | 11,99 |
Probiere es hier selbst aus, indem du dir selbst mal die einzelnen Spalten und/oder die Tabelle ausgeben lässt.
- Lasse dir die gesamte Tabelle ausgeben.
- Lasse dir nur die Spalten ISBN und Preis ausgeben.
- Lasse dir die Spalte Autor ausgeben.
Mit einer Selektion können Datensätze herausgefiltert werden, die bestimmten Bedingungen genügen.
So sollen aus der folgenden Tabelle alle Datensätzer ermittelt werden, wo der Titel „Der Hobbit‘ ist.
| Buch | |||
|---|---|---|---|
| ISBN | Titel | Autor | Preis (€) |
| 978-3-608-93800-5 | Der Hobbit | J.R.R. Tolkien | 24,00 |
| 978-3-453-52842-0 | Ich, der Roboter | Isaac Asimov | 10,00 |
| 978-0-785-83983-5 | A Tale of Two Cities | Charles Dickens | 11,99 |
SELECT *
FROM Buch
WHERE Titel = 'Der Hobbit';
→
| ISBN | Titel | Autor | Preis (€) |
|---|---|---|---|
| 978-3-608-93800-5 | Der Hobbit | J.R.R. Tolkien | 24,00 |
Mithilfe einer Kombination von Projektion und Selektion kann man Datensätze nach Attributswerten
durchsuchen, die bestimmten Bedingungen genügen.
Soll nun bspw. ermittelt werden, welcher Autor den Hobbit geschrieben hat, dann lautet die SQL-Abfrage:
SELECT Autor
FROM Buch
WHERE Titel = 'Der Hobbit';
→
| Autor |
|---|
| J.R.R. Tolkien |
Komplexe Suchanfragen sind mit einfachen Projektionen und Selektionen nicht umzusetzen. Oft
möchte man Daten sortiert ausgeben oder Berechnungen innerhalb der Attributswerte durchführen.
Hinter der WHERE-Klausel wurde bisher mit dem Gleichheitszeichen jeweils ein einzelner Attributswert
verglichen. Es sind jedoch weitaus mehr Operationen möglich, von denen die wichtigsten nun
gezeigt werden.
| Operator | Erläuterung |
|---|---|
| < | kleiner |
| > | größer |
| <= | kleiner oder gleich |
| >= | größer oder gleich |
| <> | ungleich |
| BETWEEN | Ist der Wert innerhalb eines bestimmten Wertebereichs? |
| LIKE | Enthalten die durchsuchten Attributswerte einen vorgegebenen Teil? Das Zeichen % meint beliebig viele und _ genau ein Zeichen. |
| IN | Alle Attributswerte werden mit einer vorgegebenen Liste überprüft. |
| IS NULL | Ist der Attributswert mit einem Wert gefüllt oder leer? |
Betrachten wir einige der Operatoren an unseren Beispieltabellen Buch und Film:
| Buch | |||
|---|---|---|---|
| ISBN | Titel | Autor | Preis (€) |
| 978-3-608-93800-5 | Der Hobbit | J.R.R. Tolkien | 24,00 |
| 978-3-453-52842-0 | Ich, der Roboter | Isaac Asimov | 10,00 |
| 978-0-785-83983-5 | A Tale of Two Cities | Charles Dickens | 11,99 |
| Film | ||||
|---|---|---|---|---|
| EAN | Titel | FSK | Preis (€) | Buch |
| 5051890300027 | Der Hobbit | 12 | 44,99 | 978-3-608-93800-5 |
| 4045167015739 | James Bond – Spectre | 12 | 29,99 | |
| 4020628814274 | Great Barrier Reef | 0 | 13,29 | |
Zeige alle Autoren an, deren Bücher mit einem Buchstaben von A bis D beginnen.
SELECT Autor
FROM Buch
WHERE Titel < 'E';
→
| Autor |
|---|
| J.R.R. Tolkien |
| Charles Dickensn |
Zeige alle Filme an, die zwischen 25 und 50 Euro kosten.
SELECT Titel
FROM Film
WHERE Preis BETWEEN 25 AND 50;
→
| Titel |
|---|
| Der Hobbit |
| James Bond - Spectre |
Zeige alle Bücher an, deren Titel 'er' beinhaltet.
SELECT Titel
FROM Buch
WHERE Titel LIKE '%er%';
→
| Titel |
|---|
| Der Hobbit |
| Ich, der Roboter |
Schreibt man %er, werden alle Titel ausgegeben, welche am Ende er haben, also nur Ich, der Roboter. Schreibt man er%, werden alle ausgegeben, die er am Anfang haben, also keine. Schreibt man %er%, werden alle Titel ausgegeben, die irgendwo die Zeichenkette er beinhalten.
Zeige alle Filme an, die 13,29 oder 29,99 kosten.
SELECT Titel
FROM Film
WHERE Preis IN (13.29, 29.99);
→
| Titel |
|---|
| James Bond - Spectre |
| Great Barrier Reef |
Zeige alle Filme an, deren Attributswerte von Buch leer sind.
SELECT Titel
FROM Film
WHERE Buch IS NULL;
→
| Titel |
|---|
| James Bond - Spectre |
| Great Barrier Reef |
Probiere hier einige der Sachen zu den Vergleichsoperationen aus dem obigen Beispielen aus und schaue, ob die folgende Übungen umsetzen kannst.
- Lasse dir zunächst beiden Datenbanken ancheinader ausgeben, damit du weißt, was darin ist.
- Lasse dir dann alle Filem ausgeben, dessen FSK gleich 16 ist.
- Formuliere eine SQL-Abfrage, die dir nur den Titel der Filme ausgibt, dessen FSK unter 16 liegt.
- Die untenstehende Datenbank soll gegeben sein. Dokumentiere deine Ergebnisse.
Lasse dir zunächst die gesamte Datenbank nacheinander ausgeben.
Gib eine detaillierte Beschreibung des Zwecks und der Struktur der Datenbank an.
Formuliere eine Abfrage, um die Benutzernamen und die Geburtsjahreder Tabelle Benutzer zu ermitteln.
Es sollen alle Informationen über den Benutzer mit der benutzer_id 3 aus der Tabelle Benutzer ermittelt werden.
Ermittle alle Beiträge, die mehr als 15 Likes haben.
Ermittle alle Beiträge, die mehr als 15 Likes haben.
- Analysiere die folgenden SQL-Abfragen, indem du beschreibst, was diese machen und notiere die Ausgaben. Prüfe erst danach, was die SQL-Abfrage macht. Dokumentiere deine Ergebnisse.
SELECT inhalt
FROM Beiträge
WHERE likes >=20 ;
SELECT benutzername, geburtsjahr
FROM Benutzer
WHERE geburtsjahr <= 1999;
Wie auch in Programmiersprachen wie JAVA können auch in SQL logische Operatoren (AND, OR, NOT) genutzt werden. Damit lassen sich verschiedene Bedingungen hinter der WHERE-Klausel verbinden.
Zeige alle Buchtitel der Datenbank an, die von Isaac Asimov oder Charles Dickens geschrieben wurden.
SELECT Titel
FROM Buch
WHERE Autor = 'Isaac Asimov' OR Autor = 'Charles Dickens';
→
| Titel |
|---|
| Ich, der Roboter |
| A Tale of Two Cities |
Zeige alle Buchtitel der Datenbank an, die nicht von Isaac Asimov geschrieben wurden.
SELECT Titel
FROM Buch
WHERE NOT Autor = 'Isaac Asimov';
→
| Titel |
|---|
| A Tale of Two Cities |
Zeige alle Buchtitel der Datenbank an, die von Charles Dickens geschrieben wurden und die 11,99€ kosten.
SELECT Titel
FROM Buch
WHERE Autor = 'Charles Dickens' AND Preis = 1.99;
→
| Titel |
|---|
| Der Hobbit |
| A Tale of Two Cities |
Mit SQL kann man die Ausgabe der Daten auf verschiedenste Weisen anpassen. Soll ein Spaltenname geändert werden, nutzt man den Operator 'AS'. Möchte man die Daten sortieren, ist dieses mit 'ORDER BY' möglich. Mit 'DISTINCT' verhindert man Doppelnennungen.
Zeige alle Bücher an und gib deren Titel als "Buchname" an, wo der Autor "J.R.R. Tolkien" ist.
SELECT Titel AS Buchname
FROM Buch
WHERE Autor = 'J.R.R. Tolkien';
→
| Buchname |
|---|
| Der Hobbit |
Zeige die Buchtitel und Autoren an, aber nach den Autoren sortiert.
SELECT Titel, Autor
FROM Buch
ORDER BY Autor;
→
| Titel | Autor |
|---|---|
| A Tale of Two Cities | Charles Dickens |
| Ich, der Roboter | Isaac Asimov |
| Der Hobbit | J.R.R. Tolkien |
Zeige alle verschiedenen FSK Einstufungen an.
SELECT DISTINCT FSK
FROM Film;
→
| FSK |
|---|
| 12 |
| 0 |
Probiere hier einige der Sachen zu den logischen Operatoren und der Verfeinerung der Ausgabe aus. Folgende Übungen könnten hier einen guten Einstieg ermöglichen.
- Lasse dir alle Filmtitel als "Filmtitel" ausgeben.
- Lasse dir alle Filmtitel als "Filmtitel" ausgeben, bei denen der FSK = 12 ist und der Preis 19,99€ beträgt.
- Gib die verschiedenen Preise der Filme aus.
- Gib die verschiedenen Preise der Filme aus und ordne sie.
- Gib die Filmtitel und den Preis aus, die entweder mehr als 40€ oder weniger als 18€ kosten.
- Gib die Filmtitel und den Preis aus, die entweder mehr als 40€ oder weniger als 18€ kosten und ordne sie nach dem Preis.
- Wir bleiben bei der Social Media Datenbank. Dokumentiere deine Ergebnisse.
Es sollen alle Benutzer ausgegeben werden, die im Jahr 1995 geboren wurden und deren Registrierungsdatum nach dem 1. januar 2020 liegt.
Formuliere eine SQL-Abfrage, um alle Beiträge auszuwählen, die weniger als 10 Likes haben oder von Benutzern mit der benutzer_id 2 stammen.
Schreibe eine SQL-Abfrage, um alle Benutzer auszuwählen, deren geburtsjahr nicht 2000 ist.
Formuliere eine SQL-Abfrage, um die benutzername und geburtsjahr aus der Tabelle Benutzer auszuwählen und benenne die Spalte geburtsjahr in JahrGeburt um.
Es sollen alle Beiträge entsprechend ihrer Anzahl der Likes sortiert ausgegeben werden.
Es sollen alle Geburtsjahre sortiert ausgegeben werden, wo der Benutzer sich nach dem 01.01.2020 registriert hat.
Formuliere eine SQL-Abfrage, um zu ermitteln, aus welchen Geburtsjahren (keine Dopplung) die Benutzer sind.
Schreibe eine SQL-Abfrage, um die Benutzername der Benutzer auszuwählen, die im Jahr 1990 oder 1995 geboren sind, und benenne die Spalte Benutzername in Name um.
Formuliere eine SQL-Abfrage, um die einzigartigen likes-Werte aus der Tabelle Beiträge auszuwählen und diese in aufsteigender Reihenfolge zu sortieren.
Schreibe eine SQL-Abfrage, um die benutzername und likes aller Beiträge anzuzeigen, die mehr als 10 Likes haben, und benenne die Spalte likes in AnzahlLikes um. Sortiere die Ergebnisse nach AnzahlLikes.
- Analysiere die folgenden SQL-Abfragen, indem du beschreibst, was diese machen und notiere die Ausgaben. Prüfe erst danach, was die SQL-Abfrage macht. Dokumentiere deine Ergebnisse.
SELECT DISTINCT benutzername AS Name
FROM Benutzer WHERE geburtsjahr < 1995
ORDER BY Name;
SELECT DISTINCT inhalt
FROM Beiträge
WHERE inhalt LIKE '%Reise%';
SELECT benutzername, geburtsjahr
FROM Benutzer
WHERE geburtsjahr BETWEEN 1985 AND 1995
ORDER BY geburtsjahr;
Möchte man alle Datensätze einer Tabelle auswerten, werden sogenannte Aggregatfunktionen genutzt. Diese werden hinter die SELECT-Klausel geschrieben.
| Aggregatfunktion | Erläuterung |
|---|---|
| COUNT | Ermittelt die Anzahl der Datensätze |
| SUM | Liefert die Summe aller Werte |
| MAX, MIN | Liefert den grüßten bzw. kleinsten Wert der Datenreihe |
| AVG | Berechnet das arithmetische Mittel der Datenreihe |
| +, -, *, / | Grundrechenarten |
Die folgenden Beispiele beziehen sich immer auf die untenstehende Tabelle.
| Buch | |||
|---|---|---|---|
| ISBN | Titel | Autor | Preis |
| 978-3-608-93800-5 | Der Hobbit | J.R.R. Tolkien | 24.00 |
| 978-3-453-52842-0 | Ich, der Roboter | Isaac Asimov | 10.00 |
| 978-0-785-83983-5 | A Tale of Two Cities | Charles Dickens | 11.99 |
| 978-3-423-21413-1 | Der Hobbit | J.R.R. Tolkien | 9.95 |
| 978-3-518-10001-1 | Eine Weihnachtsgeschichte | Charles Dickens | 12.00 |
| 978-0-358-65303-5 | The Lord of the Rings | J.R.R. Tolkien | 57.99 |
Anzahl der Bücher von J.R.R. Tolkien
SELECT COUNT(*) AS Anzahl_Tolkien
FROM Buch
WHERE Autor = 'J.R.R. Tolkien';
→
| Anzahl_Tolkien |
|---|
| 3 |
Anzahl der Autoren
SELECT COUNT(DISTINCT Autor) AS Anzahl_Autoren
FROM Buch;
→
| Anzahl_Autoren |
|---|
| 3 |
Preis des günstigsten Buches von J.R.R. Tolkien.
SELECT MIN(Preis) AS günstigstes_Tolkien
FROM Buch
WHERE Autor = 'J.R.R. Tolkien';
→
| günstigstes_Tolkien |
|---|
| 9,95 |
Durchschnittspreis aller Bücher.
SELECT AVG(Preis) AS Durchschnitt
FROM Buch;
→
| Durchschnitt |
|---|
| 20,49 |
Preise der Bücher ohne Mehrwertsteuer.
SELECT Titel, Preis, Preis*100/119 AS ohne_Steuer
FROM Buch;
↓
| Titel | Preis | ohne_Steuer |
|---|---|---|
| Der Hobbit | 24,00 | 20,17 |
| Ich, der Roboter | 10,00 | 8,40 |
| A Tale of Two Cities | 11,99 | 10,08 |
| Der Hobbit | 9,95 | 8,36 |
| Eine Weihnachtsgeschichte | 12,00 | 10,08 |
| The Lord of the Rings | 57,99 | 48,73 |
Probiere hier einige der Sachen zu den Aggregatfunktionen aus. Folgenden Übungen könnten hier einen guten Einstieg ermöglichen.
- Ermittle wie teuer es wäre, wenn man sich alle Bücher von "J.R.R. Tolkien" kaufen möchte.
- Ermittle die Anzahl an Datensätzen, bei denen der Titel ein "der" beinhaltet.
- Ermittle den durchschnittlichen Preis von Charles Dickens Büchern
- Lass dir das teuerste und günstigste Buch ausgeben.
- Ich möchte wissen, wie teuer "Die Weihnachtsgeschichte" und "1984" zusammen sind.
- Wir bleiben bei der Social Media Datenbank, aber erweitern diese um die Tabelle
Bewertungen. Das vollständige relationale Schema der Datenbank sieht dann wie folgt aus:
Benutzer (benutzer_id, benutzername, geburtsjhar, registrierumgsdatum, account_bestätigt)
Beiträge (beitrag_id, ⭡benutzer_id, inhalt, datum, likes)
Kommentare (kommentar_id, ⭡benutzer_id, ⭡beitrag_id, inhalt, datum)
Bewertungen (bewertung_id, ⭡benutzer_id, ⭡beitrag_id, sterne, datum)
Dokumentiere deine Ergebnisse.
Schreibe eine SQL-Abfrage, um die Gesamtanzahl der Likes aller Beiträge zu berechnen. Die ausgegebene Tabelle soll "GesamtLikes" heißen.
Formuliere eine SQL-Abfrage, um den durchschnittlichen likes-Wert aller Beiträge zu berechnen und gebe der Tabelle einen passenden Namen.
Formuliere eine SQL-Abfrage, um das Minimum und Maximum der Likes aus der Tabelle Beiträge zu ermitteln. Benenne die Ergebnisrelation passend.
Formuliere eine Abfrage, um das Alter der Benutzer zu ermitteln. Der Begriff "Alter" für einen Tabellennamen wird nicht gehen, nimm Age.
Ermittle die Differenz zwischen dem Beitrag mit den meisten und wenigsten Likes.
Ermittle die Anzahl an Likes, die der Benutzer mit der ID 2 insgesamt erhalten hat.
Ermittle wie viele Bewertungen der Benutzer mit der ID 1 erhalten hat.
Ermittle die höchste und geringste Bewertung, die der Benutzer mit der ID 5 erhalten hat.
Ermittle die durchschnittliche Berwertung des mit der ID 10.
Ermittle die Differenz zwischen der höchsten und niedrigsten Bewertung des Beitrags mit der ID 7.
Ermittle (die Anzahl) alle Benutzer, die ihren Account (nicht) bestätigt haben.
- Analysiere die folgenden SQL-Abfragen, indem du beschreibst, was diese machen und notiere die Ausgaben. Prüfe erst danach, was die SQL-Abfrage macht. Dokumentiere deine Ergebnisse.
SELECT MIN(likes) AS NiedrigsteLikes
FROM Beiträge
WHERE NOT (benutzer_id = 3);
SELECT inhalt, likes
FROM Beiträge
WHERE likes = (
SELECT MAX(likes)
FROM Beiträge);

