Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:joins:start [26.11.2020 09:37] – [Aufgaben] sbel | faecher:informatik:oberstufe:datenbanken:joins:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== SQL-Joins | ||
- | |||
- | Wie werden die Tabellen (und Entitäten) jetzt aber mit SQL Abfragen verbunden, so das die gewünschten " | ||
- | |||
- | ===== Abfragen über mehrere Tabellen ===== | ||
- | |||
- | Bei Abfragen aus mehreren Tabellen wird ohne weitere Bedingung die Besziehung zwischen den Entitäten nicht berücksichtigt - es werden einfach alle Kombinationen aller Datensätze der beiden Tabellen gebildet und ausgegeben((Das kartesische Produkt der Tabellen)). Die meisten der so aggregierten Datensätze sind sinnfrei. | ||
- | |||
- | Beipiel: Die Tabelle '' | ||
- | |||
- | <code sql> | ||
- | SELECT * FROM `lehrer`, | ||
- | </ | ||
- | |||
- | liefert als Ergebnis eine Tabelle mit 72 Datensätzen: | ||
- | |||
- | {{ : | ||
- | |||
- | ==== Sinnvolle Datensätze bilden ==== | ||
- | |||
- | Sinnvoll sind in diesem Fall nur die Datensätze, | ||
- | |||
- | <code sql> | ||
- | SELECT * FROM `lehrer`, | ||
- | WHERE schueler.klassenlehrer_id=lehrer.lehrer_id | ||
- | </ | ||
- | |||
- | Wenn man Felder verschiedener Tabellen in einer Abfrage verwendet, muss man diese in der Form '' | ||
- | |||
- | {{ : | ||
- | |||
- | Das macht Sinn, das ist eine Liste aller Lehrer und Schüler, und zwar passend, so das die Schüler bei Ihren Klassenlehrern mitgelistet werden. | ||
- | |||
- | ===== Allgemeiner Aufbau ===== | ||
- | |||
- | Eine Klausel für SQL-Joins ist im Wesentlichen folgendermaßen aufgebaut: | ||
- | |||
- | <code sql> | ||
- | SELECT [DISTINCT] { spalten | * } | ||
- | FROM tabelle1, tabelle2, ... | ||
- | WHERE tabelle1.spalte1=tabelle2.spalte1, | ||
- | tabelle1.spalte2=tabelle2.spalte2, | ||
- | </ | ||
- | |||
- | Um die Ausdrücke abzukürzen, | ||
- | |||
- | <code sql> | ||
- | SELECT [DISTINCT] { spalten | * } | ||
- | FROM tabelle1 AS t1, tabelle2 AS t2, ... | ||
- | WHERE t1.spalte1=t2.spalte1, | ||
- | </ | ||
- | |||
- | Das Ergebnis eines Joins ist eine Tabelle mit allen Spalten, die in der SQL-Klausuel angegeben wurden. Die Spaltenbezeichnung muss eindeutig sein. Enthalten die Tabellen '' | ||
- | |||
- | Wird keine WHERE-Bedingung angegeben, wird das Kreuzprodukt der Tabellen gebildet, d.h. jeder Datensatz einer Tabelle wird mit jedem der anderen Tabelle(n) kombiniert. | ||
- | |||
- | ===== Beispiele ===== | ||
- | |||
- | Ausgabe aller Kunden mit den Nummern ihrer bestellten Artikel | ||
- | <code sql> | ||
- | SELECT k.KNr, k.KVorname, k.KNachname, | ||
- | FROM | ||
- | WHERE k.KNr=b.KNr | ||
- | </ | ||
- | |||
- | Ausgabe aller Kunden mit den Namen ihrer bestellten Artikel | ||
- | <code sql> | ||
- | SELECT k.KNr, k.KVorname, k.KNachname, | ||
- | FROM | ||
- | WHERE k.KNr=b.KNr AND b.ANr=a.ANr | ||
- | </ | ||
- | |||
- | ===== Aufgaben ===== | ||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | |||
- | Sofern noch nicht geschehen: Importiere die Datenbank {{ : | ||
- | |||
- | Löse die folgenden Aufgaben innerhalb der Datenbank '' | ||
- | |||
- | - Gib die Liste mit den Namen aller jemals bestellen Artikel mitsamt ihres Bestelldatums aus. | ||
- | - Gib die Liste aller Kundennummern zusammen mit den Namen der Artikel, die unter dieser Nummer bestellt wurden, aus. | ||
- | - Gib alle Zeitpunkte aus, zu denen Thomas Tischler Artikel im Webshop bestellt hat. | ||
- | - Gib Sie die Namen aller Artikel aus, die Maximilian Mayer bestellt hat. | ||
- | - Gib die Namen aller Kunden aus, die mindestens einmal einen Artikel bestellt haben, absteigend sortiert nach dem Datum der letzten Bestellung. | ||
- | - Gib pro Kunde aus, wie viele Artikel er insgesamt bestellt hat. Die Liste soll absteigend sortiert nach der Anzahl der Bestellungen ausgegeben werden. | ||
- | - Gib die Namen der Artikel aus mitsamt der Information, | ||
- | - Gib pro Kunde aus, wie viel Geld er insgesamt ausgegeben hat. | ||
- | - Gib die Nummern und Namen der Kundenpaare aus, die den gleichen Artikel bestellt haben. | ||
- | - Zusatzaufgabe: | ||
- | |||
- | ==== Material ==== | ||
- | |||
- | |||