[ Nemanja Avramović @ 06.04.2008. 00:47 ] @
Zdravo,
amaterski se bavim MySQLom (znam SELECT, INSERT, DELETE i UPDATE) a u školi smo radili i ove JOINove iz naslova teme pa me zanima ako bi neko mogao ukratko da objasni (sa primerima) kako koji radi ili barem da da neki link sa početnicima razumljivim tekstom... INNER join sam donekle i skapirao i kontam čemu služi (mada ne bi škodilo ni objašnjenje za njega), ali left i right nemam pojma. Tražio sam malo po Google-u ali ništa što sam našao mi nije jasno :/

Hvala unapred
[ kazil @ 06.04.2008. 20:48 ] @
Ove stvari ne kontam ni ja bas nesto, ali ovo mi je najbolje sto sam uspeo da nadjem do sada za LEFT JOIN:

Citat:

You want to find rows in one table that have no match in another. Or you want to produce a
list on the basis of a join between tables, but you want the list to include an entry even when
there are no matches in the second table.


Kako sam razumeo, imas dve tabele, koje su nekako povezane, recimo preko ID-ejeva. Pa ako ti treba da nadjes one podatke iz prve tabele koji nisu povezani sa drugom tabelom, koristis LEFT JOIN... ili tako nekako :)
[ Nemanja Dubravac @ 06.04.2008. 21:31 ] @
evo primera, ali na nemackom :D
[ Nemanja Avramović @ 06.04.2008. 22:00 ] @
Eh sad... nemački znam ko i francuski xD
Hvala u svakom slučaju, možda nešto skapiram i gledajući slike.

edit: Evo kapiram INNER JOIN lepo, recimo ako imam dve tabele:
1. tabela: users
id
user
pass
group_id

2. tabela: groups
id
name
access

I ako hoću da ispišem sve korisnike, ime grupe kojoj pripadaju i access (level) mogu da koristim ovako nešto:

Code:
SELECT users.user AS username, groups.name AS `group`, groups.access AS level FROM users INNER JOIN groups ON groups.id = users.group_id


I to mi lepo ispiše username, group i level koji korisnik ima.

Još "samo" da skapiram left i right join


[Ovu poruku je menjao Nemanja Avramović dana 06.04.2008. u 23:17 GMT+1]
[ kazil @ 06.04.2008. 22:15 ] @
Na prvoj slici... naturlicher, to dodje kao neki prirodni join, mozda se tu misli na obican select? ono linker to je levi join, i tamo se vidi da daje i red iz tabele L koji nije povezan sa tabelom R, stim da u tim kolonama imas NULL. Treca slika je isto to, samo sto je to desni join, pa gleda suprotno, tj. daje i red iz tabele R koji nije povezan sa tabelom L.
ovo ausere znaci spoljni, spoljasnji...
[ Nemanja Avramović @ 06.04.2008. 22:33 ] @
E, mislim da sam počeo da kapiram. Iz gornjeg primera: Potpuno isti query ali sa LEFT JOIN umesto INNER JOIN bi vratio sve korisnike, čak i one koji ne pripadaju ni jednoj grupi (njima bi group i level bili NULL) a kad bismo stavili RIGHT JOIN umesto INNER JOIN, on bi vratio sve grupe, čak i one u kojima nema ni jedan korisnik (a njima bi username bio NULL).

E sad, nemam pojma kako bi to radilo sa tri ili više tabela, ali polako... dosta je i ovo za početak
[ kazil @ 06.04.2008. 22:41 ] @
neki linkovi sa gugleta:

http://www.wellho.net/solution...link-three-or-more-tables.html
http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.php

Code:

mysql> SELECT  artists.Artist, cds.title, genres.genre 
    -> FROM cds
    -> LEFT JOIN genres 
    -> ON cds.genreID = genres.genreID 
    -> LEFT JOIN artists 
    -> ON cds.artistID = artists.artistID;

ovo je sa drugog linka...