Verständnisfrage zu LEFT/RIGHT JOIN
Verständnisfrage zu LEFT/RIGHT JOIN
am 26.02.2007 14:43:21 von g.thaler
Seit ein paar Tagen beschäftige ich mich mit Datenbanken und heute
speziell mit Joins. LEFT OUTER und RIGHT OUTER JOIN machen mir
Kopfzerbrechen. -- Hier der einfache Fall zweier Tabellen:
kunden
------
kid (Primärschlüssel)
name
plz
artikel
-------
aid (Primärschlüssel)
kid (Fremdschlüssel)
bezeichnung
stueckpreis
Beide Tabellen beinhalten Datensätze, die mit keinem der jeweils anderen
in Beziehung steht, und es besteht zwischen kunden und artikel eine
1:n-Beziehung.
Mit
SELECT *
FROM artikel
LEFT JOIN kunden
ON artikel.kid = kunden.kid;
verknüpfe ich die beiden Tabellen und erhalte das erwünschte Resultat.
Aber mit
SELECT *
FROM kunden
RIGHT JOIN artikel
ON artikel.kid = kunden.kid;
erhalte ich dasselbe Resultat.
Analog erhalte ich mit
SELECT *
FROM kunden
LEFT JOIN artikel
ON artikel.kid = kunden.kid;
die geünschten Datensätze, aber auch mit
SELECT *
FROM artikel
RIGHT JOIN kunden
ON artikel.kid = kunden.kid;
Heißt das, dass jeweils einer der beiden JOIN-Varianten überflüssig ist?
Oder ist das nur bei solch einfachen Situationen wie dieser der Fall?
Ganz verstehe ich die OUTER JOINS noch nicht.
lg Günter
Re: Verständnisfrage zu LEFT/RIGHT JOIN
am 26.02.2007 15:18:50 von Heiko Richler
Günter Thaler wrote:
> Heißt das, dass jeweils einer der beiden JOIN-Varianten überflüssig ist?
Wenn es Dir nur um das Resultat geht, ist dem so.
> Oder ist das nur bei solch einfachen Situationen wie dieser der Fall?
> Ganz verstehe ich die OUTER JOINS noch nicht.
Den Kreis weiter ziehend ist jedes Join unnötig. Jedes lässt sich über
Kreuzprodukte mit geschickten Bedingungen abbilden.
Aber sie machen die SQL-Ausdrücke übersichtlicher und leichter zu lesen.
Dass mag für das Ergebnis des Ausdrucks irrelevant sein. Die Anwendung
kann damit aber leichter zu lesen, also auch zu warten und pflegen sein.
Das Ergebnis der Entwicklung ist also meist besser.
Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage
Re: Verständnisfrage zu LEFT/RIGHT JOIN
am 26.02.2007 15:48:17 von g.thaler
Heiko Richler schrieb:
> Günter Thaler wrote:
>> Heißt das, dass jeweils einer der beiden JOIN-Varianten überflüssig ist?
>
> Wenn es Dir nur um das Resultat geht, ist dem so.
Mir geht es schon nur um das Resultat, allerdings immer bezogen auf
SELECT-Anweisungen einer bestimmten Datenbank, derzeit MySQL.
> Den Kreis weiter ziehend ist jedes Join unnötig. Jedes lässt sich über
> Kreuzprodukte mit geschickten Bedingungen abbilden.
Das verstehe ich nicht. Ein Kreuzprodukt ist ja auch ein Join (cross
join), oder?
Gruß
Re: Verständnisfragezu LEFT/RIGHT JOIN
am 26.02.2007 17:23:36 von Daniel Fischer
Günter Thaler!
> Mir geht es schon nur um das Resultat, allerdings immer bezogen auf
> SELECT-Anweisungen einer bestimmten Datenbank, derzeit MySQL.
In dem Fall: Ja, man kann einen LEFT JOIN immer in einen RIGHT JOIN
umschreiben, und umgekehrt. Also kannst du völlig auf einen von beiden
verzichten, genau so wie du z.B. in C auf alle Flusskontrollanweisungen
außer for verzichten kannst, wenn du das magst.
Gruß
Daniel
Re: Verständnisfrage zu LEFT/RIGHT JOIN
am 26.02.2007 23:20:51 von g.thaler
Daniel Fischer schrieb:
> In dem Fall: Ja, [...]
Besten Dank!
lg Günter