faecher:informatik:oberstufe:datenbanken:joins:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
faecher:informatik:oberstufe:datenbanken:joins:start [21.10.2020 19:33] – [Sinnvolle Datensätze bilden] sbelfaecher:informatik:oberstufe:datenbanken:joins:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== 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? 
- 
-===== 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 ''lehrer'' hat 6 Datensätze, die Tabelle ''schueler'' 12. Die Abfrage 
- 
-<code sql> 
-SELECT * FROM `lehrer`,`schueler`  
-</code> 
- 
-liefert als Ergebnis eine Tabelle mit 72 Datensätzen: 
- 
-{{ :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 
-</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 |}} 
- 
- 
- 
-===== 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, ... 
-</code> 
- 
-Um die Ausdrücke abzukürzen, kann man Tabellen mit mit dem Schlüsselwort ''AS'' mit Aliasen bezeichnen: 
- 
-<code sql> 
-SELECT [DISTINCT] { spalten | * } 
-FROM tabelle1 AS t1, tabelle2 AS t2, ... 
-WHERE t1.spalte1=t2.spalte1,t1.spalte2=t2.spalte2, ... 
-</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. 
- 
-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, b.ANr 
-FROM   Kunden AS k, Bestellt AS b 
-WHERE  k.KNr=b.KNr 
-</code> 
- 
-Ausgabe aller Kunden mit den Namen ihrer bestellten Artikel 
-<code sql> 
-SELECT k.KNr, k.KVorname, k.KNachname, a.Name 
-FROM   Kunden AS k, Bestellt AS b, Artikel AS a 
-WHERE  k.KNr=b.KNr AND b.ANr=a.ANr 
-</code> 
- 
-===== Aufgaben ===== 
----- 
-{{:aufgabe.png?nolink  |}} 
-=== (A1) === 
- 
- 
-Sofern noch nicht geschehen: Importiere die Datenbank {{ :faecher:informatik:oberstufe:datenbanken:er_modelle_praxis:webshop.zip|webshop}} in deinen mysql-Datenbankbereich. 
- 
-Löse die folgenden Aufgaben innerhalb der Datenbank ''webshop'', indem du das SQL-Abfragefenster verwendest. Speichere deine Lösungen in einer Textdatei/deinem Infoheft. Vermeide die Ausgabe von Duplikaten. 
- 
-  - 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, wie oft sie insgesamt bestellt wurden. Die Liste soll absteigend sortiert nach der Anzahl der Bestellungen ausgegeben werden. 
-  -  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: Gib die Liste aller Kunden aus, die noch nie einen Artikel im Webshop bestellt haben.((Tipp: ''WHERE attribute NOT IN'' (SQL-Klausel). )) 
  
  • faecher/informatik/oberstufe/datenbanken/joins/start.1603301619.txt.gz
  • Zuletzt geändert: 21.10.2020 19:33
  • von sbel