Left join: on vs. where

Left join: on vs. where

am 01.09.2006 13:17:56 von Markus Ernst

Hallo

Eine Frage, die mich schon länger beschäftigt: In Fällen, wo eine
Bedingung entweder beim Join oder in der WHERE-Klausel angebracht werden
kann, was ist besser? Bsp.:

SELECT p.name
FROM personen AS p
LEFT JOIN firmen AS f ON p.firma=f.id
WHERE p.stellung='chef' AND f.branche='it'

vs:

SELECT p.name
FROM personen AS p
LEFT JOIN firmen AS f ON p.firma=f.id AND f.branche='it'
WHERE p.stellung='chef'

Danke für Kommentare!

--
Markus

Re: Left join: on vs. where

am 01.09.2006 13:51:52 von Thomas Rachel

Markus Ernst wrote:

> Hallo
>
> Eine Frage, die mich schon länger beschäftigt: In Fällen, wo eine
> Bedingung entweder beim Join oder in der WHERE-Klausel angebracht werden
> kann, was ist besser?

Das kommt drauf an, was Du willst.


> Bsp.:
>
> SELECT p.name
> FROM personen AS p
> LEFT JOIN firmen AS f ON p.firma=f.id
> WHERE p.stellung='chef' AND f.branche='it'

Das gibt Dir nur Chefs, die in der IT-Branche tätig sind, und ihre Firma.

> SELECT p.name
> FROM personen AS p
> LEFT JOIN firmen AS f ON p.firma=f.id AND f.branche='it'
> WHERE p.stellung='chef'

Das hingegen gibt Dir alle Chefs, entweder mit der Firma, sofern sie in IT
tätig sind, ansonsten mit NULLs.


Thomas
--
Die Verwendung von mehreren Ausrufezeichen macht die Aussage nicht
ausrufender sondern ausufernder. [Michael Bauer in dnq]

Re: Left join: on vs. where

am 01.09.2006 14:12:43 von Markus Ernst

Thomas Rachel schrieb:
> Markus Ernst wrote:
>
>
>>Hallo
>>
>>Eine Frage, die mich schon länger beschäftigt: In Fällen, wo eine
>>Bedingung entweder beim Join oder in der WHERE-Klausel angebracht werden
>>kann, was ist besser?
>
>
> Das kommt drauf an, was Du willst.
>
>
>
>>Bsp.:
>>
>>SELECT p.name
>>FROM personen AS p
>>LEFT JOIN firmen AS f ON p.firma=f.id
>>WHERE p.stellung='chef' AND f.branche='it'
>
>
> Das gibt Dir nur Chefs, die in der IT-Branche tätig sind, und ihre Firma.
>
>
>>SELECT p.name
>>FROM personen AS p
>>LEFT JOIN firmen AS f ON p.firma=f.id AND f.branche='it'
>>WHERE p.stellung='chef'
>
>
> Das hingegen gibt Dir alle Chefs, entweder mit der Firma, sofern sie in IT
> tätig sind, ansonsten mit NULLs.

Oh... wieder eine Feinheit von SQL, die mir bisher entgangen war. Danke
für die Klärung!

Markus