Fachkonzept - SQL-Join
Ein Wissensspeicher
Was ist ein Wissensspeicher?
Im Wissensspeicher soll übersichtlich und prägnant das neu Gelernte dokumentiert werden. Die vorgegebene Struktur auf dem Wissensspeicher soll sicherstellen, dass alles Wichtige festgehalten wird; so werden z.B. nicht nur Definitionen, sondern in der Regel auch Beispiele, Vernetzungen oder Konventionen gefordert. Der Wissensspeicher kann verwendet werden, um ein im Unterricht erstelltes Tafelbild einfacher ins Heft zu übertragen. Es ist mit ihm aber auch möglich, die Sicherung stärker schüler:innen-orientiert zu gestalten: Je nach Unterrichtsgestaltung können die Schüler:innen nach einer Erarbeitung und Besprechung den gesamten Wissensspeicher selbst ausfüllen (im Unterricht, ggf. auch in der Hausaufgabe) oder hierfür zusätzlich das Online-Schulbuch zu Hilfe nehmen.
<infsheader uuid="ZFD2MqOWiuIbYSon" title="SQL-Joins"></infsheader>
Verbinden von Datensätzen in SQL
Will man in SQL Daten aus mehreren Tabellen ausgeben, so werden sog. "Joins" gebildet. Dabei muss der Programmierer angeben, wie die Tabellen miteinander verbunden werden sollen.
Die Abarbeitung eines Joins kann man sich in mehreren Schritten vorstellen:
1. Schritt: Auswahl der Tabellen
Zunächst werden im
FROM
-Teil alle Tabellen angegeben, die die auszugebenden Daten enthalten. Die Reihenfolge spielt dabei keine Rolle, z.B.:
Das Ergebnis ist unerwartet (nicht alle Attribute gezeigt):
Statt nur passende Daten auszugeben, wird jeder Benutzer mit allen Bildern "gekreuzt"; es entsteht ein sog. cross join der Tabellen benutzer
und bild
("jeder mit jedem").
2. Schritt: Angabe der Verbindung
Gut erkennbar ist, dass die beiden Attribute PNR (einmal aus der benutzer
-Tabelle, einmal aus der bild
-Tabelle) nicht zueinander passen. Diese Verbindung der Tabellen muss explizit bei der Abfrage im SQL-Befehl angegeben werden.
Um Doppeldeutigkeiten der Attributnamen zu vermeiden, wird jedem Attribut der Tabellenname vorangestellt:
Dies liefert (fast) das gewünschte Ergebnis:
Um zwei Tabellen miteinander zu verbinden (engl. to join), muss im WHERE
-Teil des SQL-Befehls eine Joinbedingung angegeben werden.
Diese legt fest, dass nur "passende" Datensätze ausgegeben werden, bei denen der Fremdschlüssel der abhängigen Tabelle zum Primärschlüssel der übergeordneten Tabelle passt (sog. inner join).
3. Schritt: Einschränken des Ergebnisses
Im letzten Schritt kann noch die Anzahl der Datensätze durch weitere Bedingungen eingeschränkt werden. Außerdem sollte die Liste der Attribute eingegrenzt werden (z.B. um die doppelten Angaben aus Fremd- und Primärschlüssel zu entfernen):
Beachte, dass jetzt bei allen Attributen die zugehörige Tabelle vorangestellt wird.
Bei Bedingungen sollten niemals interne Werte der künstlichen Schlüsselattribute verwendet werden. Bedingungen der Form bild.PNR=1012
sind sehr fehleranfällig (z.B. wenn intern einmal Schlüssel geändert werden) und können durch Joins ersetzt werden - auch wenn dadurch die Anfrage minimal länger dauert.