Ugrás a fő tartalomra

SQL JOIN-ok – A Csatlakozások Kézikönyve

 



SQL JOIN-ok – A Csatlakozások Kézikönyve
Képzeld el, hogy két doboz játékod van:
  • Dobo1: Autók (piros, kék, sárga)
  • Dobo2: Tulajdonosok (Peti, Anna, Tomi)
De szeretnéd tudni: kié melyik autó?
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 közös oszlop: id → ezzel kapcsoljuk össze!
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;
Eredmény: csak a piros autó (Peti)
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;
Eredmény:
  • piros → Peti
  • kék → (üres)
  • zöld → (üres)
Gyerek példa: Minden gyerek a bal oldali sorból bejön a terembe, és ha van párja, odamegy hozzá.
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ó)
Gyerek példa: Most a jobb oldali sor gyerekei jönnek be, és keresik a párjukat.
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)
Gyerek példa: Mindenki bejön a terembe, pár nélkül is. Senki nem marad ki!
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);
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)
SELECT * FROM Autok t1
WHERE NOT EXISTS (SELECT 1 FROM Tulajok t2 WHERE t1.id = t2.id);
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ó
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;
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)
SELECT * FROM Autok t1
INNER JOIN Tulajok t2 ON t1.ar > 1000;
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)
SELECT * FROM Tulajok t
CROSS APPLY dbo.GetCars(t.id) c;
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:
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;
Gyerek példa: Autók + Tulajok + Szerviz – mindenki benne van, aki kapcsolódik!
Ö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)
Feladat: Írd meg a JOIN-t, ami mutatja:
  1. Minden gyereket és a játékát (ha van)LEFT JOIN
  2. Csak azokat, akiknek van játékaINNER JOIN
  3. Csak azokat, akiknek NINCS játékaLEFT ANTI SEMI




Megjegyzések