Datenbanken JOIN?

Hallo alle zusammen,

ich hätte da mal eine Frage bezüglich einer JOIN Anweisung

Die Fragen lauten folgendermaßen:

Relation R1 und Relation R2 haben jeweils 6 Elemente. Der Hauptschlüssel beider Relationen heisst IDENT.

a) Wieviel Elemente hat die Ergebnisrelation der SQL- Anweisung
SELECT * FROM R1, R2
Meine Antwort: 12

b) Wieviele Elemente hat die Ergebnisrelation der SQL Anweisung
SELECT * FROM R1 JOIN R2 ON (IDENT)
Meine Antwort: Also hier habe ich die Aufgabe nicht wirklich
verstanden. Was „verursacht“ eigentlich …ON (IDENT).
Da beide Relationen R1 und R2 den Hauptschlüssel IDENT haben,
werden beide Tabellen mit JOIN „geklebt“ und es kommt wieder 12
raus oder?

c) Wie kann man obiges Ergebnis erreichen, ohne ein JOIN zu verwenden?
Meine Lösung: SELECT * FROM R1, R2 WHERE R1.IDENT = R2.IDENT

Vielen Lieben Dank im voraus

Hi!

Die Schreibweise kenne ich so nicht, das hängt wohl vom
SQL-Dialekt ab.

Das bedeutet (Dafür gibt’s sogar unter Oracle eine eigene Schreibweise!!!), das die beiden zu vergleichenden Felder komplett gleich heißen!

Grüße,
Tomh

Hallo alle zusammen,

Hi Kismet!

ich hätte da mal eine Frage bezüglich einer JOIN Anweisung

Die Fragen lauten folgendermaßen:

Relation R1 und Relation R2 haben jeweils 6 Elemente. Der
Hauptschlüssel beider Relationen heisst IDENT.

a) Wieviel Elemente hat die Ergebnisrelation der SQL-
Anweisung
SELECT * FROM R1, R2
Meine Antwort: 12

Meiner Meinung nach sind es 36
6x6 Elemente (da ja keine WHERE-oder Innerjoin-Klausel deklariert wurde

b) Wieviele Elemente hat die Ergebnisrelation der SQL
Anweisung
SELECT * FROM R1 JOIN R2 ON (IDENT)
Meine Antwort: Also hier habe ich die Aufgabe nicht wirklich
verstanden. Was „verursacht“ eigentlich …ON (IDENT).
Da beide Relationen R1 und R2 den Hauptschlüssel IDENT haben,
werden beide Tabellen mit JOIN „geklebt“ und es kommt wieder
12
raus oder?

Wenn jeder Datensatz EINE passende Beziehung zwischen r1 und r2 hat,
hat die Ergebnisrelation 6 Elemente
Vergleichen würde ich dies mit:
SELECT * FROM R1
INNER JOIN R2
ON R1.IDENT=R2.IDENT

c) Wie kann man obiges Ergebnis erreichen, ohne ein JOIN zu
verwenden?
Meine Lösung: SELECT * FROM R1, R2 WHERE R1.IDENT = R2.IDENT

Jiou, das sehe ich auch so :wink:

Vielen Lieben Dank im voraus

Gruß,
Björn

Moin, Björn,

Meiner Meinung nach sind es 36
6x6 Elemente (da ja keine WHERE-oder Innerjoin-Klausel
deklariert wurde

das Zauberwort heißt Kreuzprodukt. Das besagt, dass die maximal mögliche Anzahl von Zeilen aus dem Produkt der beiden Zeilenzahlen entsteht.

Alles andere wäre auch mehr als eigentümlich: Spalten stehen für Eigenschaften. Was wäre denn das Produkt aus zwei Eigenschaften?

Gruß Ralf

Moin, Björn,

Hi Ralf

Meiner Meinung nach sind es 36
6x6 Elemente (da ja keine WHERE-oder Innerjoin-Klausel
deklariert wurde

habe mich damit auf die Frage bezogen:
„Was kommt bei der Abfrage heraus: SELECT * FROM R1, R2“
und in dem fall ist es ja egal wieviel Spalten in der Tabelle exsistieren.

das Zauberwort heißt Kreuzprodukt. Das besagt, dass die
maximal mögliche Anzahl von Zeilen aus dem Produkt der beiden
Zeilenzahlen entsteht.

Ja… habe ich doch auch geschrieben.

Alles andere wäre auch mehr als eigentümlich: Spalten stehen
für Eigenschaften. Was wäre denn das Produkt aus zwei
Eigenschaften?

Ein Ergebniselement jenachdem wie die beiden mit einander verknüpft sind.

Gruß Ralf

Gruß Björn

Moin, Björn,

pardon, mir dämmert’s langsam, was mit Elementen gemeint ist - die Elemente einer Menge (die Antwort „12“ hat mich in die Irre geführt). Na ja, mit relationaler Algebra befasst sich der Datenbanker einmal im Leben, dann 23 Jahre lang nicht mehr :smile:

Gruß Ralf