JOIN

Mi is az a JOIN

Egy tábla másik, vagy több másik táblával, való kapcsolódása a fenálló reláció szerint

JOIN típusok

INNER JOIN

SELECT m.pupID, m.mfoek_nev, m.koordi, m.idi, g.gazdi_nev FROM Mentesek AS m INNER JOIN gazdik AS g ON m.pupID=g.mentveny_id LIMIT 5;

LEFT JOIN

SELECT m.pupID, m.mfoek_nev, m.koordi, m.idi, g.gazdi_nev FROM Mentesek AS m LEFT JOIN gazdik AS g ON m.pupID=g.mentveny_id ORDER BY pupID DESC LIMIT 5;

RIGHT JOIN

SELECT m.pupID, m.mfoek_nev, m.koordi, m.idi, g.gazdi_nev FROM Mentesek AS m RIGHT JOIN gazdik AS g ON m.pupID=g.mentveny_id ORDER BY g.mentveny_id LIMIT 5;

CROSS JOIN

SELECT m.pupID, m.mfoek_nev, m.koordi, m.idi,g.mentveny_id ,g.gazdi_nev FROM Mentesek AS m CROSS JOIN gazdik AS g  ORDER BY g.mentveny_id ASC,m.pupID DESC LIMIT 120,5;

self JOIN
(azaz egy tábla saját magával való JOIN-ja)

SELECT t1.mentveny_name, t1.pupID, t2.pupID FROM mentes_stat AS t1 INNER JOIN mentes_stat AS t2 ON t1.mentveny_name=t2.mentveny_name and t1.pupID<>t2.pupID order BY 1;

UNION

SELECT 'gazdi' as honnan, mentveny_nev as mfoek_nev, varos FROM gazdik

UNION

SELECT 'mentesek', mfoek_nev, gyepi FROM Mentesek

ORDER BY mfoek_nev LIMIT 10;

Gyakorlás

1) Sorold fel az első 5 gazdis mentvény ID-t,gyepis és mföek név, gyepi, gazdi város, gazdi irányítószám

2) Sorold fel az utolsó 10 mentvény nevét, érkezés idejét és ha van gazdi városát

3) Hány fekete kutya van, aki nem Budapesten lakik?

4) Sorold fel az összes még ivaros gazdis mentvény nevét, mikor érkezett, mikor gazdisodott és gazdi email címét

5) Számold össze, hogy hány bull típusú kutyát koordizot Kitti, Kati és Zsófi (külön-külön)

6) Hány budapesti gazdis cica van akit nem Noémi idizett

7) Hány gazdi van, akinek baba kutyája van és nem gmail-es az email címe

8) 2022-ben gazdiosodott mentvények közt hány baba hány bull és hány fekete kutya van?

9) A 13. kerületi (gazdi) kutyákat nem szerint számoljuk össze

10) Soroljuk fel az összes mentvény nevét és egymás alatt a gyepi és a gazdis város nevét, név szerinti sorrendben

11) Sorold fel az összes statját a nem budapesti gazdisodott mentvényeknek

12) Ki koordizta a legtöbb baba mentvényt?
13) Hány budapesti gazdis kigyógyult szívférges (de már ivartalan) kutyink van  

14) hány fekete kutya van aki gazdis Budapesten lakik és Kitti koordizta
15) Szedjük össze az azonos nevű gazdisodott mentvényeket (mentvény név, gazdi név, gazdi város, ZIP)

Megoldások

1) SELECT m.pupID,m.gyepi_nev,m.mfoek_nev,m.gyepi,g.varos,g.zip FROM Mentesek AS m INNER JOIN gazdik AS g on m.pupID=g.mentveny_id LIMIT 5;
2) SELECT m.mentveny_name,m.erkezes,g.varos FROM mentes_stat AS m LEFT JOIN gazdik AS g on m.pupID=g.mentveny_id ORDER BY m.pupID DESC LIMIT 10;

3) SELECT COUNT(1) FROM mentes_stat AS m INNER JOIN gazdik AS g ON m.pupID=g.mentveny_id WHERE g.varos not in ('Budapest') and m.fekete=1;

4) SELECT m.mentveny_name,m.erkezes,m.gazdihoz_koltozes,g.email FROM mentes_stat AS m INNER JOIN gazdik AS g ON m.pupID=g.mentveny_id WHERE m.Ivartalanitas=0;
5) SELECT m.koordi,count(1) FROM Mentesek AS m INNER JOIN mentes_stat AS ms ON m.pupID=ms.pupID WHERE m.koordi in('Fa Kitti','Buzás Kati', 'Puzder Zsófia') AND ms.bull_tipus=1 group by m.koordi;

6) SELECT count(1) FROM Mentesek AS m INNER JOIN gazdik AS g ON m.pupID=g.mentveny_id WHERE m.idi NOT IN ('Roszkopf Noémi') AND m.nem IN ('nőstény','kandúr') AND g.varos='Budapest';

Megoldások

7) SELECT count(1) FROM mentes_stat AS m INNER JOIN gazdik as g ON m.pupID=g.mentveny_id WHERE m.baba=1 AND SUBSTRING_INDEX(g.email,'@',-1)<>'gmail.com';

8) SELECT SUM(baba),SUM(fekete),SUM(bull_tipus) FROM mentes_stat AS m INNER JOIN gazdik as g ON m.pupID=g.mentveny_id WHERE YEAR(m.gazdihoz_koltozes)='2022';

9) SELECT m.nem,count(1) FROM Mentesek AS m INNER JOIN gazdik as g ON m.pupID=g.mentveny_id WHERE MID(ZIP,2,2)='13' AND m.nem IN('kan','szuka') group by m.nem;

10) SELECT mentveny_nev as mfoek_nev, varos FROM gazdik UNION SELECT mfoek_nev, gyepi FROM Mentesek ORDER BY mfoek_nev;

11) SELECT m.* FROM mentes_stat AS m INNER JOIN gazdik AS g ON m.pupID=g.mentveny_id WHERE g.varos NOT IN ('Budapest');

12) SELECT m.koordi FROM Mentesek AS m INNER JOIN mentes_stat AS ms ON m.pupID=ms.pupID WHERE ms.baba=1 GROUP BY m.koordi ORDER BY count(1) DESC LIMIT 1;

Megoldások

13) SELECT count(1) FROM mentes_stat AS m INNER JOIN gazdik as g ON m.pupID=g.mentveny_id WHERE m.szivfereg=1 AND m.Ivartalanitas=1 AND g.varos='Budapest' AND m.ivartalanitas_datum>m.erkezes;

14) SELECT COUNT(1) FROM Mentesek AS m INNER JOIN mentes_stat AS ms ON m.pupID=ms.pupID INNER JOIN gazdik AS g ON m.pupID=g.mentveny_id WHERE ms.fekete=1 AND g.varos='Budapest' AND m.koordi='Fa Kitti';
15) SELECT g1.gazdi_nev, g1.ZIP, g1.varos, g1.mentveny_nev, g2.gazdi_nev, g2.ZIP, g2.varos, g2.mentveny_nev FROM gazdik AS g1 INNER JOIN gazdik AS g2 ON g1.mentveny_nev=g2.mentveny_nev AND g1.mentveny_id<>g2.mentveny_id;

VÉGE

 

Házi feladat:
1) gazdis város szerint sorold fel a baba kutyákat (gazdik és mentes_stat)

2) 2021ben gazdisodott kutyák közül hányan laknak a 13. kerületben? (count, mentes_stat és gazdik)

3) Hány gazdis cica van akik FIV-es vagy felIV-es? (mentes_stat)

JOIN

By Gábor Opitzer