Frage zu Join
am 01.02.2006 07:14:07 von Nico Render
Hallo,
ich habe Frage zu dem Befehl Join. Join ist ja die Bildung eines
kartesischen Produktes von zwei Tabellen und anschliessender Selektion nach
einer bestimmten Bedingung. Auf abstrakter Ebene habe ich das verstandne,
aber wenn ich mir das als SQL-Beispiel ansehe verstehe ich das nicht so
ganz. Gegeben seien zwei Relationen Buch und Autor. Die Relation Buch
enthält die Spalten Buch-ID, Autor-ID, Buchtitel, Preis, Erscheinungsjahr.
Buch-ID ist der Primärschlüssel, Autor-ID ist der Fremdschlüssel. Dann gibt
es noch die Relation Autor mit Primärschlüssel Autor ID und die Spalte
Autorenname.
Den Befehl
Select a.autorenname, b.buchtitel
from buch b
inner join autor a
on b.autor-id=a.autor-id;
verstehe ich nicht so ganz. Sagt der Abschnitt "from buch b inner join
autor a" aus, dass aus a und b das kartesische Produkt gebildet werden soll?
Wäre
"Select a.autorenname, b.buchtitel
from autor a
inner join buch b
on b.autor-id=a.autor-id;" das gleiche?
Gruss
Nico
Re: Frage zu Join
am 01.02.2006 10:18:45 von Sibylle Koczian
Nico Render schrieb:
> Hallo,
> ich habe Frage zu dem Befehl Join. Join ist ja die Bildung eines
> kartesischen Produktes von zwei Tabellen und anschliessender Selektion =
nach
> einer bestimmten Bedingung. Auf abstrakter Ebene habe ich das verstandn=
e,
> aber wenn ich mir das als SQL-Beispiel ansehe verstehe ich das nicht so=
> ganz. Gegeben seien zwei Relationen Buch und Autor. Die Relation Buch
> enthält die Spalten Buch-ID, Autor-ID, Buchtitel, Preis, Erscheinungs=
jahr.
> Buch-ID ist der Primärschlüssel, Autor-ID ist der Fremdschlüssel.=
Dann gibt
> es noch die Relation Autor mit Primärschlüssel Autor ID und die Spa=
lte
> Autorenname.
> Den Befehl
> Select a.autorenname, b.buchtitel
> from buch b
> inner join autor a
> on b.autor-id=3Da.autor-id;
> verstehe ich nicht so ganz. Sagt der Abschnitt "from buch b inner join=
> autor a" aus, dass aus a und b das kartesische Produkt gebildet werden =
soll?
Im Prinzip ja.
> Wäre
> "Select a.autorenname, b.buchtitel
> from autor a
> inner join buch b
> on b.autor-id=3Da.autor-id;" das gleiche?
>=20
Wenn es zu jedem Buch mindestens einen Autor gibt und dieser Autor in=20
der Autorentabelle auch tatsächlich drin steht, und wenn die=20
Autorentabelle nur solche Autoren enthält, von denen es tatsächlich=20
Bücher in der Bücher-Tabelle gibt: dann ja.
Wenn nein, dann fallen bei der ersten Abfrage die anonym oder durch=20
Körperschaften veröffentlichten Bücher komplett unter den Tisch. Be=
i der=20
zweiten Abfrage bleiben die Autoren weg, zu denen es in Deiner=20
Büchertabelle keine Titel gibt (und das verhindert die=20
Fremdschlüssel-Eigenschaft nicht).
Das ist der wesentliche Unterschied zwischen INNER JOIN und LEFT JOIN.
--=20
Dr. Sibylle Koczian
Universitaetsbibliothek, Abt. Naturwiss.
D-86135 Augsburg
e-mail : Sibylle.Koczian@Bibliothek.Uni-Augsburg.DE
Re: Frage zu Join
am 01.02.2006 10:42:43 von Stefan Rybacki
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Sibylle Koczian schrieb:
>...
>>
>
> Wenn es zu jedem Buch mindestens einen Autor gibt und dieser Autor in
> der Autorentabelle auch tatsächlich drin steht, und wenn die
> Autorentabelle nur solche Autoren enthält, von denen es tatsächlich
> Bücher in der Bücher-Tabelle gibt: dann ja.
>
> Wenn nein, dann fallen bei der ersten Abfrage die anonym oder durch
> Körperschaften veröffentlichten Bücher komplett unter den Tisch. Bei der
> zweiten Abfrage bleiben die Autoren weg, zu denen es in Deiner
> Büchertabelle keine Titel gibt (und das verhindert die
> Fremdschlüssel-Eigenschaft nicht).
Falsch. Beide Anfragen liefern das gleiche Ergebnis. Hätte er in beiden
Fällen einen OUTER JOIN verwendet sähe das anders aus, aber da beides
ein INNER JOIN ist, bekommt man bei beiden Abfragen das Gleiche.
Bis denn dann
Stefan
>
> Das ist der wesentliche Unterschied zwischen INNER JOIN und LEFT JOIN.
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (MingW32)
iD8DBQFD4IKTyeCLzp/JKjARAoscAKCN0fVbhXnwdMuulS9ysczHwpXtEACg hY77
hU6xdQkT0+ZD1v5rwVZrgZ8=
=9JPH
-----END PGP SIGNATURE-----
Re: Frage zu Join
am 01.02.2006 12:09:59 von Sibylle Koczian
Stefan Rybacki schrieb:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>=20
> Sibylle Koczian schrieb:
>=20
>>...
>>
>>Wenn es zu jedem Buch mindestens einen Autor gibt und dieser Autor in
>>der Autorentabelle auch tatsächlich drin steht, und wenn die
>>Autorentabelle nur solche Autoren enthält, von denen es tatsächlich=
>>Bücher in der Bücher-Tabelle gibt: dann ja.
>>
>>Wenn nein, dann fallen bei der ersten Abfrage die anonym oder durch
>>Körperschaften veröffentlichten Bücher komplett unter den Tisch. =
Bei der
>>zweiten Abfrage bleiben die Autoren weg, zu denen es in Deiner
>>Büchertabelle keine Titel gibt (und das verhindert die
>>Fremdschlüssel-Eigenschaft nicht).
>=20
>=20
> Falsch. Beide Anfragen liefern das gleiche Ergebnis. Hätte er in beid=
en
> Fällen einen OUTER JOIN verwendet sähe das anders aus, aber da beid=
es
> ein INNER JOIN ist, bekommt man bei beiden Abfragen das Gleiche.
>=20
Leider wahr. Ist mir auch wieder eingefallen, da war der Beitrag aber=20
schon weg. INNER JOIN findet _weder_ die Bücher ohne Autor _noch_ die=20
Autoren ohne Buchtitel.
--=20
Dr. Sibylle Koczian
Universitaetsbibliothek, Abt. Naturwiss.
D-86135 Augsburg
e-mail : Sibylle.Koczian@Bibliothek.Uni-Augsburg.DE