zacatecnicky dotaz na MySQL

Michal Kubecek mike na mk-sys.cz
Sobota Říjen 12 16:31:07 CEST 2002


On Sat, Oct 12, 2002 at 01:21:14PM +0200, Jiri Matejka wrote:
> >>Musi to byt vnejsi spojeni, takze napr. v MySQL to je
> >>SELECT ... FROM projekty
> >>  LEFT OUTER JOIN vyzkumnici   ON (projekty.vyzkumnikid=vyzkumnici.id)
> 
> takze metodou pokus-omyl jsem dosel k tomu, ze
> LEFT OUTER JOIN a LEFT JOIN se vykonaji za stejne dlouhou dobu a stejne, 
>  takze hned polozim otazku - jaky je mezi nimi rozdil?

Žádný. Protože "left inner join" nemá smysl, je "left join" obvykle
zkrácená varianta "left outer join".

> a s podminkami pro tabulky je to co mi funguje takhle:
> 
> SELECT ... FROM projekty
> LEFT JOIN vyzkumnici
> ON projekty.VyzkumnikId=vyzkumnici.Id && vyzkumnici.Sex='M'
> WHERE projekty.Typ='C'
> 
> kdyz jsem && vyzkumnici.Sex='M' dal do WHERE, tak se to chovalo jako 
> klasicky JOIN, takze takhle mi to pripada, ze WHERE je pro levou 
> tabulku, a ON pro pravou tabulku

Podmínka pod ON definuje navázání záznamů v tabulkách (v závislosti
na tom, zda se jedná o inner, left, right nebo outer join). Podmínka
where pak definuje, které ze získaných záznamů mají být prezentovány.
Jestliže tedy podmínku "vyzkumnici.Sex='M'" dáte do klauzule WHERE,
pak opravdu není rozdíl mezi "left join" a "inner join", protože
"left join" se liší jen tím, že obsahuje navíc ty záznamy z levé
tabulky, pro něž neexistuje odpovídající záznam v pravé tabulce.
Sloupce z pravé tabulky v nich jsou NULL, takže se tyto řádky nemohou
na výstupu objevit. Doufám, že jsem to nezamlžil víc než bylo nezbytně
nutné.

                                                       Michal Kubeček


Další informace o konferenci Databases