SQL SQL - Rechnen mit Join

PalmaDixon

Newbie
Registriert
Dez. 2019
Beiträge
3
Hi,

ich bräuchte Hilfe bzw. eine Hilfestellung zu einem Datenbankthema.
Unser Prof hat jetzt kurz vor Weihnachten in der letzten Vorlesung ein Thema angeschnitten, das ich nicht richtig verstehe.

Es geht darum Tabellen selbständig zu Joinen. Also nicht auf dem PC, sondern einfach auf dem Papier.
Wir haben also zwei Tabellen mit jeweils 6 Spalten und diese sind mit Ziffern von 0 bis 4 gefüllt.
Wir haben jetzt ein spezielles Select-Statement und müssen nun aufschreiben was durch das Statement herauskommt.
Bisher dachte ich eigentlich, dass ich rundum Joins und so alles verstehe aber mir fällt es extrem schwer dies selbständig auf dem Papier herauszufinden. Neben einer ganz kurzen Demonstration (2 Minuten) haben wir nicht wirklich gezeigt bekommen wie man mit einer solchen Aufgabe umgeht.

Ich möchte jetzt nicht, dass mir jemand die Lösungen gibt (die habe ich nämlich alle), sondern ich würde gerne den Weg verstehen. Wenn irgendjemand weiß mit welchem Suchbegriff ich am besten zu dem Thema etwas finde wäre ich wirklich sehr dankbar, am besten wäre natürlich wenn es dazu ein Video oder ähnliches gibt. Ich selbst habe keine gefunden, da ich nicht wirklich weiß nach was ich suchen soll, unser Prof. nannte es Rechnen mit Joins. Darunter fand ich jedoch nichts passendes.
 
Hi,

und wir bekommen weder die Tabellen noch die Statements? Dann wird es schwierig dir irgendwie zu helfen...

VG,
Mad
 
Tabelle1:
ABCDEF
100120
011013
111001
tabelle 2:
ABCDEF
100100
100012
011103
101014
select t1.a,t1.b,t1.c, t2.d,t2.e,t2.f from t1 join t2 on t1.c= t2.c where t1.a > t2.b

Dachte die Tabellen sein nicht wichtig, da es mir eher um die Technik als um die konkreten Beispiele ging.
 
Ich würde folgenden Weg gehen und für jeden Zwischenschritt eine temporäre Tabelle aufschreiben:
  1. Die Tabellen joinen ("t1 join t2 on t1.c= t2.c")
  2. Das Ergebnis aus #1 filtern ("where t1.a > t2.b")
  3. Die benötigten Spalten aus Ergebnis #2 auswählen ("select t1.a, t1.b, t1.c, t2.d, t2.e, t2.f")
 
PalmaDixon schrieb:
Dachte die Tabellen sein nicht wichtig, da es mir eher um die Technik als um die konkreten Beispiele ging.
"Joins und so" ist nicht besonders aussagekräftig. Mit dem Beispiel sieht man sofort worum es geht.

Was ein JOIN macht, steht überall beschrieben... ohne konkrete Fragen kann man dir da nicht helfen.
In diesem konkreten Beispiel:
1. JOIN ON-Klausel auswerten: Die Tabellen werden jeweils über die C-Spalte verbunden. Und zwar "jeder mit jedem", also z.B. würde die erste Zeile aus t1 auf die Zeilen 1 und 2 aus t2 joinen.
2. WHERE-Klausel beachten: alle Datensätze, bei denen a aus t1 größer als b aus t2 ist, fliegen raus. In dem Beispiel mit der ersten Zeile aus t1, die auf die Zeilen 1 und 2 auf t2 gejoined wurden, hieße das, dass beide Ergebnisse bestehen bleiben, da A in t1 "1" ist und in t2 ist B jeweils "0" - die Bedingung ist erfüllt.
3. SELECT auswerten: Spalten zusammensuchen, also für das Beispiel 1, 0, 0, 1, 0, 0 sowie 1, 0, 0, 0, 1, 2. (Blau kommt aus t1 und ist daher identisch, da es ursprünglich dieselbe Zeile ist, grün aus t2).

Das musst du dann natürlich noch für die zweite und dritte Zeile in t1 machen.
 
JOINs sind goniometrische Operationen. Man hat zwei Ebenen, beschrieben durch die beiden Abfragen, und eine Schnittgerade, beschrieben durch die JOIN-Bedingung. Weitergehend hat man schlicht ein Kreuzprodukt aus zwei Vektoren, wenn man die JOIN-Bedingung wegläßt.

Sprich, mit einem Vektor t1 = (a1, b1, c1) und einem zweiten Vektor t2=(a2, b2, c2) bekommt man mit dem JOIN zunächst ohne JOIN-Bedingung das Kreuzprodukt
( (a1a2, a1b2, a1c2), (b1a2, b1b2, b1c2), (c1a2, c1b2,c1c2) ) .

Die JOIN-Bedingung bestimmt eine Schnittmenge. JOIN ON t1.a = t2.a greift sich dazu die Werte der Elemente aus der Menge, und dann ist die Frage, ob es ein INNER JOIN war oder ein LEFT oder ein RIGHT (outer) JOIN.

Die Menge oben erhält damit einen Qualifikator. Für INNER JOINs sind nur diejenigen Wertepaare aus t1t2 zugelassen, die (A) Element des Kreuzprodukts sind und (B) die JOIN-Bedingung erfüllen. Die JOIN-Bedingung ist damit eine Hyperebene und unser n-dimensionaler Raum aus t1t2 wird entlang dieser Bedingung auf weniger Dimensionen eingestampft. (Deswegen ist die JOIN-Bedingung auch so wichtig.)

Das WHERE kommt dann hinterher als zusätzlicher Filter auf die Gesamtmenge. Letztlich kann man das als eine Art Intersection verstehen: die Klauseln in WHERE beschreiben wieder eine Menge (die aber auch komplementär sein kann) und das Ergebnis des JOINs wird damit geschnitten. Was übrigbleibt wird als Ergebnis geliefert.
 
  • Gefällt mir
Reaktionen: BeBur
Wow vielen Dank für die schnellen Antworten. Ich glaube der Groschen ist gefallen.
Womit ich mir glaube schwer getan habe war, dass unser Prof sagte man soll mit dem WHERE anfangen, da man somit vorfiltert. Ich fand es jetzt aber wie auch hier beschrieben mit der Reihenfolge Join und dann Where einfacher.
 
Zurück
Oben