faecher:informatik:oberstufe:datenbanken:joins:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:joins:start [21.10.2020 17:30] sbelfaecher:informatik:oberstufe:datenbanken:joins:start [21.03.2025 07:01] (aktuell) – [Abfragen über mehrere Tabellen] Frank Schiebel
Zeile 1: Zeile 1:
-====== SQL-Joins   -- Grundlagen======+====== SQL-Joins   - Grundlagen======
  
-Wie werden die Tabellen (und Entitäten) jetzt aber mit SQL Abfragen verbunden, so das die gewünschten "zusammengesetzten" Informationen als Ergebnis der Abfrage vorliegen?+Wie werden die Tabellen (und Entitäten) jetzt aber mit SQL Abfragen verbunden, so dass die gewünschten "zusammengesetzten" Informationen als Ergebnis der Abfrage vorliegen?
  
 ===== Abfragen über mehrere Tabellen ===== ===== 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. +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 ''lehrer'' hat 6 Datensätze, die Tabelle ''schueler'' 12. Die Abfrage Beipiel: Die Tabelle ''lehrer'' hat 6 Datensätze, die Tabelle ''schueler'' 12. Die Abfrage
Zeile 13: Zeile 13:
 </code> </code>
  
-liefert als Ergebnis eine Tabelle mit 72 Datensätzen:+liefert als Ergebnis eine Tabelle mit ($6\cdot 12=$) 72 Datensätzen:
  
 {{ :faecher:informatik:oberstufe:datenbanken:joins:auswahl_081.png |}} {{ :faecher:informatik:oberstufe:datenbanken:joins:auswahl_081.png |}}
  
 +==== Sinnvolle Datensätze bilden ====
 +
 +Sinnvoll sind in diesem Fall nur die Datensätze, bei denen in der Schülertabelle die ''klassenlehrer_id'' des zugehörigen Klassenlehrers mit der ''lehrer_id'' in der ''lehrer'' Tabelle übereinstimmt.
 +
 +<code sql>
 +SELECT * FROM `lehrer`,`schueler` 
 WHERE schueler.klassenlehrer_id=lehrer.lehrer_id WHERE schueler.klassenlehrer_id=lehrer.lehrer_id
 +</code>
 +
 +Wenn man Felder verschiedener Tabellen in einer Abfrage verwendet, muss man diese in der Form ''Tabelle.Attribut'' angeben. Das Ergebnis sieht jetzt so aus:
 +
 +{{ :faecher:informatik:oberstufe:datenbanken:joins:auswahl_082.png |}}
 +
 +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.
  
-===== Aufbau =====+===== Allgemeiner Aufbau =====
  
 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 26: Zeile 39:
 SELECT [DISTINCT] { spalten | * } SELECT [DISTINCT] { spalten | * }
 FROM tabelle1, tabelle2, ... FROM tabelle1, tabelle2, ...
-WHERE tabelle1.spalte1=tabelle2.spalte1, +WHERE tabelle1.spalte1=tabelle2.spalte1 AND 
-      tabelle1.spalte2=tabelle2.spalte2...+      tabelle1.spalte2=tabelle2.spalte2 AND ...
 </code> </code>
  
Zeile 35: Zeile 48:
 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 AND t1.spalte2=t2.spalte2 AND ...
 </code> </code>
  
-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 ''tabelle1'' und ''tabelle2'' gleichnamige Spalten wie ''id'', muss die Spalte mit ''tabelle1.id'' eindeutig benannt sein.+Das Ergebnis eines Joins ist eine Tabelle mit allen Spalten, die in der SQL-Klausel angegeben wurden. Die Spaltenbezeichnung muss eindeutig sein. Enthalten die Tabellen ''tabelle1'' und ''tabelle2'' gleichnamige Spalten wie ''id'', muss die Spalte mit ''tabelle1.id'' eindeutig benannt sein.
  
 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 58: Zeile 71:
 </code> </code>
  
-===== Aufgaben =====+
 ---- ----
 {{:aufgabe.png?nolink  |}} {{:aufgabe.png?nolink  |}}
Zeile 71: 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 79: Zeile 92:
   - Zusatzaufgabe: Gib die Liste aller Kunden aus, die noch nie einen Artikel im Webshop bestellt haben.((Tipp: ''WHERE attribute NOT IN'' (SQL-Klausel). ))   - Zusatzaufgabe: Gib die Liste aller Kunden aus, die noch nie einen Artikel im Webshop bestellt haben.((Tipp: ''WHERE attribute NOT IN'' (SQL-Klausel). ))
  
 +->  [[.:loseungen|Lösungsvorschläge]]
 +
 +===== Material =====
 +
 +{{simplefilelist>:faecher:informatik:oberstufe:datenbanken:joins:*}}
  • faecher/informatik/oberstufe/datenbanken/joins/start.1603301411.txt.gz
  • Zuletzt geändert: 21.10.2020 17:30
  • von sbel