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 [21.10.2020 19:13] – [Abfragen über mehrere Tabellen] 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 azus 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. | ||
- | |||
- | ===== 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: | ||