Datenbanken & SQL: Übungsfragen mit Erklärungen

Kostenlose Multiple-Choice-Übungsfragen zu Datenbanken & SQL mit Tipps und Erklärungen, in drei Stufen: Begriffe und Fakten, Konzepte anwenden, Fälle und Analyse.

Kostenlose ÜbungsaufgabeLeicht

Welche Constraint stellt sicher, dass eine Spalte nie leer (NULL) bleiben kann?

Nächste Aufgabe →
Datenbanken & SQL kostenlos übenDatenbanken & SQL jetzt übenJeden Tag 5 kostenlose Aufgaben. Keine Kreditkarte nötig.

Was du übst

  1. LeichtBegriffe und Fakten
  2. MittelKonzepte anwenden
  3. SchwerFälle und Analyse

Datenbanken & SQL von Grund auf lernen

1Was eine relationale Datenbank ist

Eine relationale Datenbank speichert Daten in Tabellen. Eine Tabelle sieht aus wie eine Tabellenkalkulation: Jede Zeile ist ein Datensatz, jede Spalte eine Eigenschaft.

Ein Geschäft könnte eine Tabelle customers mit den Spalten id, name und city haben und eine Tabelle orders mit den Spalten id, customer_id und total.

Ein Primärschlüssel ist eine Spalte oder eine Gruppe von Spalten, die jede Zeile eindeutig identifiziert. Er darf nie wiederholt werden und nie leer sein. Hier ist das die id jeder Tabelle.

Ein Fremdschlüssel ist eine Spalte, die auf den Primärschlüssel einer anderen Tabelle verweist. In orders sagt customer_id, welcher Kunde die Bestellung aufgegeben hat.

So sind Tabellen verknüpft: Ein Kunde kann viele Bestellungen haben, aber jede Bestellung gehört zu einem Kunden. Das ist eine 1:n-Beziehung (one-to-many).

SQL (Structured Query Language) ist die Sprache, mit der du Tabellen anlegst, Daten änderst und Fragen dazu stellst.

Selbsttest Was ist ein Primärschlüssel?
  1. Die erste Spalte jeder Tabelle
  2. Ein Index, der Suchen schneller macht
  3. Eine Spalte oder eine Gruppe von Spalten, die jede Zeile eindeutig identifiziert
  4. Eine Spalte, die auf eine Zeile in einer anderen Tabelle verweist

Antwort: Eine Spalte oder eine Gruppe von Spalten, die jede Zeile eindeutig identifiziert. Ein Primärschlüssel ist eindeutig und nie NULL, er greift also genau eine Zeile heraus. Eine Spalte, die auf eine andere Tabelle verweist, ist ein Fremdschlüssel.

2Daten lesen mit SELECT

Die meisten Fragen betreffen die Anweisung SELECT. Sie besteht aus Klauseln, die immer in dieser Reihenfolge geschrieben werden:

SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …
  • SELECT listet die gewünschten Spalten auf. DISTINCT entfernt doppelte Zeilen.
  • FROM nennt die Tabelle oder die verknüpften Tabellen.
  • WHERE behält nur die Zeilen, die eine Bedingung erfüllen, zum Beispiel WHERE total > 20.
  • GROUP BY fasst Zeilen mit demselben Wert zu einer Gruppe zusammen, sodass du pro Gruppe zählen oder addieren kannst.
  • HAVING behält nur die Gruppen, die eine Bedingung erfüllen. Es darf Aggregate verwenden, was WHERE nicht darf.
  • ORDER BY sortiert das Ergebnis, standardmäßig aufsteigend; füge DESC hinzu, um den höchsten Wert zuerst zu erhalten.

Die Aggregatfunktionen fassen viele Zeilen zu einem Wert zusammen: COUNT, SUM, AVG, MIN und MAX.

Die Datenbank führt die Klauseln nicht in der Reihenfolge aus, in der du sie schreibst. Sie führt zuerst FROM aus, dann WHERE, GROUP BY, HAVING, SELECT und zuletzt ORDER BY.

Andere Anweisungen verändern Daten: INSERT fügt Zeilen hinzu, UPDATE ändert Zeilen und DELETE entfernt Zeilen. CREATE, ALTER und DROP verändern die Tabellen selbst.

Selbsttest Du willst nur die Kunden mit mehr als 5 Bestellungen. Welche Klausel filtert nach COUNT(*) > 5?
  1. DISTINCT
  2. HAVING
  3. ORDER BY
  4. WHERE

Antwort: HAVING. Die Anzahl existiert erst, nachdem die Zeilen gruppiert sind, und HAVING filtert Gruppen. WHERE läuft vor dem Gruppieren und kann daher kein Aggregat wie COUNT verwenden.

3Joins, Normalisierung und Transaktionen

Ein Join verbindet Zeilen zweier Tabellen anhand einer Bedingung, meist Fremdschlüssel = Primärschlüssel:

FROM customers c JOIN orders o ON o.customer_id = c.id
  • INNER JOIN (oder JOIN) behält nur Zeilen, die in beiden Tabellen einen Treffer haben.
  • LEFT JOIN behält jede Zeile der linken Tabelle. Gibt es keinen Treffer, sind die Spalten der rechten Tabelle NULL.
  • NULL bedeutet, dass ein Wert fehlt oder unbekannt ist. Prüfe ihn mit IS NULL, nie mit = NULL.

Die Normalisierung teilt Tabellen so auf, dass jede Tatsache nur einmal gespeichert wird. Das vermeidet, dieselbe Tatsache an mehreren Stellen zu aktualisieren.

  • 1NF: Jede Zelle enthält einen atomaren Wert, ohne Wiederholungsgruppen.
  • 2NF: 1NF, und jede Nichtschlüsselspalte hängt vom ganzen Schlüssel ab, nicht von einem Teil eines zusammengesetzten Schlüssels.
  • 3NF: 2NF, und keine Nichtschlüsselspalte hängt von einer anderen Nichtschlüsselspalte ab.

Eine Transaktion fasst Anweisungen zu einer Einheit zusammen. COMMIT macht sie dauerhaft, und ROLLBACK macht sie rückgängig. Transaktionen folgen ACID: Atomarität (alles oder nichts), Konsistenz, Isolation und Dauerhaftigkeit.

Selbsttest Ein Kunde hat keine Bestellungen aufgegeben. Was geschieht mit diesem Kunden in customers LEFT JOIN orders?
  1. Der Kunde erscheint einmal für jede Bestellung in der Tabelle
  2. Der Kunde erscheint einmal, mit NULL in den Bestellspalten
  3. Der Kunde fehlt im Ergebnis
  4. Die Abfrage schlägt mit einem Fehler fehl

Antwort: Der Kunde erscheint einmal, mit NULL in den Bestellspalten. Ein LEFT JOIN behält jede Zeile der linken Tabelle und füllt die fehlende rechte Seite mit NULL. Den Kunden wegzulassen tut ein INNER JOIN.

4Das Verfahren Schritt für Schritt

Um eine Abfrage zu schreiben oder herauszufinden, was eine gegebene Abfrage liefert:

  1. Finde die Tabellen, die die Daten enthalten, und wie sie über Schlüssel verknüpft sind.
  2. Schreibe FROM mit den Joins. Wähle LEFT JOIN, wenn Zeilen ohne Treffer erhalten bleiben müssen.
  3. Füge WHERE für Bedingungen an einzelne Zeilen hinzu.
  4. Sagt die Frage „pro“ oder „für jeden“, füge GROUP BY und das Aggregat hinzu.
  5. Füge HAVING für Bedingungen an das Aggregat hinzu, dann ORDER BY, wenn die Reihenfolge wichtig ist.
  6. Prüfe das Ergebnis an einem kleinen Beispiel: Liste die Zeilen nach jeder Klausel auf, in der Reihenfolge, in der die Datenbank sie ausführt.

Benenne bei einer Theoriefrage zuerst das Konzept (ein Schlüssel, eine Join-Art, eine Normalform, eine ACID-Eigenschaft) und wähle dann die Option, die zu seiner Definition passt.

5Ein durchgerechnetes Beispiel

Folge jedem Schritt. Versuche, den nächsten vorherzusagen, bevor du ihn öffnest.

Durchgerechnetes Beispiel

Die Tabelle customers hat die Zeilen (1, Ana), (2, Ben) und (3, Cas). Die Tabelle orders hat die Zeilen (id, customer_id) = (10, 1), (11, 1), (12, 2) und (13, 1). Was liefert diese Abfrage? SELECT c.name, COUNT(o.id) FROM customers c LEFT JOIN orders o ON o.customer_id = c.id GROUP BY c.name

1

FROM und den Join ausführen

Jeder Kunde wird mit den Bestellungen gepaart, die seine id tragen. Ana passt zu den Bestellungen 10, 11 und 13. Ben passt zu Bestellung 12.

Cas hat keine Bestellungen. Weil es ein LEFT JOIN ist, bleibt Cas im Ergebnis, mit NULL für o.id.

2

Die verbundenen Zeilen auflisten

  • Ana, 10
  • Ana, 11
  • Ana, 13
  • Ben, 12
  • Cas, NULL

Das sind 5 Zeilen.

3

Nach name gruppieren

GROUP BY c.name bildet drei Gruppen: Ana mit 3 Zeilen, Ben mit 1 Zeile und Cas mit 1 Zeile.

4

Pro Gruppe zählen

COUNT(o.id) zählt nur die Werte, die nicht NULL sind. Ana erhält 3 und Ben erhält 1.

Cas hat eine Zeile, aber ihr o.id ist NULL, also erhält Cas 0.

5

Antwort prüfen

Ana, Ben und Cas haben zusammen 3 + 1 + 0 = 4 Bestellungen, genauso viele wie Zeilen in orders. Mit COUNT(*) statt dessen würde Cas fälschlich 1 erhalten, weil COUNT(*) die Zeile selbst zählt.

Antwort

Ana 3, Ben 1, Cas 0.

6Häufige Fehler

  • Ein Aggregat in WHERE verwenden. Bedingungen an COUNT, SUM oder AVG gehören in HAVING.
  • = NULL schreiben. Jeder Vergleich mit NULL ist unbekannt; verwende IS NULL oder IS NOT NULL.
  • Einen INNER JOIN verwenden, wenn Zeilen ohne Treffer erhalten bleiben müssen. Verwende einen LEFT JOIN.
  • Die Join-Bedingung vergessen. Ohne ON wird jede Zeile mit jeder Zeile gepaart (ein Kreuzprodukt, cross join).
  • Eine Spalte auswählen, die weder in GROUP BY steht noch in einem Aggregat verwendet wird.
  • DELETE (entfernt Zeilen) und DROP TABLE (entfernt die ganze Tabelle) verwechseln.
  • UPDATE oder DELETE ohne WHERE ausführen. Es ändert jede Zeile der Tabelle.
Selbsttest Eine Tabelle hat 10 Zeilen, und die Spalte col ist in jeder Zeile NULL. Was liefert SELECT COUNT(col)?
  1. 0
  2. 10
  3. 1
  4. NULL

Antwort: 0. COUNT(col) zählt nur Werte, die nicht NULL sind, und liefert daher 0. COUNT(*) zählt Zeilen und würde 10 liefern.

7So sehen Prüfungsaufgaben aus

  • Leicht: Begriffe und Fakten. Was SELECT, WHERE, ORDER BY oder DELETE tun, Primär- und Fremdschlüssel, was NULL bedeutet.
  • Mittel: Anwendung der Konzepte. Die richtige Abfrage für eine Aufgabe, WHERE gegenüber HAVING, innere gegenüber äußeren Joins, die Normalformen, ACID.
  • Schwer: Fälle und Analyse. Unterabfragen, Isolationsstufen und ihre Anomalien, BCNF, Fensterfunktionen, Indizes und Abfrageleistung, SQL-Injection.

Ist eine Abfrage gegeben, verfolge sie an einigen Zeilen in der Reihenfolge FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. Die meisten Fallen zeigen sich innerhalb von drei Zeilen.

Lerne Schritt für Schritt in der AppLerne Schritt für Schritt in der App

Beispielfragen

Beispiel 1Leicht

Was macht UNION mit den Ergebnissen zweier SELECT-Abfragen?

  1. AEs verbindet sie nebeneinander über einen Schlüssel
  2. BEs behält nur Zeilen, die in beiden vorkommen
  3. CEs fasst sie zu einem Ergebnis zusammen und entfernt doppelte Zeilen
  4. DEs behält nur Zeilen, die in der ersten Abfrage vorkommen, aber nicht in der zweiten
Tipps anzeigen
  1. Beide Abfragen müssen gleich viele kompatible Spalten haben.
  2. Zwei falsche Antworten sind jetzt durchgestrichen. Eine der beiden übrigen ist richtig.
Antwort und Erklärung anzeigen

Warum das die Antwort ist

UNION stapelt die Zeilen beider Abfragen und entfernt Duplikate; UNION ALL behält die Duplikate.

Antwort

C · Es fasst sie zu einem Ergebnis zusammen und entfernt doppelte Zeilen
Beispiel 2Mittel

Was liefert SELECT SUM(amount) FROM orders, wenn die WHERE-Klausel auf keine Zeilen zutrifft?

  1. AEinen Fehler
  2. B0
  3. CNULL
  4. DEine leere Zeichenkette
Tipps anzeigen
  1. SUM unterscheidet sich hier von COUNT.
  2. Zwei falsche Antworten sind jetzt durchgestrichen. Eine der beiden übrigen ist richtig.
Antwort und Erklärung anzeigen

Warum das die Antwort ist

SUM, AVG, MIN und MAX liefern bei einer leeren Menge NULL, COUNT dagegen 0; COALESCE(SUM(amount), 0) liefert stattdessen 0.

Antwort

C · NULL
Beispiel 3Schwer

Was liefert SELECT name, dept, AVG(salary) OVER (PARTITION BY dept) FROM emp?

  1. ANur Mitarbeiter, die mehr als den Abteilungsdurchschnitt verdienen
  2. BJede Mitarbeiterzeile zusammen mit dem Durchschnittsgehalt ihrer Abteilung
  3. CEinen Fehler, weil name nicht in einem GROUP BY steht
  4. DEine Zeile pro Abteilung mit ihrem Durchschnittsgehalt
Tipps anzeigen
  1. Fensterfunktionen fassen Zeilen nicht zusammen.
  2. Zwei falsche Antworten sind jetzt durchgestrichen. Eine der beiden übrigen ist richtig.
Antwort und Erklärung anzeigen

Warum das die Antwort ist

Anders als GROUP BY behält eine Fensterfunktion jede Eingabezeile und fügt einen über ihre Partition berechneten Wert hinzu, hier die Abteilung.

Antwort

B · Jede Mitarbeiterzeile zusammen mit dem Durchschnittsgehalt ihrer Abteilung

Fragen und Antworten

Datenbanken & SQL: Worum geht es?

Eine relationale Datenbank speichert Daten in Tabellen. Eine Tabelle sieht aus wie eine Tabellenkalkulation: Jede Zeile ist ein Datensatz, jede Spalte eine Eigenschaft.

Ein Geschäft könnte eine Tabelle customers mit den Spalten id, name und city haben und eine Tabelle orders mit den Spalten id, customer_id und total.

Datenbanken & SQL: Wie lernt man es Schritt für Schritt?
  1. Was eine relationale Datenbank ist
  2. Daten lesen mit SELECT
  3. Joins, Normalisierung und Transaktionen
  4. Das Verfahren Schritt für Schritt
  5. Ein durchgerechnetes Beispiel
  6. Häufige Fehler
  7. So sehen Prüfungsaufgaben aus
Datenbanken & SQL: Was wird geübt?
  • Leicht: Begriffe und Fakten
  • Mittel: Konzepte anwenden
  • Schwer: Fälle und Analyse

Jede Frage hat vier Antwortmöglichkeiten, und nur eine ist richtig. Du hängst fest? Öffne zuerst einen kleinen Tipp und die vollständige Erklärung erst, wenn du sie brauchst.

So funktioniert das Üben

  • Jede Frage hat vier Antwortmöglichkeiten, und nur eine ist richtig.
  • Du hängst fest? Öffne zuerst einen kleinen Tipp und die vollständige Erklärung erst, wenn du sie brauchst.
  • Dein Fortschritt, deine Fehler und gespeicherten Aufgaben bleiben erhalten, damit du vor der Prüfung wiederholen kannst.

Kurse mit diesem Thema

Weitere Themen in Informatik

Arbeitsblatt zum Ausdrucken

Datenbanken & SQL kostenlos übenDatenbanken & SQL jetzt übenJeden Tag 5 kostenlose Aufgaben. Keine Kreditkarte nötig.