reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

MySQL a JOIN

petr.svec (320)|9.2.2009 17:37
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
pavel_p (993)|9.2.2009 17:54
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
Logout (4018)|9.2.2009 17:59
http://en.wikipedia.org/wiki/Join_(SQL)
Snažil ses chlape aspoň chvíli hledat? :-)
grafnev (69)|10.2.2009 15:52
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.
Joins.GIF