Dies ist eine alte Version des Dokuments!


Links

https://www.info.we-tea.ch/doku.php?id=wiki:datenbanken:01_datenbanken https://www.info.we-tea.ch/doku.php?id=wiki:datenbanken:02_datenbanken https://www.info.we-tea.ch/doku.php?id=wiki:datenbanken:lab_datenbanken https://www.info.we-tea.ch/doku.php?id=wiki:datenbanken:lab_datenbanken

Datenbanken 1 - Einführung

Eine Datenbank ist eine organisierte Sammlung von strukturierten Informationen oder Daten, die typischerweise elektronisch in einem Computersystem gespeichert sind. Dabei sind die Daten so strukturiert, dass man daraus möglichst einfach und effizient Informationen extrahieren und die Daten manipulieren kann. Mit „manipulieren“ ist gemeint, dass man die Daten gezielt verändern kann. Ausserdem sollen sogenannte Redundanzen vermieden werden und alle Daten zu jeder Zeit korrekt (konsistent) sein.

Ausgangslage

Nehmen wir einmal an, Sie betreiben ein eigenes soziales Netzwerk. D.h. Sie verwalten eine Internetseite (z.B. www.instahub.org), auf welche die Nutzerinnen Fotos hochladen, Fotos von anderen Nutzern kommentieren können und vieles mehr.

Die Daten, die den Inhalt ihrer Webseite bilden (Fotos, Kommentare, Informationen zu den Benutzern etc.) werden in Tabellen (ähnlich wie Excel-Tabellen) auf ihrem Server gespeichert.

Die untenstehende Tabelle zeigt einen Teil dieser Daten: Benutzer Ihres sozialen Netzwerkes (in der Titelzeile gelb markierte Spalten) haben Fotos gepostet (blau markiert) und diese wurden dann von anderen Benutzern kommentiert (grün markiert).

Diese Art der Speicherung ist bereits eine einfache Datenbank. Das unten abgebildete Element wird als Tabelle bezeichnet. Sie besteht aus Spalten und Zeilen. Die Spalten werden Felder genannt: sie stellen ein bestimmtes Merkmal dar, z. B. die Nutzernamen des Netzwerks. Die Zeilen sind die Einträge (auch Datensätze genannt): In diesem Fall entspricht jede Zeile einem Kommentar, der bei einem geposteten Bild gemacht wurde.



Studieren Sie die oben abgebildete Tabelle und beantworten Sie die folgenden Fragen:

  1. Wie viele Kommentare werden durch die Tabelle gespeichert?
  2. Wie viele gepostete Bilder sind in der Tabelle enthalten?
  3. Wer hat am meisten Kommentare erstellt? Wie viele?
  4. Wer hat am meisten Bilder gepostet und wie viele?
  5. Welches Bild hat am meisten Kommentare erhalten?
  6. Was muss in der Tabelle geändert werden, wenn ein Kommentar gelöscht wird?
  7. Was muss in der Tabelle geändert werden, wenn ein Bild gelöscht wird?
  8. Was muss in der Tabelle geändert werden, wenn ein Benutzer seine Mailadresse oder seinen Loginnamen ändert? Oder wenn er gelöscht wird?

Problem

Werden die Daten Ihres sozialen Netzwerks auf diese Weise gespeichert, dann verbraucht ihre Tabelle unnötigerweise viel zu viel Speicherplatz. Zudem ist es nicht ganz einfach, wenn z.B. ein Nutzer sein Profil löschen möchte oder Ähnliches. Viele Informationen werden durch diese gewählte Tabellenart doppelt gespeichert.

Redundanzen:
Redundanzen bedeutet also, dass Informationen unnötigerweise mehrmals abgespeichert werden. Das führt immer zu Speicherplatzverschwendung, Einbussen in der Zeit (wenn wir beispielsweise Daten suchen oder ändern wollen) und sollte in Datenbanken immer vermieden werden!

Die folgende Abbildung veranschaulicht diese Problematik sehr gut. In der Tabelle werden die Daten der Benutzer oder auch die Beschreibungen der Bilder oft mehrmals gespeichert. Beachten Sie beispielsweise, wie oft die Daten von Melina Aachen und ihrem Bild architecture.jpg in der Tabelle vorkommen.

Redundanzen gibt es auch bei den kommentierenden Nutzern und zwischen den kommentierenden Nutzern und den Nutzern, welche die Fotos gepostet haben.



Lösung: relationelle Datenbank

Eine effiziente und einfache Lösung des Problems ist die sogenannte relationale Datenbank. Dabei werden die Daten auf mehrere Tabellen verteilt, die miteinander in Verbindung stehen, also verknüpft sind.

Um dies zu erreichen, muss für jede Gruppe von Feldern, die redundante Elemente enthalten, eine neue Tabelle erstellt werden. Man achtet auch darauf, dass die entstehenden Tabellen inhaltlich zusammengehörende Daten enthalten.

In unserem Beispiel gibt es Redundanzen bei den Benutzern und bei den geposteten Bildern. D.h. zusätzlich zur Tabelle „Kommentare“ müssen wir zwei Tabellen „Benutzer“ und „Bilder“ erstellen, welche die Benutzer unseres Netzwrekes und die geposteten Bilder enthalten.

Die Tabelle „Benutzer“ sieht nun folgendermassen aus:

Diese Tabelle enthält nun jeden Benutzer unseres Netzwerkes genau ein Mal. Neben den bereits bekannten Feldern wurde ein neues Feld mit dem Namen „user_id“ hinzugefügt. Dieses Datenbankfeld nennen wir den Primärschlüssel der Tabelle. Dieser dient dazu, alle Benutzer unseres Netzwerkes eindeutig zu identifizieren. Jede Nummer im Feld „user_id“ muss daher absolut eindeutig sein, was bedeutet, sie darf nur ein einziges mal vorkommen!

Primärschlüssel:
Primärschlüssel sind Felder in Tabellen, die für jeden Datensatz (jede Zeile in der Tabelle) einen absolut eindeutigen Wert enthalten. Primärschlüssel dienen dazu, jeden Datensatz eindeutig identifizieren zu können. Man sollte stets versuchen, Namen von Menschen als Primärschlüssel zu vermeiden, da mehrere Menschen gleich heissen können. Das würde dann zu Problemen führen.

Die neue Tabelle „Bilder“ sieht wie folgt aus:

Auch bei der Tabelle der Bilder wurde ein Primärschlüssel photo_id hinzugefügt, damit man die Bilder eindeutig indentifizieren kann. Die gesamten Benutzerdaten werden nun aber nicht mehr in dieser Tabelle gespeichert. Stattdessen speichert man lediglich die user_id des Benutzers, der das Bild gepostet hat.

Und nun kommen wir schliesslich zur ursprünglichen Tabelle „Kommentare“, welche die Kommentare der geposteten Bilder speichert. Sie enthält nun viel weniger Felder, da die Informationen zu den Benutzern und zu den Bildern in den entsprechenden Tabellen gespeichert sind. Damit man aber weiss, um welche Benutzer oder um welches Bild es sich handelt, sind diese durch die Felder photo_user_id, photo_id und com_user_id verknüpft. Man spricht von sogenannten Fremdschlüsseln.

In dieser Tabelle verweist das Feld „photo_user_id“ auf die Tabelle „Benutzer“ und der Inhalt des Feldes entspricht der „user_id“. Der Verweis auf die Tabelle „Fotos“ funktioniert auf ähnliche Weise (über das Feld photo_id, welches in der Tabelle Fotos ebenfalls photo_id heisst). Schliesslich ist auch das Feld com_user_id eine Verknüpfung auf die Tabelle „Benutzer“. Dieser Fremdschlüssel gibt an, welcher Benutzer den Kommentar erstellt hat.

Fremdschlüssel:
Fremdschlüssel sind Datenbankfelder in einer Tabelle, die sich auf Datensätze anderer Tabellen beziehen. Normalerweise bezieht sich ein Fremdschlüssel immer auf den Primärschlüssel der anderen Tabelle.

Bei der Verwendung einer relationalen Datenbank wird der benötigte Speicherplatz geringer sein als beim ursprünglichen Beispiel (mit nur einer Tabelle) und somit das gewünschte Ziel, den Speicherplatz zu reduzieren, erreicht werden.

Relationale Datenbanken:
In Relationalen Datenbanken werden die Daten immer in Form von Tabellen abgespeichert. Dabei hat jede Tabelle einen eigenen Primärschlüssel. Fremdschlüssel werden hiebei benutzt, um verschiedene Tabellen so miteinander zu verbinden, dass Redundanzen möglichst vermieden werden.
Relationale Datenbanken gehören zu den Üblichsten und am meisten verwendeten der Welt und werden heutzutage in fast allen Bereichen eingesetzt.

Das hat aber noch weitere Vorteile: Wenn ein Benutzer beispielsweise seine Mailadresse ändert, genügt es, einen einzigen Eintrag (Datensatz) in der Tabelle „Benutzer“ zu ändern, anstatt mehrere Änderungen in der Tabelle „Kommentare“ zu tätigen. Die Aktualisierung wird also erleichtert. Das gilt auch für Änderungen in der Tabelle Bilder.

Aufgabe Betrachten Sie die unten abgebildeten drei zusätzlichen Zeilen in der Tabelle Kommentare . Was kannst du aus diesen drei Zeilen ablesen? Wer hat das Foto gepostet, wer hat kommentiert und um welches Foto handelte es sich?

In unserer Tabelle „Kommentare“ ist ein Feld immer noch redundant und kann weggelassen werden. Um welches handelt es sich? Erkläre kurz.

Datenbanken 2 - Entwurf und Modellierung

Im Beispiel aus dem letzten Kapitel (Benutzer eines Sozialen Netzwerkes mit geposteten Fotos und Kommentaren) wurden einige grundlegende Konzepte für Datenbanken eingeführt. In der folgenden Liste werden sie noch einmal aufgeführt

  • Tabelle: Eine Datenbank besteht aus Tabellen. Diese werden visuell als Tabellen dargestellt, die Zeilen und Spalten enthalten.
  • Feld: Ein Feld (auch Datenfeld) kann als eine Spalte in einer Tabelle gesehen werden. Es entspricht einem Merkmal in dieser Tabelle. Zum Beispiel entspricht das Feld „comment_body“ in der Tabelle „Kommentare“ einem Kommentar, den ein Benutzer zu einem Foto hinterlassen hat.
  • Datensatz: Ein Datensatz wird durch eine Zeile in einer Tabelle repräsentiert. Beispielsweise enthält die Tabelle „Benutzer“ 12 Datensätze, die jeweils die Informationen eines Benutzers des sozialen Netzwerks enthalten.

Ein Schlüssel ist eine minimale Merkmalskombination, die alle „Zeilen“ (sog. Tupel) innerhalb einer Tabelle eindeutig identifiziert, genauer unterscheidet man zwischen Primärschlüssel und Fremdschlüssel.

Primärschlüssel

Ein übergeordnetes Konzept in relationalen Datenbanken ist das Konzept der Schlüssel. In diesem Modell hat jede Tabelle einen Primärschlüssel (engl. primary key). Der Primärschlüssel einer Tabelle ist ein Feld oder eine Gruppe von Feldern, mit denen ein Datensatz in der Tabelle eindeutig identifiziert werden kann.
Das bedeutet, dass der Inhalt der Datensätze des Primärschlüssels NIE zwischen zwei Zeilen der Tabelle identisch ist. Im Beispiel der Datenbank unseres Sozialen Netzwerkes wird der Primärschlüssel der Tabelle „Benutzer“ durch das Feld „user_id“ gebildet. Jede/r Benutzer/in unseres Netzwerks hat also eine eindeutige Benutzer-ID.Jeder Nutzer und jede Nutzerin kann also eindeutig anhand seiner Benutzer-ID (user_id) identifiziert werden.

Ähnlich kann in der Tabelle „Bilder“ jedes Foto mit dem Primärschlüsselfeld „photo_id“ identifiziert werden. Somit ist auch hier „photo_id“ ein Primärschlüssel. In der Tabelle „Kommentare“ gibt es den Primärschlüssel „comment_id“. Es wäre jedoch auch möglich gewesen, dieses Feld wegzulassen und stattessen einen Primärschlüssel als Gruppe von mehreren vorhandenen Feldern zu definieren. Dies wird Gegenstand einer zu lösenden Übung sein.

Fremdschlüssel

Fremdschlüssel (engl. foreign key) sind Bestandteile einer Tabelle. Dabei handelt es sich um ein Feld (Spalte), die auf einen Primärschlüssel einer anderen (oder aber derselben Tabelle) verweist. Das heisst, dass Fremdschlüssel quasi die Verbindung verschiedener Tabellen ermöglichen, was ein zentrales Konzept relationaler Datenbanken darstellt. In der abgebildeten Tabelle ist beispielsweise photo_user_id ein Fremdschlüssel.

Das Entity-Relationship-Model (kurz ERM) dient der konzeptionellen Darstellung der Elemente einer Datenbank und der Verbindungen zwischen ihnen.
Dieses Modell wurde in den 1970er Jahren von Peter Chen erfunden 1) und wird heute weithin verwendet. Es ermöglicht, die Struktur einer Datenbank auf einfache Weise zu visualisieren.
Um eine robuste Datenbank (robust bedeutetet in diesem Fall qualitativ hochwertig und aus Benutzersicht stabil) zu erstellen, wird ein Datenmodel entworfen . Es geht darum, durch eine Beschreibung der realen Welt (des Bedürfnisses für eine DAtenbank) zur Festlegung einer geeigneten Datenbankstruktur zu gelangen. Im ersten Schritt wird immer mit dem Entwurf des ERM (Entity-relationship-model) begonnen und die relationale Datenbank im zweiten Schritt anhand des ERMs abgeleitet und erstellt. In diesem Entitäten-Beziehungsmodell werden die Entitäten und deren Beziehungen dargestellt.

Entitäten und Beziehungen im Model

Eine Entität sind einzelnes, eindeutig identifizierbares Informationsobjekt, frei übersetzt als „Seiendes“ oder „Ding“. Entitäten werden als Rechtecke dargestellt.
Neben den Entitäten werden die gegenseitigen Beziehungen untereinander als Rauten dargestellt.

In unserem Beispiel vom Sozalen Netzwerk Instahub hat es mindestens zwei Entitäten, je nach dem, was alles beachtet wird. Das sind einerseits die Nutzer und Nutzerinnen des sozialen Netzwerks, andererseits die Fotos. Durch das Posten eigener Bilder oder auch das Kommentieren von Fotos anderer Nutzer stehen die Nutzer, und die Fotos in Beziehung zueinander.

Assoziationen oder auch Kardinalität der Beziehung

Die Assoziationen (teilweise auch Kardinalität genannt) gibt es verschiedene Typen.

  • Einfache Assoziation: jeder Entität wird wieder „genau eine“ Entität zugeordnen, gewissermassen eine 1:1 Beziehung.
    Beispiel 1:Ein Land hat genau eine Hauptstadt. Eine Hauptstadt kann genau einem Land zugeordent werden.
    Beispiel 2: Jeder Schüler hat einen Wiki-Login-Name. Ein Wiki-Login-Name kann einem Schüler zugeornet werden.
  • Konditionelle Assoziation: jeder Entität wird höchstens eine Entität zugeordnet, eine keins-oder-eins Beziehung.
    Beispiel 1: Ein (schweizer) Staatsangehöriger hat genau einen oder keinen (schweizer) Reisepass. Jeder Reisepass gehört einem Staatsangehörigen
    Beispiel 2: Jedes Englischbuch im Klassenzimmer gehört einem Lernenden bzw. einer Lernenden. Nicht unbedingt jeder Lernende muss sein Englischbuch im Klassenzimmer dabei haben.
  • Mehrfache Assoziation: jeder Entität werden „mehrere“ Entitäten zugeordnet. Diese Beziehung ist eine mehr-zu-mehr-Beziehung und wird oft als komplex bezeichnet. Oft spricht man hier auch von einer m:n Beziehung.
    Beispiel 1 einer n:m Beziehung: Im Sozalen Netzwerk können mehrer User mehrere Bilder kommentieren.
    Beispiel 2 einer 1:n Bezieung: Ein bestimmtes Kunstwerk (Bild) kann nur in einem Museum gleichzeitig ausgestellt werden, jedoch hat ein Museum mehrere Kunstwerke ausgestellt.
  • Mehrfach-konditionelle Assoziation: jeder Entität werden „keine, eine oder mehrere“ Entitäten zugeordnet. Im Gegensatz zu der mehrfachen Assoziation ist hier zu nennen, dass nicht zu jeder Entität eine Beziehung zu einer Entität der Zielmenge bestehen muss.

Die Beziehungen lassen sich immer in beide Richtungen lesen. In unserem Beispiel vom Nutzer zum Foto oder vom Foto zum Nutzer.

Nun haben wir in unserem Beispiel die Entitäten ('User' und 'Fotos') und deren Beziehungen ('Posten' und 'Kommentieren') inklusive der Assozationen im ERM-Model gezeichnet. Was noch fehlt, um danach eine Datenbankentwurf umsetzen zu können, sind die Merkmale von Entitäten oder auch jene von Beziehungen.

Einfach ausgedrückt entsprechen Sie den Feldern (als Gedankenstütze man sich könnte dies hier auch als „Tabellenspalten“ oder „Überschriften“ vorstellen), die wir über jede Tabelle abspeichern wollen.

Dabei werden Attribute oval umrahmt abgebildet.
Primärschlüssel werden dabei standardmässig unterstrichen und Fremdschlüssel kursiv geschrieben.

Für unser Beispiel vom Sozialen Netzwerk könnten folgende Attribute dem ERM zugefügt werden.

Kurzer Auftrag 1:
Identifizieren Sie im obigen Model die Primär- und die Fremdschlüssel und bestimmen Sie die restlichen nicht abgebildeten Attribute. Ihr Instahub oder die früheren Tabellen können helfen.

ERM - Aufgabe
Erstellen Sie ein ERM zum folgenden Szenario. Dies wird sicher am einfachsten auf Papier erstellt. Indentifizieren Sie die Primär- und Fremdschlüssel, bestimmen Sie die jeweiligen Entitätsbeziehungen und erstellen Sie ein Diagramm. Achtung, vermutlich braucht dies auch etwas Platz!

Szenario:
Sie entwickeln für einen Zoo eine kleine Datenbank. Es geht darum, Tiere, Gehege und Pflegerinnen und Pfleger in die Datenbank aufzunehmen. dabei gelten die folgenden Beziehungen.

Tiere:
Jedes Tier lebt in einem bestimmten Gehege und kann von mehreren Pflegerinnen oder Pflegern gepflegt werden.Über jedes Tier sollen die verschiedenen Attribute abgespeichert werden: Chipnummer, Name des Tiers, Tierart, Fütterungsinformationen (entweder Fleisch, pflanzlich oder gemischt), Alter, Grösse, Gewicht, Geschlecht
Gehege:
Jedes Tier gehört wie schon erwähnt zu genau einem Gehege. In einem Gehege können aber mehrere Tiere gleichzeitig leben! Für jedes Gehege trägt genau ein Tierpfleger oder -pflegerin die Hauptverantwortung. Über jedes Gehege wollen wir die folgenden Attribute abspeichern:Gehegename, Grösse, Gehegetyp (Wüste, Wald, Tropisch, Wasser oder Aquarium)
Tierpfleger oder -pflegerin
Ein Pfleger oder Pflegerin pflegt mehrere verschiedene Tiere. Die / der PflegerIn kann für mehrere Gehege hauptverantwortlich sein. Über jede Pflegerin und jeden Pfleger sollen die folgenden Attribute abgespeichert werden: Personal_ID, Vornamen, Nachnamen, Geburtsdatum, Telefonnummer

Abbildungsregel für 1:1 Beziehungen - KANN-Regel

Die KANN-Regel bedeutet, dass man bei einer einfach-zu-einfach Beziehung 2 Tabellen erstellen kann, aber nicht miss. Man kann also 2 Tabellen erstellen, wobei es keine Rolle spielt, ob man (in diesem Beispiel Land bei Hauptstadt als Fremdschlüssel definiert oder umgekehrt Hauptstadt bei Land als Fremdschlüssel definiert).

Alternativ ist es hier aber auch möglich, nur 1 Tabelle zu erstellen, die alle Länder und Hauptstädte enthält. In diesem Fall braucht man keinen Fremdschlüssel für diese Beziehung!

Abbildungsregel - MUSS-Regel für einfach-mehrfache Beziehungen

Die MUSS-Regel für einfach-mehrfache Beziehungen bedeutet, dass man bei einer einfach-mehrfachen Beziehung immer zwei Tabellen benötigt und auch die Position des Fremdschlüssels klar definiert ist.

Beispiel einer einfach-zu-mehrfachen-Beziehung
Jeder Auftrag (zum Beispiel Bestellung) gehört zu genau 1 Kunden, während jeder Kunde mehrere Bestellungen tätigen kann (siehe Video weiter oben).

Auftrag:
Zeichnen Sie kurz das ERM mit Kunde Bestellungen und diskutieren Sie zu zweit die Beziehungen und die oben beschriebenen Regeln für dieses Beispiel.

Abbildungsregeln - MUSS-Regel für komplexe Beziehungen

Die MUSS-Regel für komplexe Beziehungen bedeutet, dass man bei komplexen (mehrfach-zu-mehrfach, also n:m) Beziehungen für jede der beiden Entitäten eine Tabelle braucht und zusätzlich für die Beziehung selber eine eigene / weitere / dritte Tabelle erstellen muss. In der dritten Tabelle müssen beide Fremdschlüssel (für beide Entitäten) enthalten sein. Der Primärschlüssel der dritten Tabelle wird aus den beiden Fremdschlüsseln der anderen Tabellen zusammengesetzt.

Auftrag:
Besprechen Sie kurz zu zweit diese „Muss-Regel“ für unser Instahub-Beispiel und auch für die Zoo Aufgabe.

Einführung in SQL

Stuctured Quere Language (SQL) ist eine standardisierte Abfrage-Sprache um Daten in Datenbanken zu speichern, zu manipulieren und herauszufiltern (zu erhalten).
Im folgenden lernen Sie ein paar Grundzüge dieser Abfragesprache kennen, die sie für verschiedenste Datenbanksysteme (wie MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres, u.v.m.) verwenden können.
Einige wichtige Befehle sind im Folgenden erklärt:

SQL-Klausel Zweck Erklärung
SELECT Gibt die Felder mit den gewünschten Daten an Hiermit lässt sich entscheiden, welche Felder (Spalten) wir anzeigen wollen
FROM Enthält die Tabellen mit den Feldern, die in der SELECT-Klausel angegeben sind In welchen Tabellen liegen die Felder (Spalten), die wir erhalten wollen?
WHERE Gibt Feldkriterien an, die jeder Datensatz erfüllen muss, um in die Ergebnisse einbezogen zu werdenHier lassen sich Datensätze herausfiltern (z.B. wenn wir nur gewisse Daten einer Tabelle anzeigen wollen).

Vergleichsoperatoren

Zeichen Bedeutung
= Gleich wie
> Grösser als
>= Grösser oder gleich gross wie
< Kleiner als
<= Kleiner oder gleich gross wie
<> Ungleich wie (unterschiedlich)
BETWEEN a AND b Zwischen a und b

Beispiel mit Instahub: Suchen Sie alle Usernamen der Benutzerinnen aus Ihrer Datenbank. Hier kann über die Suche auch die SQL-Abfrage angezeigt werden. Die SQL-Abfrage ist somit:

SELECT username
FROM users
WHERE gender = "female"

Bearbeiten Sie die folgenden kurzen Aufträge mit Hilfe Ihres Insthubs. Dabei nutzen Sie wieder die Datenbank-Suche oben rechts in Instahub. Notieren Sie anschliessend die SQL-Abfragen. Ziel ist es, in einem zweiten Schritt nicht mehr über die Suche sondern direkt SQL-Abfragen formulieren zu können.

  1. Alle Benutzer:innen,deren Usernamen mit dem Buchstaben „S“ beginnt.
  2. Alle Usernamen der männlichen Benutzer.
  3. Die Benutzer:innen, welche das Wort „Johan“ im Benutzernamen haben.
  4. Die Benutzer, die noch nicht 18 Jahre alt sind.
  5. Die Benutzerinnen, die älter als 30 sind.
  6. Die Benutzer, die kleiner als 1.65m und die Benutzerinnen, die grösser als 175 sind.
  7. Formulieren Sie weitere Abfragen, die Sie sich gegenseitig als Aufgaben stellen.

Lösungen

1. Aufgabe

SELECT username
FROM users
WHERE username LIKE "S%"

Die WHERE-Klausel lässt sich beliebig mit den Ausrücken AND und OR erweitern. Falls wir zum Beispiel alle Studentinnen und Studenten finden wolle, die entweder aus der Schweiz oder (OR) aus Deutschland stammen, würden wir das folgende Query eingeben:
Probieren Sie es aus!

SELECT Nachname, Vorname, Nationalität
FROM Students
WHERE Nationalität="Schweiz" OR Nationalität="Deutschland";

Um Beipsielsweise alle Studenten zu finden, die aus Deutschland stammen und (AND) als Vornamen Sven heissen, würden wir das mit folgendem Query bewerkstelligen:
Probieren Sie es aus!

SELECT Nachname, Vorname, Nationalität
FROM Students
WHERE Nationalität="Deutschland" AND Vorname="Sven";

Möchte man alle Spalten einer Tabelle auswählen, dann braucht man nicht zwingend alle Felder der Tabelle nach der SELECT-Klausel manuell anzugeben. Man kann hierfür auch das Asterikszeichen * verwenden. SELECT * bedeutet also, dass alle Spalten einer Tabelle angewählt werden. Siehe folgendes Beispiel:

SELECT *
FROM Students
WHERE Nationalität="Deutschland";

Versuchen Sie nun sich selbst in die Tabelle der Datenbank einzufügen. Dazu können Sie den Befehl INSERT INTO verwenden.
Sie dürfen alternativ auch einen Namen erfinden, falls Sie selbst nicht in die Datenbankeingetragen werden wollen!
Passen Sie auf, dass sie eine noch freie „S_ID“ verwenden. Diese muss ja eindeutig sein!
Ersetzen Sie also im folgenden Query jeweils die Punkte …

INSERT INTO Students (S_ID, Nachname, Vorname, Geburtsdatum, Nationalität)
VALUES (..., "...", "...", "...","...");

Überprüfen Sie nun mit einer Abfrage, ob Sie in der Datenbank vorhanden sind!

Beispiel count

In SQL lassen sich auch gewisse Funktionen auf Tabellenfelder anwenden. Studieren Sie hierzu das folgende Beispiel:
Es werden alle S_ID in der Tabelle Students ausgewählt und gezählt, wie viele dies sind. Mit anderen Worten wird also gezählt, wie viele Studentinnen und Studenten in der Tabelle vorhanden sind:

SELECT COUNT(S_ID)
FROM Students;
  • Überprüfen Sie nun die folgenden zwei Abfragen. Inwiefern unterscheiden sich diese? Was macht „distinct“ in der zweiten Abfrage genau?
SELECT COUNT(Nationalität)
FROM Students;
SELECT COUNT(DISTINCT Nationalität)
FROM Students;

Beispiel min / max, avg, sum

Ähnlich wie die Funktion count, lassen sich auch weitere Funktionen, wie min (den kleinsten Wert), max (den grössten Wert), sum (die Summe) und avg (den Mittelwert) einsetzen. Neben zum Beispiel im folgenden Query wird die älteste Studentin in der Tabelle ermittelt. Dazu wird die Funktion min auf das Geburtsdatum angewendet:

SELECT MIN(Geburtsdatum)
FROM Students;

Funktionen können auch auf verschiedene Gruppen angewendet werden. In der folgenden Abfrage werden die Studentinnen und Studenten nach Nationalität gruppiert und für jede Gruppe (also jede Nation) die Anzahl Studentinnen und Studenten gezählt:
Testen Sie es:

SELECT Nationalität, COUNT(S_ID)
FROM Students
GROUP BY Nationalität;

Mit der Klausel ORDER BY können resultierende Tabellen aufsteigend nach einem Kriterium (z.B. Geburtsdatum) sortiert werden.

SELECT *
FROM Students
ORDER BY Geburtsdatum;

Möchte man die Sortierung umdrehen, also absteigend sortieren, braucht man nur den Begriff DESC noch hinzuzufügen:

SELECT *
FROM Students
ORDER BY Geburtsdatum DESC;

Manchmal ist es notwendig, SQL-Abfragen zu verschachteln. Nehmen wir einmal an, wir wollen den Nachnamen, Vornamen und Geburtsdatum der jüngsten Studentin / des jüngsten Studenten herausfinden. Dazu müssen wir zunächst mit dem folgenden Query das „grösste“ Geburtsdatum herausfinden:

SELECT MAX(Geburtsdatum)
FROM Students;

In einem zweiten Schritt müssen wir nun herausfinden, welcher Student / welche Studentin genau zu diesem Geburtsdatum gehört. Dazu brauchen wir das vorherige Query in normale Klammern gesetzt in der WHERE-Klausel. Das würde dann wie folgt aussehen:

SELECT Nachname, Vorname, Geburtsdatum 
FROM Students
WHERE Geburtsdatum =
    (SELECT MAX(Geburtsdatum)
    FROM Students);

Beachten Sie, dass die Klammern für das „innere“ Query zwingend notwendig sind!

Terra-Datenbank

Bei der Terra-Datenbank handelt es sich um eine Datenbank über die Erde und eine Vielzahl von geografischen Objekten (wie Städte, Berge, Seen, Länder, etc.). Die Datenbank enthält also eine relativ grosse Menge an Daten.
(Die Datenbank erhebt keinen Anspruch an Vollständigkeit)

Übung 2: Terra-Datenbank
Öffnen Sie wiederum diesen SQL-Playground in einem neuen Browserfenster. Wählen Sie oben rechts im Dropdown-Menü die Datenbank „Terra“ aus!
Bei dieser Datenbank können Sie nur Lese-Operationen durchführen.

Lösen Sie alle geforderten Aufgaben (Abfragen von a) bis p) ) direkt im angehängten Word-Dokument. Kopieren Sie also jeweils ihre gefundenen SQL-Abfragen direkt ins Dokument und speichern Sie dieses!

Speichern Sie bitte das Dokument in Ihrem Informatik-Ordner ab!

Lösungen:

Spiel SQL Island

Freiwillige Übung 3: Flucht von SQL Island
Nach einem Flugzeugabsturz Sind Sie auf der SQL Island gelandet. Ziel ist es, mit Hilfe von SQL-Befehlen wieder von der Insel weg zu kommen. Schaffen Sie es?
Öffnen Sie diese Seite und versuchen Sie es. Sie brauchen dafür einiges an SQL-Statements. Aber keine Angst, das Spiel ist für Anfänger gemacht ;-)


1)
Wikipedia, Freie Enzyklopädie, 2020
  • planung/datenbanken.1685948318.txt.gz
  • Zuletzt geändert: 2023/06/05 08:58
  • von marroc