Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:joins:start [20.11.2019 20:03] – sbel | faecher:informatik:oberstufe:datenbanken:joins:start [21.03.2025 07:01] (aktuell) – [Abfragen über mehrere Tabellen] Frank Schiebel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== SQL-Joins ====== | + | ====== SQL-Joins |
- | Wie werden die Tabellen (und Entitäten) jetzt aber mit SQL Abfragen verbunden, so das die gewünschten " | + | Wie werden die Tabellen (und Entitäten) jetzt aber mit SQL Abfragen verbunden, so dass die gewünschten " |
- | ===== Aufbau ===== | + | ===== Abfragen über mehrere Tabellen ===== |
+ | |||
+ | Bei Abfragen aus mehreren Tabellen wird ohne weitere Bedingung die Beziehung 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 ($6\cdot 12=$) 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 | ||
Eine Klausel für SQL-Joins ist im Wesentlichen folgendermaßen aufgebaut: | Eine Klausel für SQL-Joins ist im Wesentlichen folgendermaßen aufgebaut: | ||
Zeile 10: | Zeile 39: | ||
SELECT [DISTINCT] { spalten | * } | SELECT [DISTINCT] { spalten | * } | ||
FROM tabelle1, tabelle2, ... | FROM tabelle1, tabelle2, ... | ||
- | WHERE tabelle1.spalte1=tabelle2.spalte1, | + | WHERE tabelle1.spalte1=tabelle2.spalte1 |
- | tabelle1.spalte2=tabelle2.spalte2, ... | + | tabelle1.spalte2=tabelle2.spalte2 |
</ | </ | ||
- | Um die Ausdtrücke | + | Um die Ausdrücke |
<code sql> | <code sql> | ||
SELECT [DISTINCT] { spalten | * } | SELECT [DISTINCT] { spalten | * } | ||
FROM tabelle1 AS t1, tabelle2 AS t2, ... | FROM tabelle1 AS t1, tabelle2 AS t2, ... | ||
- | WHERE t1.spalte1=t2.spalte1,t1.spalte2=t2.spalte2, ... | + | WHERE t1.spalte1=t2.spalte1 |
</ | </ | ||
- | Das Ergebnis eines Joins ist eine Tabelle mit allen Spalten, die in der SQL-Klausuel | + | Das Ergebnis eines Joins ist eine Tabelle mit allen Spalten, die in der SQL-Klausel |
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. | 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. | ||
Zeile 42: | Zeile 71: | ||
</ | </ | ||
- | ===== Aufgaben ===== | + | |
- | + | ---- | |
- | <WRAP center round box 95%> | + | {{: |
- | **Aufgabe 1**\\ | + | === (A1) === |
+ | |||
+ | |||
+ | Sofern noch nicht geschehen: Importiere die Datenbank {{ : | ||
Löse die folgenden Aufgaben innerhalb der Datenbank '' | Löse die folgenden Aufgaben innerhalb der Datenbank '' | ||
Zeile 52: | Zeile 84: | ||
- Gib die Liste aller Kundennummern zusammen mit den Namen der Artikel, die unter dieser Nummer bestellt wurden, 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 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 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 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 pro Kunde aus, wie viele Artikel er insgesamt bestellt hat. Die Liste soll absteigend sortiert nach der Anzahl der Bestellungen ausgegeben werden. | ||
Zeile 59: | Zeile 91: | ||
- Gib die Nummern und Namen der Kundenpaare aus, die den gleichen Artikel bestellt haben. | - Gib die Nummern und Namen der Kundenpaare aus, die den gleichen Artikel bestellt haben. | ||
- Zusatzaufgabe: | - Zusatzaufgabe: | ||
- | </WRAP> | + | |
+ | -> | ||
+ | |||
+ | ===== Material ===== | ||
+ | |||
+ | {{simplefilelist>: |