MySQL a JOIN
jaké jsou rozdíly v mysql mezi joiny
nějak nechápu rozdíl
INNER, CROSS, STRAIGHT_JOIN, LEFT, OUTER, NATURAL
co se týče rychlosti mysql resp. jakým způsobem se v databázi vybírá = rychlost
nějak nechápu rozdíl
INNER, CROSS, STRAIGHT_JOIN, LEFT, OUTER, NATURAL
co se týče rychlosti mysql resp. jakým způsobem se v databázi vybírá = rychlost
Zkus hledat, je to popsané snad všude...
inner - klíč musí existovat v obou tabulkách
left/right outer - stačí, že záznam existuje v levé/pravé tabulce, všechna pole záznamů z druhé tabulky jsou doplňeny hodnotou NULL
cross,straight,natural - možná budou jen alternativní názvy.
select
f.name, f.id, ko.name
from
firmy f
left outer join kontaktniosoby ko on (ko.firma_id == f.id)
vypise vsechny firmy (s vice kontaktnimi osobami vickrat), pokud neni zadna kontaktni osoba, tak ko.name bude NULL
samotny (inner) join by vypsal jen firmy s vyplnenymi kontaktnimi osobami
priklad je po pameti, nemusi fungovat
inner - klíč musí existovat v obou tabulkách
left/right outer - stačí, že záznam existuje v levé/pravé tabulce, všechna pole záznamů z druhé tabulky jsou doplňeny hodnotou NULL
cross,straight,natural - možná budou jen alternativní názvy.
select
f.name, f.id, ko.name
from
firmy f
left outer join kontaktniosoby ko on (ko.firma_id == f.id)
vypise vsechny firmy (s vice kontaktnimi osobami vickrat), pokud neni zadna kontaktni osoba, tak ko.name bude NULL
samotny (inner) join by vypsal jen firmy s vyplnenymi kontaktnimi osobami
priklad je po pameti, nemusi fungovat
http://en.wikipedia.org/wiki/Join_(SQL)
Snažil ses chlape aspoň chvíli hledat? :-)
Snažil ses chlape aspoň chvíli hledat? :-)
Vzhledem k tomu ze se ptas na rozdily v rychlostech, tak predpokladam, ze netusis o co jde, kazdy z tech joinu ma uplne jiny vyznam.
V prilozenem obrazku (pokud se to povedlo prilozit je to znazorneno graficky). V praxi to vypada takto
Tabulka 1 (T1)
Klic Jmeno
1 Pepa
2 Jarda
Tabulka 2 (T2)
Klic Prijmeno
1 Novak
3 Pokorny
Tabulka 1 je vzdy prvni, tabulka 2 je vzdy druha, joinuje se pres klic. Poradi je klic jmeno prijmeni.
T1 Inner join T2
1 Pepa Novak
T1 Left join T2
1 Pepa Novak
2 Jarda NULL
T1 rigth join T2
1 Pepa Novak
3 NULL Pokorny
T1 outer join T2
1 Pepa Novak
2 Jarda NULL
3 NULL Pokorny
T1 cross join T2 (tady musej byt klice z obou, poradi je klicT1 klicT2 jmeno prijmeno
1 1 Pepa Novak
1 3 Pepa Pokorny
2 1 Jarda Novak
2 3 Jarda Pokorny
Natural join si myslim pouze automaticky vybere sloupce podle kterych joinovat - asi bych raci nepouzival.
V prilozenem obrazku (pokud se to povedlo prilozit je to znazorneno graficky). V praxi to vypada takto
Tabulka 1 (T1)
Klic Jmeno
1 Pepa
2 Jarda
Tabulka 2 (T2)
Klic Prijmeno
1 Novak
3 Pokorny
Tabulka 1 je vzdy prvni, tabulka 2 je vzdy druha, joinuje se pres klic. Poradi je klic jmeno prijmeni.
T1 Inner join T2
1 Pepa Novak
T1 Left join T2
1 Pepa Novak
2 Jarda NULL
T1 rigth join T2
1 Pepa Novak
3 NULL Pokorny
T1 outer join T2
1 Pepa Novak
2 Jarda NULL
3 NULL Pokorny
T1 cross join T2 (tady musej byt klice z obou, poradi je klicT1 klicT2 jmeno prijmeno
1 1 Pepa Novak
1 3 Pepa Pokorny
2 1 Jarda Novak
2 3 Jarda Pokorny
Natural join si myslim pouze automaticky vybere sloupce podle kterych joinovat - asi bych raci nepouzival.