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.