SQL JOIN-ok – A Csatlakozások Kézikönyve
Képzeld el, hogy két doboz játékod van:
Ehhez kell a JOIN – mint egy varázslat, ami összerakja a dobozokat!
Mi az a JOIN? (A nagy titok)
A közös oszlop: id → ezzel kapcsoljuk össze!
A 4 alap JOIN + 7 speciális = 11 szuperhős!Minden JOIN-hoz adok:
1. INNER JOIN – Csak a közös barátok(Csak azok, akik mindkét táblában szerepelnek)Eredmény: csak a piros autó (Peti)
2. LEFT OUTER JOIN – Mindenki bal oldalon + párja(Minden autó, és ha van gazdája, azt is mutatjuk)Eredmény:
3. RIGHT OUTER JOIN – Mindenki jobb oldalon + párja(Minden tulajdonos, és ha van autója, azt is mutatjuk)Eredmény:
4. FULL OUTER JOIN – MINDENKI!(Minden autó ÉS minden tulajdonos – pár nélkül is)Eredmény:
5. LEFT SEMI JOIN – Csak a bal oldaliak, akiknek VAN párja(Csak az autók, amiknek van gazdája)Eredmény: csak piros autóGyerek példa: Csak azok a bal oldali gyerekek, akiknek van párja.
6. LEFT ANTI SEMI JOIN – Csak a bal oldaliak, akiknek NINCS párja(Csak az autók, amiknek nincs gazdája)Eredmény: kék és zöld autóGyerek példa: Csak a magányos bal oldali gyerekek.
7. LEFT/RIGHT OUTER JOIN with exclusion(LEFT OUTER JOIN, de kizárjuk a közösöket → csak a bal oldali magányosak)Eredmény: kék és zöld autó
8. CROSS JOIN – Minden mindennel! (Kézfogás minden gyerekkel)(Nincs feltétel – minden autó minden tulajdonoshoz)Eredmény: 3 autó × 2 tulajdonos = 6 sor!Gyerek példa: Minden gyerek mindenkivel kezet fog – nincs párválasztás.
9. NON-EQUI JOIN – Nem egyenlőség, hanem más feltétel(Pl. ár > 1000, vagy dátum között)Gyerek példa: Csak a drága autók gazdái.
10. CROSS APPLY / OUTER APPLY – Tábla helyett függvény!(Pl. egy sorhoz több eredményt ad egy függvény)Gyerek példa: Minden gyereknek kiírjuk az összes játékát egy külön listáról.
11. Több JOIN egyben – Két FULL OUTER, vagy INNER + LEFT, stb.(Pl. 3 tábla: Autók, Tulajok, Szerviz)Példa:Gyerek példa: Autók + Tulajok + Szerviz – mindenki benne van, aki kapcsolódik!
Összefoglaló táblázat – A JOIN szuperhősök 1 oldalon
Záró varázstrükk – Hogyan válaszd ki a megfelelőt?
Gyakorolj velünk! – Mini feladatTáblák:
Képzeld el, hogy két doboz játékod van:
- Dobo1: Autók (piros, kék, sárga)
- Dobo2: Tulajdonosok (Peti, Anna, Tomi)
Ehhez kell a JOIN – mint egy varázslat, ami összerakja a dobozokat!
Mi az a JOIN? (A nagy titok)
JOIN = két (vagy több) tábla összerakása egy közös oszlop alapján.
Példa: Autók (Table1) | Tulajdonosok (Table2) | ||
|---|---|---|---|
id | szín | id | név |
---- | ---------- | ---- | ------- |
1 | piros | 1 | Peti |
2 | kék | 3 | Anna |
3 | zöld |
A 4 alap JOIN + 7 speciális = 11 szuperhős!Minden JOIN-hoz adok:
- rajzot (mint a képen),
- könnyű magyarázatot,
- gyerek példát (autók + tulajdonosok),
- kódot (egyszerűen).
1. INNER JOIN – Csak a közös barátok(Csak azok, akik mindkét táblában szerepelnek)
SELECT * FROM Autok t1
INNER JOIN Tulajok t2 ON t1.id = t2.id;Anna és a zöld autó kimarad, mert nincs párja.
Gyerek példa: Csak azok a gyerekek játszhatnak, akiknek van párja a páros táncban.2. LEFT OUTER JOIN – Mindenki bal oldalon + párja(Minden autó, és ha van gazdája, azt is mutatjuk)
SELECT * FROM Autok t1
LEFT JOIN Tulajok t2 ON t1.id = t2.id;- piros → Peti
- kék → (üres)
- zöld → (üres)
3. RIGHT OUTER JOIN – Mindenki jobb oldalon + párja(Minden tulajdonos, és ha van autója, azt is mutatjuk)Eredmény:
- Peti → piros
- Anna → (nincs autó)
4. FULL OUTER JOIN – MINDENKI!(Minden autó ÉS minden tulajdonos – pár nélkül is)Eredmény:
- piros → Peti
- kék → (üres)
- zöld → (üres)
- Anna → (üres)
5. LEFT SEMI JOIN – Csak a bal oldaliak, akiknek VAN párja(Csak az autók, amiknek van gazdája)
SELECT * FROM Autok t1
WHERE EXISTS (SELECT 1 FROM Tulajok t2 WHERE t1.id = t2.id);6. LEFT ANTI SEMI JOIN – Csak a bal oldaliak, akiknek NINCS párja(Csak az autók, amiknek nincs gazdája)
SELECT * FROM Autok t1
WHERE NOT EXISTS (SELECT 1 FROM Tulajok t2 WHERE t1.id = t2.id);7. LEFT/RIGHT OUTER JOIN with exclusion(LEFT OUTER JOIN, de kizárjuk a közösöket → csak a bal oldali magányosak)Eredmény: kék és zöld autó
Ugyanaz, mint az ANTI SEMI JOIN, de más módszerrel.
8. CROSS JOIN – Minden mindennel! (Kézfogás minden gyerekkel)(Nincs feltétel – minden autó minden tulajdonoshoz)
SELECT * FROM Autok, Tulajok;9. NON-EQUI JOIN – Nem egyenlőség, hanem más feltétel(Pl. ár > 1000, vagy dátum között)
SELECT * FROM Autok t1
INNER JOIN Tulajok t2 ON t1.ar > 1000;10. CROSS APPLY / OUTER APPLY – Tábla helyett függvény!(Pl. egy sorhoz több eredményt ad egy függvény)
SELECT * FROM Tulajok t
CROSS APPLY dbo.GetCars(t.id) c;11. Több JOIN egyben – Két FULL OUTER, vagy INNER + LEFT, stb.(Pl. 3 tábla: Autók, Tulajok, Szerviz)Példa:
sql
SELECT *
FROM Autok a
FULL OUTER JOIN Tulajok t ON a.id = t.id
FULL OUTER JOIN Szerviz s ON a.id = s.auto_id;Összefoglaló táblázat – A JOIN szuperhősök 1 oldalon
JOIN típusa | Mit mutat? | Autók példa | Gyerek példa | Kód kulcsszó |
|---|---|---|---|---|
INNER | Csak a közös | Csak piros (Peti) | Csak párok | INNER JOIN |
LEFT | Bal + párja | Minden autó, Peti is | Bal sor + pár | LEFT JOIN |
RIGHT | Jobb + párja | Peti, Anna | Jobb sor + pár | RIGHT JOIN |
FULL | MINDENKI | Minden autó ÉS Anna | Mindenki a teremben | FULL JOIN |
SEMI | Bal, akinek VAN párja | Csak piros | Bal oldali párosok | EXISTS |
ANTI SEMI | Bal, akinek NINCS párja | Kék, zöld | Magányos bal oldaliak | NOT EXISTS |
CROSS | Minden × Minden | 6 sor! | Mindenki mindenkivel | CROSS JOIN |
NON-EQUI | Nem =, hanem >, <, BETWEEN | Drága autók | Nagyobb gyerekek | ON ár > 1000 |
APPLY | Függvény → tábla | Autók listája személyenként | Játéklista gyerekenként | CROSS APPLY |
Záró varázstrükk – Hogyan válaszd ki a megfelelőt?
Kérdés | Válasz → JOIN |
|---|---|
Csak a közös rekordok? | INNER |
Minden bal oldali, akár pár nélkül? | LEFT |
Minden jobb oldali? | RIGHT |
Senki ne maradjon ki? | FULL |
Csak a pár nélküliek? | ANTI SEMI |
Minden kombináció? | CROSS |
Gyakorolj velünk! – Mini feladatTáblák:
- Gyerekek: Anna, Bence, Csenge
- Játékok: labda (Bence), baba (Anna), autó (Dani)
- Minden gyereket és a játékát (ha van) → LEFT JOIN
- Csak azokat, akiknek van játéka → INNER JOIN
- Csak azokat, akiknek NINCS játéka → LEFT ANTI SEMI
Megjegyzések
Megjegyzés küldése