0%

Tabellen verknüpfen, statt Daten zu wiederholen · Übung

Die aktiven Ausleihvorgänge finden

Der Aktivitätsbericht enthält derzeit Ausleihvorgang 502, dessen Wert für returned_on gleich 2026-08-03 ist. Diese Zeile ist ein nützlicher Teil des Verlaufs, aber keine aktuelle Ausleihe. Aktive Ausleihvorgänge sind die Zeilen, in denen noch keine Rückgabeangabe festgehalten wurde.

Öffne report.sql und füge diesen Filter vor ORDER BY hinzu:

WHERE loans.returned_on IS NULL

Klicke auf Run. Die Ausleihvorgänge 501 und 503 sollten bleiben, während 502 verschwindet.

NULL bedeutet kein Wert. Es ist weder ein leerer String noch null als Zahl noch das Wort NULL. SQL hat dafür deshalb eine eigene Prüfung: IS NULL. Die Bedingung ist nur bei einem fehlenden Wert wahr.

Es mag verlockend sein, Folgendes zu schreiben:

WHERE loans.returned_on = NULL

Dieser Vergleich bedeutet nicht „beide Seiten fehlen“. Ein gewöhnlicher Gleichheitsvergleich braucht zwei bekannte Werte. Wenn eine Seite unbekannt ist, kann SQL nicht sagen, dass beide gleich sind, also besteht die Zeile den Filter nicht. Verwende IS NULL, wenn die Abwesenheit selbst die Frage ist.

Die ausgewählte Spalte returned_on kann im Ergebnis bleiben. Jede verbleibende Zeile zeigt NULL und macht so die Regel des Berichts für aktive Zeilen sichtbar:

501 | MB-017 | Riley | IT-100 | Cordless drill | 2026-08-18 | NULL
503 | MB-028 | Sam | IT-300 | Projector | 2026-08-20 | NULL

Submit mischt fehlende Werte mit mehreren vorhandenen Textwerten, darunter einem, der leer aussieht. Die Abfrage muss SQLs Prüfung auf fehlende Werte verwenden, keine Python-Wahrheitsprüfung oder Vermutung über den Datumstext. Hier werden Daten als Textbeschriftungen gespeichert; nur das Vorhandensein oder Fehlen von returned_on zählt.

Du hast jetzt einen präzisen Bericht über aktive Ausleihvorgänge. Drehe den Blickwinkel kurz um: Wie kann ein Bericht jeden Gegenstand behalten, einschließlich derjenigen ohne aktiven Ausleihvorgang zum Verknüpfen?

Aufgabe

Füge report.sql eine WHERE-Bedingung hinzu, sodass es nur Ausleihvorgänge zurückgibt, deren Wert für returned_on fehlt. Behalte die Joins, ausgewählten Spalten und Sortierung nach Ausleih-ID unverändert bei.