Wiki: Mathe und Info

Unterrichtsmaterialien für Mathematik und Informatik

Benutzer-Werkzeuge

Webseiten-Werkzeuge


info:sek-ii:q2:sql:lektion1

Datenbanken, Datenbanksoftware und erste Schritte mit SQL

Was sind eigentlich Datenbanken?

Datenbanken begegnen uns in unserer digitalen Welt ständig, oft ohne dass wir es merken. Hinter praktisch jeder Website steckt eine Datenbank, die die Daten der Website speichert (z.B. die Produktdetails von Amazon, die Lieddetails von Spotify, die Videodetails von Youtube, etc.).

Aber auch sogut wie alle Behördendaten liegen in großen Datenbanken: Die Daten vom Einwohnermeldeamt einer Gemeinde, die Schülerdaten einer Schule, …

Definition: Datenbank

Eine Datenbank speichert einzelne Datensätze in Tabellen. Die Datenbank der Gringotts-Bank aus Harry Potter könnte (sehr vereinfacht) in etwa so aussehen:

Konten:
Mitarbeiter:

Hierbei ist besteht Datenbank aus den beiden Tabellen Konten und Mitarbeiter. Jede der beiden Tabellen hat einzelne Datensätze, z.B. ist der Datensatz 1, Harry Potter, 1000 ein Datensatz der Tabelle Konten und 3, William Weasley ein Datensatz der Tabelle Mitarbeiter.

Aufgabe 1

Lest die Grundlagen zu Datenbanksystemen und zu relationalen Datenbanken und beantwortet die folgenden Fragen in eurem Gruppendokument:

  • Was ist der Unterschied zwischen Datenbank, Datenbankmanagementsystem und Datenbanksystem?
  • Wozu braucht man ein Datenbanksystem und welche Anforderungen werden an ein Datenbanksystem gestellt?
  • Was genau ist eine relationale Datenbank und welche anderen Typen von Datenbanksystemen gibt es?
Definition: SQL

Um auf eine Datenbank und die darauf gespeicherten Daten zugreifen zu können, wird eine so genannte strukturierte Abfragesprache (Structured Query Language, kurz SQL) benötigt. Diese besteht aus vier Komponenten1):

  • Die Datendefinitionssprache (Data Definition Language, kurz DDL) ist für die Definition der Datenstruktur in einer Datenbank zuständig.
    CREATE TABLE Accounts (ID INT, Name TEXT);
    ALTER TABLE Accounts ADD Balance INT;
    DROP TABLE Accounts;
  • Die Datenmanipulationssprache (Data Manipulation Language, kurz DML) ist für das Hinzufügen, Bearbeiten oder Löschen von Daten in einer Datenbank zuständig.
    INSERT INTO Accounts VALUES (1, 'john.doe', 10000);
    UPDATE Accounts SET Balance = Balance + 100 WHERE ID = 1;
    DELETE FROM Accoutns WHERE ID = 1;
  • Die Datenabfragesprache (Data Query Language, kurz: DQL) ist für das Lesen oder Abfragen von Daten aus einer Datenbank zuständig.
    SELECT * FROM Accounts;
  • Die Datenkontrollsprache (Data Control Language, kurz DCL) ist für die administrativen Aufgaben zur Steuerung der Datenbank selbst zuständig ist, insbesondere für die Erteilung und den Entzug von Datenbankberechtigungen für Benutzer.
    GRANT SELECT ON Accounts TO USER@db-server.com;
    REVOKE SELECT ON Accounts FROM USER@db-server.com;

Die gesamte Menge aller SQL-Befehle ist sehr komplex. Zunächst kümmern wir uns nur darum, Daten von bereits bestehende Datebanken auslesen zu können. Wir beschäftigen uns also erstmal nur mit der DQL. In den weiteren Lektionen werden wir dann auch noch die Daten in Datenbanken mit der DMLverändern und später sogar eigene Datenbanken mit der DDL erstellen. Die DCL werden wir im Grundkurs weg lassen.

Aufgabe 2

Öffne die Chinook-Datenbank in einem neuen Browserfenster neben diesem Fenster mit den Aufgaben. So kannst du die Befehle unten direkt in der Datenbank ausprobieren!

  1. Klappe das Datenbank-Schema auf und klicke auf nacheinander auf ein paar Tabellen-Namen.
    • So werden die passenden DQL-Befehle direkt in den Abfrage-Editor eingegeben und direkt ausgeführt.
    • Unten kannst du die Abfrageergebnisse anschauen.
  2. Verschaffe dir so einen Überblick über die Chinook-Datenbank. Was für Daten beinhaltet sie? Wozu dient die Chinook-Datenbank?
Erste DQL-Befehle

Die einfachste Art von DQL-Befehlen sind solche, die einfach alle Datensätze einer Tabelle anzeigen.

SELECT *
FROM artists
SELECT title
FROM albums

DQL-Befehle bestehen immer mindestens aus einer SELECT- und einer FROM-Klausel:

  • Mit der SELECT-Klausel gibt man an, welche Spalten einer Tabelle man angezeigt bekommen möchte. Sollen es alle sein, kann man einfach ein * einsetzen.
  • Mit der FROM-Klausel gibt man an, aus welcher Tabelle man die Datensätze auslesen möchte.

Mit dem DISTINCT-Operator sorgt man in der SELECT-Klausel dafür, dass in der Ergebnistabelle keine Einträge mehrfach vorkommen. Vergleiche die Ergebnisse der drei Abfragen:

SELECT *
FROM tracks
SELECT unitprice
FROM tracks
SELECT DISTINCT unitprice
FROM tracks
Daten filtern

Das ist aber oft sehr umständlich. Was, wenn man nun aber seine Suche genauer spezifizieren möchte? Hierfür muss man die Daten filtern, also einzelne Datensätze / Zeilen auswählen. Hierfür wird die WHERE-Klausel am Ende ergänzt:

  • Mit den Operatoren <, <=, =, <>, >= und > kann man Vergleichsbedingungen in der WHERE-Klausel formulieren.
    SELECT *
    FROM artists
    WHERE artistid = 88;
    SELECT *
    FROM invoices
    WHERE total > 20
    SELECT *
    FROM employees
    WHERE HireDate > '2003-01-01'
  • Mit den Operatoren AND, OR und NOT kann man logische Bedingungen in der WHERE-Klausel formulieren.
    SELECT *
    FROM employees
    WHERE HireDate > '2003-01-01'
    AND City = 'Calgary'
    SELECT *
    FROM employees
    WHERE HireDate > '2003-01-01'
    AND City = 'Calgary'
    AND NOT Title = 'IT Manager'
  • Für Bereichsvergleiche verwendet man den BETWEEN-Operator.
    SELECT *
    FROM invoices
    WHERE InvoiceDate BETWEEN '2010-01-01' AND '2010-02-01'
  • Mit dem LIKE-Operator kann man Muster für Text-Vergleiche benutzen. Das Prozentzeichen % steht für eine beliebige Folge von Zeichen, während der Unterstrich _ für ein einziges beliebiges Zeichen steht:
    SELECT *
    FROM albums
    WHERE title LIKE '%Disc _%'
  • Hat man eine ganze Liste von Kriterien für die gesuchten Daten, so kann der IN-Operator weiter helfen. Das geht auch in Kombination mit NOT.
    SELECT *
    FROM customers
    WHERE customerid IN (5, 44, 49)
  • Wenn beim Einfügen von Daten in eine Datenbanktabelle ein Wert noch nicht bekannt ist, so wird dieser mit dem sogenannten NULL-Wert belegt. Solche NULL-Werte kann man mit dem IS-Operator finden. Das geht auch in Kombination mit NOT.
    SELECT *
    FROM tracks
    WHERE composer IS NULL;
Mathe!

In der SELECT-Klausel können mit den Grundrechenarten (+, -, *, /) Berechnungen durchgeführt werden. Den berechneten Ergebnisspalten kannst Du mit dem AS-Operator Bezeichnungen geben.

SELECT
    Name,
    Milliseconds,
    Milliseconds / 1000.0 AS Seconds,
    Bytes,
    Bytes / 1000.0 AS Kilobytes
FROM tracks
Sortieren!

Will man seine Ergebnisse nach bestimmten Kriterien sortiert ausgegeben haben, so setzt man den ORDER BY-Operator ein. Standardmäßig werden Texte in alpabetischer Reihenfolge von A bis Z sortiert und Zahlen der Größe nach. Mit dem Zusatz DESC werden die Daten absteigend sortiert.

SELECT *
FROM tracks
ORDER BY milliseconds
SELECT *
FROM tracks
ORDER BY bytes DESC
Ergebnisse beschränken

Die LIMIT-Klausel wird benutzt, um die Anzahl von Datensätzen, die von einer SELECT-Anweisung zurückgegeben wird, zu beschränken. LIMIT erwartet ein oder zwei numerische Argumente:

  • LIMIT 10 gibt die ersten zehn Datensätze zurück
  • LIMIT 3, 5 gibt ab dem 4. Datensatz insgesamt 5 Datensätze zurück, die Zählung beginnt also ab 0
SELECT *
FROM tracks
ORDER BY bytes DESC
LIMIT 10
SELECT *
FROM tracks
ORDER BY milliseconds
LIMIT 5, 10
Aufgabe 2

Öffne die Northwind-Datenbank in einem neuen Browserfenster neben diesem Fenster mit den Aufgaben.

  1. Klappe das Datenbank-Schema auf und verschaffe dir so einen Überblick über die Northwind-Datenbank. Was für Daten beinhaltet sie? Wozu dient die Northwind-Datenbank?
  2. Formuliere für jede der folgenden Aufgaben eine eigene DQL-Abfrage! Notiere deine Ergebnisse im Gruppendokument!
    1. Zeige eine Liste von allen Kunden.
    2. Zeige eine Liste von allen Kunden aus Deutschland.
    3. Zeige eine Liste von allen Kunden aus Deutschland, deren Job-Titel Sales Representative ist.
    4. Ermittle Adresse, Postleitzahl und Ort vom Kunden mit der ID ALFKI
    5. Finde alle Produkte, die das Wort berry im Namen enthalten.
    6. Finde alle Produkte aus der Kategorie mit der ID 2
    7. Finde alle Produkte aus der Kategorie mit der ID 2, die mehr als 20€ kosten.
    8. Finde alle Produkte aus der Kategorie mit der ID 2, die mehr als 20€ kosten, aber weniger als 30€.
    9. Finde alle Produkte aus der Kategorie mit der ID 2, die mehr als 20€ kosten, aber weniger als 30€ und von denen noch mindestens 100 auf Lager sind ("auf Lager" = "in stock").
    10. Finde alle Produkte, die nicht mehr hergestellt werden ("discontinued").
    11. Finde die Namen aller Länder, aus denen Kunden stammen.
    12. Lass dir alle Bestellungen ("Orders") anzeigen, absteigend sortiert nach den Versandkosten ("Freight")
    13. Lass dir nur die ersten 10 Bestellungen anzeigen, absteigend sortiert nach den Versandkosten ("Freight")
    14. Lass dir 10 Bestellungen anzeigen, überspringe aber die ersten 15, absteigend sortiert nach den Versandkosten ("Freight")
    15. Lass dir in einer einzigen Abfrage die Ansprechpartner der Kunden mit den IDs ALFKI, BERGS und DRACD anzeigen.
    16. Lass dir für jedes Produkt den im Lager lagernden Wert berechnen (Tipp: Preis * Anzahl)
  3. Denke dir weitere, sinnvolle Abfragen aus. Notiere dir im Gruppendokument sowohl die "Text-Anfrage" (Wie Aufgaben a)-p) und die DQL dazu!
1)
Quelle der einzelnen Komponenten, angepasst: https://learnsql.de/blog/was-sind-ddl-dml-dql-und-dcl-in-sql/
info/sek-ii/q2/sql/lektion1.txt · Zuletzt geändert: 2024-01-28 21:31 von christian.weber