Sujunkite tris lenteles SQL

Sujunkite Tris Lenteles Sql



Reliacinėse duomenų bazėse užduotis gauti duomenis iš kelių lentelių yra labai įprasta. Priklausomai nuo tikslinio rezultato, tai apima kelių lentelių sujungimą į vieną vienetą ir gautų duomenų gavimą.

Kalbant apie sujungimus, dauguma iš mūsų daugiausia dirbame ne daugiau kaip dvi lenteles ir panašiai. Tačiau norint gauti prasmingesnį duomenų išdėstymą ir įžvalgą, dažnai reikia sujungti tris lenteles. Paimkite, pavyzdžiui, kur norite gauti filmų sąrašą, atitinkamą jų nuomos inventorių ir faktinę nuomos informaciją. Kiekvienas iš šių vienetų, pvz., filmų, inventoriaus ir nuomos informacijos, yra atskirose lentelėse.

Šiame vadove apžvelgsime įvairius sujungimus ir būdus, kuriuos galite naudoti norėdami sujungti tris lenteles SQL.







Reikalavimai:

Demonstravimo tikslais naudosime MySQL 80 versiją ir Sakila pavyzdinę duomenų bazę. Norėdami tęsti, galite atsisiųsti ir nustatyti Sakila duomenų bazę savo MySQL serveryje. Nesivaržykite naudoti bet kurį kitą duomenų rinkinį, kuris, jūsų nuomone, yra tinkamas.



Sujungimų tipai SQL

Prieš pereidami prie sujungimų taikymo, pradėkime aptardami įvairius sujungimų tipus, kurie yra prieinami SQL duomenų bazėse.



VIDINIS PRISIJUNGIMAS

Pirmasis sujungimo tipas yra VIDINIS PRIJUNGIMAS. Šio tipo sujungimas grąžina tik tas eilutes, kuriose yra atitinkama reikšmė abiejose lentelėse. Tai labai paplitęs sujungimo tipas ir pats paprasčiausias sujungiant dvi lenteles.





Sintaksė yra tokia:

PASIRINKITE stulpelius

IŠ lentelės1

VIDINIS JOIN lentelė2 ĮJUNGTA lentelė1.stulpelio_pavadinimas = lentelė2.stulpelio_pavadinimas;

KAIRĖ PRISIJUNGTI

LEFT JOIN atveju jis grąžina visas eilutes iš kairiosios lentelės ir suderintas eilutes iš dešinės lentelės. Jei dešinėje lentelėje nėra atitinkamų reikšmių, sujungimas prideda NULL reikšmes į jų vietą.



Sintaksė yra tokia:

PASIRINKITE stulpelius

IŠ lentelės1

LEFT JOIN lentelė2 ĮJUNGTA lentelė1.stulpelio_pavadinimas = lentelė2.stulpelio_pavadinimas;

TEISINGAS PRISIJUNGTI

Kaip galite atspėti, RIGHT JOIN yra priešinga LEFT JOIN. Šio tipo sujungimai grąžina visas eilutes iš dešiniosios lentelės ir tik atitinkančias eilutes iš kairiosios lentelės. Jei kairiojoje lentelėje nėra atitinkančių eilučių, sujungimas prideda prie jos NULL reikšmes.

Toliau pateikiama RIGHT JOIN sintaksė:

PASIRINKITE stulpelius

IŠ lentelės1

DEŠINĖJO PRISIJUNGIMO lentelė2 ĮJUNGTA lentelė1.stulpelio_pavadinimas = lentelė2.stulpelio_pavadinimas;

VISAS IŠORINIS PRIJUNGIMAS

Kitas sujungimo tipas, su kuriuo susidursite SQL duomenų bazėse, yra VISAS IŠORINIS PRIJUNGIMAS. Šio tipo sujungimas grąžina visas eilutes, kai yra atitiktis dešinėje arba kairėje lentelėje. Jei nė viename iš dviejų nėra atitinkančios reikšmės, lentelės stulpeliams be atitikties pateikiama NULL.

Toliau parodyta FULL OUTER JOIN sintaksė:

PASIRINKITE stulpelius

IŠ lentelės1

PILNA IŠORINĖ JOIN lentelė2 ĮJUNGTA lentelė1.stulpelio_pavadinimas = lentelė2.stulpelio_pavadinimas;

Verta nepamiršti, kad ne visi duomenų bazių varikliai palaiko VISUS IŠORINIUS JUNGIMAS. Norint tai pasiekti, gali tekti dirbti su kitų tipų JOINS arba antrinėmis užklausomis.

Pavyzdžiai:

Panagrinėkime keletą pavyzdžių, kaip galime naudoti šių tipų sujungimus, kad sujungtume tris lenteles SQL.

1 pavyzdys: INNER JOIN naudojimas

Pradedame nuo VIDINIO PRISIJUNGIMO. Tarkime, kad norime gauti filmų sąrašą, nuomos inventorių ir atitinkamą informaciją apie nuomą.

Susietose lentelėse galime naudoti kelis VIDINIUS JUNGIMAS, kaip parodyta šiame pavyzdyje:

PASIRINKTI

film.title,

inventory.inventory_id,

nuoma.nuomos_data

NUO

filmas

INNER JOIN inventorius ĮJUNGTA

film.film_id = inventorius.filmo_id

INNER JOIN nuoma ĮJUNGTA

inventorius.inventory_id = rental.inventory_id;

Pateiktoje pavyzdinėje užklausoje pradedame sujungdami filmo ir inventoriaus lenteles pagal stulpelį „film_id“. Tada paimame gautą rinkinį ir sujungiame jį su nuomos lentele pagal stulpelį „inventory_id“.

Tai užtikrina, kad sujungsime tris lenteles su pagrindiniu VIDINIU JOIN. Gautas rinkinys yra toks:

2 pavyzdys: INNER JOIN ir LEFT JOIN naudojimas

Tarkime, kad dabar norime filmų sąrašo, nuomojamų atsargų sąrašo (jei toks yra) ir susijusios nuomos informacijos.

Taip pat norime įsitikinti, kad net jei filmas neturi nuomos inventoriaus, vis tiek įtrauksime jį į rezultatą. Čia pradeda veikti VIDINIS PRIJUNGIMAS ir KAIRIS PRIJUNGIMAS.

Apsvarstykite šį pavyzdį:

PASIRINKTI

film.title,

inventory.inventory_id,

nuoma.nuomos_data

NUO

filmas

INNER JOIN inventorius ĮJUNGTA

film.film_id = inventorius.filmo_id

LEFT JOIN nuoma ĮJUNGTA

inventorius.inventory_id = rental.inventory_id;

Šiame pavyzdyje mes naudojame INNER JOIN, kad sujungtume filmų ir inventoriaus lentelę, kad užtikrintume, jog gautume pavadinimus su turimomis atsargomis. Tada naudojame LEFT JOIN, kad prisijungtume prie nuomos lentelės, kad gautume išsamią nuomos informaciją, jei ji yra, ir NULL, jei norite naudoti bet kokį pavadinimą, kuris neturi nuomos istorijos.

Gautas rinkinys yra toks:

Išvada

Šioje pamokoje sužinojome apie įvairius JOINS tipus SQL, kaip jie veikia ir kaip galime juos panaudoti trims lentelėms sujungti.