Alle Tabs der Lerneinheit (Erklärung · RA-Lab · Praxis-Übung · Klausur-Quiz) als durchgehender Text. Ideal zum Wiederholen vor der Klausur, und für Suchmaschinen wie Google, Bing und KI-Suche (ChatGPT, Perplexity).
SQL ist nur eine Sprache — die mathematische Grundlage dahinter heißt Relationale Algebra. Mit 5 Grundoperatoren kannst du jede SQL-Query ausdrücken. Klausur-Klassiker: gegebene Tabellen + Frage in natürlicher Sprache → übersetze in einen RA-Ausdruck. In 11/12 WInf-DB-Klausuren Pflicht.
Wir gehen die Operatoren systematisch durch, jeden mit einem konkreten Beispiel auf zwei Mini-Tabellen.
Anmelden, um den Fortschritt zu speichern.
Nächster Schritt
Aktives Abrufen festigt Wissen schneller als nochmal lesen.
Diese Lerneinheit wurde für typische Bachelor-Klausuren konzipiert. So prüfen wir · Fehler entdeckt? Melde ihn uns oder markiere die fragliche Stelle direkt im Text oben.
Alle Tabs der Lerneinheit (Erklärung · RA-Lab · Praxis-Übung · Klausur-Quiz) als durchgehender Text. Ideal zum Wiederholen vor der Klausur, und für Suchmaschinen wie Google, Bing und KI-Suche (ChatGPT, Perplexity).
SQL ist nur eine Sprache — die mathematische Grundlage dahinter heißt Relationale Algebra. Mit 5 Grundoperatoren kannst du jede SQL-Query ausdrücken. Klausur-Klassiker: gegebene Tabellen + Frage in natürlicher Sprache → übersetze in einen RA-Ausdruck. In 11/12 WInf-DB-Klausuren Pflicht.
Wir gehen die Operatoren systematisch durch, jeden mit einem konkreten Beispiel auf zwei Mini-Tabellen.
Studierende:
| MatrNr | Name | Semester |
|---|---|---|
| 1001 | Müller | 3 |
| 1002 | Schulz | 5 |
| 1003 | Klein | 3 |
Belegungen:
| MatrNr | KursID | Note |
|---|---|---|
| 1001 | DB1 | 2,3 |
| 1001 | INF | 1,7 |
| 1002 | DB1 | 2,7 |
σ_([Bedingung](/themen/bedingungen))(R)— wähle alle Zeilen ausR, die die Bedingung erfüllen.
SQL-Äquivalent: WHERE.
Beispiel: σ_(Semester = 3)(Studierende) liefert alle Studi im 3. Semester:
| MatrNr | Name | Semester |
|---|---|---|
| 1001 | Müller | 3 |
| 1003 | Klein | 3 |
π_(A, B, ...)(R)— wähle nur die SpaltenA, B, ...ausR. Duplikate werden automatisch entfernt.
SQL-Äquivalent: SELECT DISTINCT.
Beispiel: π_(KursID)(Belegungen) liefert alle belegten Kurse (ohne Duplikate):
| KursID |
|---|
| DB1 |
| INF |
R bowtie S— verbindet Zeilen ausRundS, bei denen die gleichnamigen Spalten dieselben Werte haben.
SQL-Äquivalent: INNER JOIN ... USING oder NATURAL JOIN.
Beispiel: Studierende bowtie Belegungen (Join über MatrNr):
| MatrNr | Name | Semester | KursID | Note |
|---|---|---|---|---|
| 1001 | Müller | 3 | DB1 | 2,3 |
| 1001 | Müller | 3 | INF | 1,7 |
| 1002 | Schulz | 5 | DB1 | 2,7 |
Klein taucht nicht auf — keine Belegung. (Wenn er auftauchen sollte, brauchst du einen Outer-Join, der in der Standard-RA nicht enthalten ist.)
R ∪ S— alle Zeilen ausRund alle ausS, Duplikate weg. Bedingung: beide Relationen sind schema-kompatibel (gleiche Spalten, gleiche Typen).
SQL-Äquivalent: UNION.
Beispiel: σ_(Sem=3)(Stud) ∪ σ_(Sem=5)(Stud) — Studi aus Semester 3 oder 5.
R - S— alle Zeilen ausR, die nicht inSsind. Auch schema-kompatibel.
SQL-Äquivalent: EXCEPT (PostgreSQL) oder MINUS (Oracle).
Beispiel: π_(MatrNr)(Stud) - π_(MatrNr)(Belegungen) — Studi ohne Belegung:
| MatrNr |
|---|
| 1003 |
R × S— jede Zeile ausRwird mit jeder Zeile ausSkombiniert. Sehr groß, selten direkt sinnvoll.
SQL-Äquivalent: CROSS JOIN oder FROM R, S ohne WHERE.
Wird meistens zusammen mit Selektion benutzt: σ_(R.MatrNr = S.MatrNr)(R × S) ist äquivalent zum natürlichen Join. Der natürliche Join ist also nur eine Abkürzung.
Probier die Operatoren live aus — wähle eine Tabelle, einen Operator, dann den Parameter:
Interaktive Visualisierung
Interaktive Komponente: probiere sie im Topic-Player oben aus.
In der Klausur kommst du selten mit nur einem Operator aus. Du schachtelst Operatoren wie Funktionen.
Aufgabe: "Gib die Namen aller Studi im 3. Semester aus, die DB1 belegt haben."
Schritte:
σ_(KursID='DB1')(Belegungen)Stud bowtie σ_(KursID='DB1')(Belegungen)σ_(Semester=3)(Stud bowtie σ_(KursID='DB1')(Belegungen))π_(Name)(σ_(Semester=3)(Stud bowtie σ_(KursID='DB1')(Belegungen)))Ergebnis: Müller.
Klausur-Trick: Selektion so früh wie möglich (Push-Down) — filtert Zeilen aus bevor sie in Joins landen. Macht den Ausdruck effizienter und ist Anfrageoptimierungs-Klassiker.
- 5 Grundoperatoren auswendig: σ, π, ⋈, ∪, − (+ optional × ohne Bedingung).
- SQL-Mapping: σ = WHERE, π = SELECT DISTINCT, ⋈ = INNER JOIN ... USING, ∪ = UNION, − = EXCEPT.
- Schachtelung von innen nach außen lesen. Wie bei verschachtelten Funktionen.
- Vereinigung und Differenz nur schema-kompatibel. Beide Relationen müssen dieselben Spalten haben.
- Klausur-Übersetzungsschema: natürliche Sprache → identifiziere "Welche Zeilen?" (σ) und "Welche Spalten?" (π) und "Welche Verknüpfungen?" (⋈).
1. Selektion auf Spalten wenden, Projektion auf Zeilen. Umgekehrt! σ filtert Zeilen (WHERE), π filtert Spalten (SELECT).
2. Outer-Joins existieren nicht in Standard-RA. Wenn die Klausur einen Outer-Join verlangt, musst du es über ∪ und einen Hilfs-Ausdruck mit NULL-Tupeln konstruieren. In erweiterten RAs (z.B. SQL-RA) gibt es ⟕ und ⟖.
3. Natürlicher Join verbindet automatisch gleichnamige Spalten. Wenn du in Tabellen verschiedene Namen für die Verbindungs-Spalte hast, brauchst du erst Umbenennung (ρ, rho) oder den Theta-Join R bowtie_(θ) S mit expliziter Bedingung.
4. Duplikat-Eliminierung bei Projektion. π entfernt Duplikate automatisch (RA-Semantik), SQL nicht (SELECT ohne DISTINCT lässt Duplikate). In Klausuren immer in RA-Semantik denken.
Wähle einen Operator, gib die Parameter ein (Bedingung bei σ, Spalten bei π, Tabellen bei Join), und sieh das Ergebnis als Tabelle. Anschließend kannst du den Ausdruck schachteln — das Ergebnis einer Operation wird zur Eingabe der nächsten.
Lern-Tipp: Geh die Beispiel-Aufgaben durch (im Visualizer wählbar): "Wer hat DB1 belegt?", "Welche Kurse sind belegt?", "Wer hat keinen Kurs belegt?" — alle drei lassen sich mit 1–3 RA-Operatoren ausdrücken.
Interaktive Visualisierung
Interaktive Komponente: probiere sie im Topic-Player oben aus.
Vier Aufgaben-Typen: Operator-Identifikation, RA → SQL, einfache Ausdruck-Auswertung, schema-kompatible Operatoren.
Klausurfragen mit Lösungen (6)
Antwort: σ (Selektion)
Erklärung: σ filtert Zeilen anhand einer Bedingung — genau wie WHERE in SQL. π wäre SELECT DISTINCT (Spalten-Auswahl), ⋈ entspricht INNER JOIN, ∪ entspricht UNION.
Antwort: Alle Namen, deren Note unter 2,0 liegt
Erklärung: Von innen nach außen: σ filtert Zeilen mit Note < 2,0, π wählt nur die Spalte Name. Resultat: Liste aller Namen mit guter Note (Duplikate weg).
Richtige Antworten: ∪ (Vereinigung); − (Differenz)
Erklärung: Vereinigung und Differenz brauchen gleiche Schemata (gleiche Spaltennamen + Typen). Alle anderen Operatoren arbeiten auf beliebigen Relationen. ⋈ verbindet über gleichnamige Spalten, das ist eine 'überlappendes Schema'-Anforderung, aber keine volle Schema-Gleichheit.
Typ: Multi-Select
Antwort: π_{Name}(σ_{Sem=3}(Studi))
Erklärung: Erst Zeilen filtern (σ_{Sem=3}), dann Spalten wählen (π_{Name}). Reihenfolge wichtig: σ vor π ist effizienter (weniger Daten in der Projektion) und in dieser Aufgabe semantisch nötig (Name allein ohne Sem-Info hätte den Filter nicht).
Zuordnungen:
Erklärung: Die Standard-Zuordnung zwischen RA-Operatoren und SQL-Konstrukten. SQL ist um zusätzliche Features (ORDER BY, GROUP BY, NULLS) erweitert, die nicht direkt in der RA stehen — diese sind in der erweiterten RA mit Aggregations- und Sortier-Operatoren ausgedrückt.
Typ: Zuordnung
Antwort: Wahr
Erklärung: Wahr. Genau das ist der Sinn: ⋈ schaut nach gleichnamigen Spalten und matcht Zeilen, wo die Werte übereinstimmen. Wenn R und S keine gleichnamigen Spalten haben, wird ⋈ zum Kartesischen Produkt × (jede Zeile mit jeder).
Typ: Wahr/Falsch
Klausurfragen mit Lösungen (6)
Antwort: π_{MatrNr}(Studi) − π_{MatrNr}(Beleg)
Erklärung: Differenz braucht schema-kompatible Relationen. Beide auf MatrNr projizieren, dann Differenz. 'Studi − Beleg' direkt geht nicht (Schemas unterschiedlich). σ mit NULL ist SQL-spezifisch, nicht Standard-RA.
Antwort: π_{Name}(σ_{KursID='DB1'}(Stud ⋈ Beleg))
Erklärung: Standard-Übersetzung: erst joinen, dann WHERE-Filter (σ), dann Spalten wählen (π). Klammern lesen von innen nach außen: Stud⋈Beleg → σ → π. Variante 3 könnte auch funktionieren mit Selektions-Push-Down (Optimierung), ist aber semantisch nicht ganz identisch.
Antwort: Wahr
Erklärung: Wahr. RA-Semantik: π entfernt immer Duplikate (Set-Semantik). In SQL ist das anders: 'SELECT Name' liefert Duplikate, 'SELECT DISTINCT Name' nicht. RA = SELECT DISTINCT.
Typ: Wahr/Falsch
Richtige Reihenfolge:
Erklärung: Selektion-Push-Down: filtere ZUERST beide Eingabe-Tabellen separat, joine dann die kleineren Zwischen-Ergebnisse, am Ende projiziere. Das ist die Grundregel der Anfrageoptimierung — in Welle 8.8 vertiefen wir das.
Typ: Reihenfolge
Antwort: σ_{R.K=S.K}(R × S)
Erklärung: Der natürliche Join ist eine Abkürzung für 'Kartesisches Produkt + Selektion über die gemeinsamen Spalten'. R ⋈ S = σ_{R.K=S.K}(R × S), gefolgt von Projektion (Entfernung der doppelten K-Spalte). Das ist die formale Definition.
Lösungen pro Lücke:
Erklärung: Die zwei Filter-Operatoren (Zeilen/Spalten) plus der Verknüpfungs-Operator sind das 80 %-Werkzeug der RA. Wenn du diese drei sicher beherrschst, deckst du fast alle Klausur-Aufgaben ab.
Typ: Lückentext