INNER JOIN
A MySQL INNER JOIN a leggyakrabban használt kapcsolótípus, amely lehetővé teszi, hogy két vagy több táblából kombináljunk adatokat egy közös oszlop (kapcsolómező) alapján. Az INNER JOIN csak azokat a sorokat adja vissza, amelyeknél mindkét táblában van egyezés. Ha az egyik táblában van egy rekord, aminek nincs párja a másikban, az egyszerűen kimarad az eredményhalmazból. Tulajdonképpen a táblák metszete az eredmény.

|
1 2 3 4 |
SELECT mezonev(ek) FROM tabla1 INNER JOIN tabla2 ON tabla1.mezonev = tabla2.mezonev |
Nézzünk egy konkrét feladatot: forrás

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* Listázzuk ki a versenyzők neveit! A nevek életkor szerint csökkenő sorrendben legyenek kiírva! */ select nev, eletkor from versenyzo ORDER BY eletkor DESC; /* Határozzuk meg hány db pálya van az adatbázisban! */ SELECT count(id) AS pályák_száma from palya; /* Listázzuk ki a "z" betűt tartalmazó csapatneveket, és a hozzájuk tartozó versenyzőket! Itt már használni kell INNER JOINT a csapat és versemyzo tábla összekapcsolásához! */ SELECT versenyzo.nev, csapat.nev AS csapat_neve FROM versenyzo INNER JOIN csapat ON versenyzo.csapatid = csapat.id WHERE csapat.nev LIKE "%z%" ORDER BY csapat.nev ASC; /* Listázzuk ki az olasz versenypályákon, a versenyek első körében milyen köridőt értek el a versenyzők! Ehhez minde a 4 táblára szükség lesz! */ SELECT palya.nev, versenyzo.nev, korido.korido FROM versenyzo INNER JOIN csapat ON versenyzo.csapatid = csapat.id INNER JOIN korido ON versenyzo.id = korido.versenyzoid INNER JOIN palya ON palya.id = korido.palyaid WHERE orszag LIKE "Olaszország" AND kor=1; |
LEFT JOIN
Míg az INNER JOIN csak a közös metszetet mutatja meg, a LEFT JOIN az elsődleges tábla összes adatát megtartja, akkor is, ha a másik táblában nincs hozzájuk tartozó pár.

|
1 2 3 4 |
SELECT mezonev(ek) FROM tabla1 LEFT JOIN tabla2 ON tabla1.mezonev = tabla2.mezonev; |
A LEFT JOIN a „bal oldali” (azaz a FROM kulcsszó után álló) táblából minden sort visszaad. Ha a „jobb oldali” táblában (a JOIN utáni tábla) található kapcsolódó adat, azt hozzáilleszti. Ha nincs találat, akkor a jobb oldali tábla oszlopaiba egyszerűen egy NULL értéket tesz.
RIGHT JOIN
A RIGHT JOIN a jobb oldali (a JOIN kulcsszó után megnevezett) tábla összes sorát visszaadja. Ha a bal oldali táblában van kapcsolódó adat, azt hozzáfűzi. Ha nincs, akkor a bal oldali tábla oszlopaiba NULL értéket helyez. Gyakorlatilag ez a LEFT JOIN tükörképe.

Miért használjuk ritkábban, mint a LEFT JOIN-t?
A legtöbb fejlesztő preferálja a LEFT JOIN-t, mert az emberek többsége balról jobbra olvas, és logikusabbnak tűnik a „fő táblát” (ahonnan indulunk) először leírni a FROM után.A két lekérdezés ugyanazt az eredményt adja, csak a táblák sorrendje fordul meg:
TABLA1 LEFT JOIN TABLA2 ugyanaz, mint a TABLA2 RIGHT JOIN TABLA1
SELF JOIN
Egy táblát önmagával kapcsolunk össze. Úgy teszünk, mintha két külön táblánk lenne, de valójában ugyanazt hívjuk meg kétszer (kötelező alias-neveket használni, pl. t1 és t2).
|
1 2 3 |
SELECT mezonev(ek) FROM tabla1 T1, tabla1 T2 WHERE feltétel; |
