Transcript for:
Tipi di Join in SQL

Un buongiorno a tutti, bentornati, episodio numero 17 del corso di SQL. Quest'oggi andiamo a parlare di tutti i join, quindi cosa sono? Inner join, left join, right join, ci sarebbe anche full join, che però non è supportato in SQL, che è quello che stiamo facendo noi, e cross join le saltiamo, semplicemente perché non voglio confondervi adesso con cross join, preferisco insegnarvi queste. E poi al prossimo giro questo e poi cross join o lo vediamo noi a parte oppure potete vederlo in un prossimo futuro. Diciamo che le cose che userete di più sono queste quattro. Per cominciare magari sicuramente inner join. Io ho fatto delle modifiche, ho accorpato il nome e cognome come potete vedere e ho aggiunto id ufficio togliendo mansione. Io mi scuso perché sono dovuto andare ad aggiungere una nuova tabella ufficio e ho dovuto modificare un po'dipendenti. Quello che avevamo fatto prima, quindi la relazione... dipendente clienti con rapporto clienti è una cosa buonissima tuttavia mi sono reso conto che seguendo la documentazione tutorial republic è molto più semplice farvi questa dimostrazione perché vi confonde di meno quindi io mi scuso se vi ho fatto creare certe tabelle e vi ho fatto seguire un certo percorso logico e adesso lo sto cambiando leggermente il vero problema è che voi ancora non sapete modificare le tabelle perciò questo è il vero problema per cui dovreste o riprodurle come l'ho fatta io oppure stoppare il video, andare a vedere Alter Table o andare a modificare da PHP Madmin, che sono cose che però non vi ho ancora spiegato, quindi io mi scuso. Tuttavia, quando vado a preparare un corso, essendo le prime volte che faccio questi corsi, faccio il corso man mano, quindi so una lista di quello che vado a spiegare, ma la lezione vera propria la vado a fare al momento, perciò non ho avuto quella capacità di capire che le joins sarebbero state difficili da spiegare con questa relazione che avevo fatto prima, clienti dipendenti e rapporto clienti. Ma è molto più semplice fare dipendenti con quali di dell'ufficio e quali uffici. Detto questo, andiamo a parlare delle join. Ho messo dunque qua i di ufficio. Quindi cosa succede? Che adesso qua c'è una lista di uffici. Quindi immaginate c'è l'ufficio amministrazione, che si occupa della contabilità e di altre cose. C'è l'ufficio del servizio clienti, che quindi è l'ufficio di quello che risponde alle mail, alle chat del sito, Whatsapp, magari rispondono a Instagram, alle mail, accolgono i clienti in sede, quello che volete. Non perché abbiamo le risorse umane. Le risorse umane è quell'ufficio che si occupa di cercare nuovi candidati, fare i colloqui, valutarli, scegliere l'assunzione, far tutte le pratiche per l'assunzione e via discorrendo. Dopo di che abbiamo l'ufficio vendite. L'ufficio vendite è quell'ufficio che si occupa appunto della parte commerciale, trovare nuovi clienti, andare a presentare il prodotto, quindi tutta quella parte di acquisizione nuovi clienti. Allora, io ho fatto quest'ufficio e quest'ufficio vedete che hanno degli ID. Allora, andando a far così... Noi salviamo una sola volta amministrazione e abbiamo qua gli d. Quindi cosa succede? Che io qua salvo i d dell'ufficio dentro i dipendenti. Quindi vedete che un dipendente è all'amministrazione, quindi abbiamo un solo contabile ragioniere. Poi abbiamo due persone al servizio clienti. Abbiamo due persone alle vendite. Non abbiamo nessuno alle risorse umane perché per ora se lo smazza qualcun altro, quindi non c'è ancora un ufficio dedicato. E poi abbiamo una persona che è appena arrivata che non abbiamo ancora collocato. Che cosa succede? Perché è molto comodo così? È molto comodo così perché, come abbiamo fatto prima, che era solo per scopi dimostrativi e non per ottimizzazione delle tabelle e dei database, infatti mi scuso per questa cosa, ho fatto un esempio abbastanza dozzinale e non era ben strutturato, facendo così invece noi se vogliamo cambiare da amministrazione a servizio contabilità o vogliamo cambiare il nome dell'ufficio, automaticamente tutti quelli che prendono questo ID cambia il nome. Quindi perché funziona così? Pensate a un foglio di carta. Luca Rossi, ufficio 1, altro foglio di carta, l'ufficio 1 è amministrazione, quindi vuol dire che Luca Rossi si trova in amministrazione. Marco Verdi è Anna Neri, al 2, al 2 è servizio clienti, quindi una cosa abbastanza logica da capire, abbastanza semplice. Allora, arriviamo quindi ai join, quello che noi abbiamo appena fatto mentalmente con le facoltà cognitive che ci ha donato la natura, con il nostro bellissimo cervello, lo andiamo a fare con i join, come potete vedere. È molto raro il caso in cui noi abbiamo solo una tabella e facciamo riferimento solo a questa tabella. Di solito abbiamo più tabelle e vogliamo andare a prendere alcuni dati da una parte, alcuni dati dall'altra. Va bene? È una cosa... sono esempi molto più realistici che troverete sempre, quindi andare a prendere dei dati da una parte, dei dati dall'altra. Per far così facciamo le join. Join vuol dire unire, dall'inglese vuol dire semplicemente andare ad unire. Perché cosa facciamo? Prendiamo due tabelle. E in base a una condizione andiamo a unire queste tabelle. In questo caso, quello che vi sto proponendo io è l'unione grazie all'id ufficio che abbiamo sia qua, che qua. In questo caso qui è chiave esterna, in questo caso qui è chiave primaria. Come dicevo, a noi come esseri umani la correlazione è ovvia. Quindi E uno è veramente molto semplice. Ma qual è il fatto? Che i computer non lo sanno. I computer lo sanno fare, lo sanno fare meglio di noi, su molte più righe in contemporanea, cosa che noi non riusciamo a fare, ma devono sapere che devono farlo. Noi invece come esseri umani ci basta veramente mettere qua il ditino e renderci conto che se l'id qua è l'ufficio e io ho una tabella uffici, devo semplicemente aprire la tabella di destra e guardare qual è l'id dell'ufficio. Vi ho messo qua dipendente a sinistra e ufficio a destra perché utilizzeremo tanto questo concetto di tabella di destra e tabella di sinistra. Questo perché se guardiamo qui abbiamo left join e right join. Ora cominciamo subito con l'inner join. Andiamo a vedere un attimo la... vi nascondo qua i risultati. Andiamo a vedere qua la sintassi. Quello che facciamo qua, in realtà facciamo così. Campi, from, tabella. 1 inner join tabella 2 on condizione quindi quello che potete vedere noi andiamo a fare select campi E anche se qua c'è from tabella 1, in realtà qua metteremo anche i campi della tabella 2. Questa cosa qua per le persone che si approcciano per la prima volta alle join può essere un problema. Cosa facciamo? Selezioniamo tutti i campi che ci servono, sia dalla tabella 1 che dalla tabella 2. E scriviamo from tabella 1, perché in realtà noi li andiamo a prendere direttamente dalla 1 e li colleghiamo alla 2. Andiamo a fare una inner join con la tabella 2. On. ha una certa condizione, quindi su una condizione. Va bene? Ora vi faccio vedere questa parte grafica. Questo è un inner join, come potete vedere. Se avete fatto la teoria degli insiemi alle elementari, sapete di cosa sto parlando. Abbiamo due tabelle e noi andiamo semplicemente a prendere questa parte blu, ovvero l'unica cosa che hanno in comune. Adesso vi faccio vedere col risultato. Quindi andiamo a vedere. L'inner join prendiamo solo quella parte blu centrale. Rimettiamo tutto quello che ho messo prima. Io voglio prendere... Io voglio sapere l'ID del dipendente, il nome del dipendente e di che ufficio fa parte. L'ID del dipendente è una cosa extra, quindi partiamo dal presupposto che noi vogliamo almeno il nome e di che ufficio fa parte, ok? Quindi di base è come se noi qua mettessimo i nomi effettivi a mano uno ad uno. Quindi quello che andiamo a fare con la join è la seguente. Luca Rossi, ufficio, amministrazione. Marco Verdi e Anna Neri, ufficio servizio clienti, e poi abbiamo Antonio Mari e Monti, Maria Monti, abbiamo l'ufficio vendite. Questa è l'unica cosa che prendiamo, perché come vedete qua non c'è correlazione, è null, quindi non è ancora stata collocata. Io voglio sapere le persone invece che sono state collocate, a che uffici sono stati collocati. Ok, quindi l'inner join va a prendere esclusivamente coloro che sono stati collocati. Va bene? Questa è l'inner join. Andiamo a vedere. Quindi io ho messo dipendenti, di dipendente, fin qua non fa una piega, dopodichè ho messo dipendenti nome, perfetto io ho detto che voglio il nome del dipendente Luca Rossi e voglio il suo ID e dopodichè voglio sapere il nome dell'ufficio, quindi uffici nome ufficio, mi torna ID dipendente. nome dipendente, nome ufficio. Fin qua credo sia chiaro per tutti. From dipendenti, perché è la prima tabella che prendiamo, quindi la tabella di sinistra, quindi questa tabella, questa qua invece è gli uffici. Inner join, quindi vogliamo solo la parte blu. Join uffici, che è la tabella di destra, quindi inner join, vogliamo la parte blu con la tabella uffici, a condizione che... L'id ufficio sia uguale a uffici di ufficio. Messa così sembra un disastro. In realtà, raga, dove questo è uguale a questo. Quindi, se qua c'è scritto 1, noi cambiamo e facciamo 1. Ma questo che cos'è? Questo è dipendenti di ufficio, giusto? E questo che cos'è? Ufficio id ufficio. Fatemi vedere qui. Dipendenti id ufficio uguale a uffici id ufficio. Perfetto. Quindi l'unica cosa che stiamo andando a fare è esattamente questo ragionamento che noi facciamo automaticamente come persone, con il nostro cervello, ma che il computer non è in grado di fare. Andando a scrivere questa cosa vogliamo l'id del dipendente, il nome e il nome dell'ufficio, joinando queste due tabelle, semplicemente andando a vedere dove l'id ufficio del dipendente è uguale all'id ufficio effettivo. E ne prendiamo il nome di questo ufficio. Basta. Andiamo a vedere il risultato. Ecco qua. Vedete? Abbiamo, non ci ha preso Leonardo Valli perché non ha alcun tipo di ufficio assegnato, quindi vedete che l'innerjoin prende solo le cose in comune, noi non andiamo a vedere a null e facciamo così, lo vediamo null quindi lo scartiamo, noi vogliamo solo sapere queste persone a che uffici sono assegnati. Quindi questo qua non ci interessa, quindi prende solo le cose che abbiamo in comune, il di ufficio non esiste, quindi non ha niente in comune con il di ufficio e lo lascia fuori, quindi ci da solo quelle persone che effettivamente hanno un id di ufficio. assegnato e che quindi hanno una correlazione con la tabella uffici quindi vediamo luca rossi amministrazione marco verde nel servizio cliente vendite facciamo l'esempio solo con luca rossi abbiamo detto che luca rossi è uno andiamo in uffici uno amministrazione perfetto quindi questa è la inner join ricordo tabella di sinistra dipendenti tabella di destra uffici andiamo a la left join quindi la left join cosa fa prende tutto tutto ciò che c'è della tabella di sinistra, quindi tu prende tutta la tabella di sinistra, e per quanto riguarda la tabella di destra, solo quella parte che combacia con quella di sinistra. Che cosa vuol dire? Andiamo a vedere. Ecco qua, quindi tutta la tabella di sinistra, a prescindere, e della tabella di destra, solo quella parte che combacia con quella di sinistra. Ok? A livello logico credo sia abbastanza semplice da capire. Ve lo faccio vedere. Se noi andiamo qua, tutta la tabella di sinistra vuol dire che ci... darà tutto questo, ok? ma tutta la tabella di destra sarebbe anche risorse umane ma noi qua non abbiamo un ID3 vedete? quindi ci darà tutto questo ci darà tutti i dipendenti ma non ci darà tutti gli uffici a prescindere ci darà solo gli uffici a cui sono assegnati dei dipendenti quindi noi con questo join che cosa facciamo? con la left join in questo caso andiamo a vedere tutti i dipendenti come sono collocati che siano collocati o meno, perché se prima volevamo vedere come sono divisi sugli uffici adesso vogliamo vedere, ok, a prescindere dagli uffici, c'è anche gente che non è collocata dammi una panoramica generale della situazione, quindi io vado qua faccio left join, stesso discorso voglio sempre le stesse cose, non cambia niente bam, vedete che ci compare Leonardo Valli come null ed è giusto, perché noi apriamo qua e diciamo ok, il buon Leonardo Valli non è stato ancora assegnato a niente, certo lo vedevamo da qui, ma non sapevamo questi che uffici sono, quindi noi vogliamo sapere... Dimmi per favore i nomi degli uffici a cui sono assegnati i nostri dipendenti, e lo capiamo solo con una join con uffici che ha i nomi effettivi, e mi dai anche quelli non assegnati ad un ufficio. Spero sia chiaro. Andiamo a vedere la write join. Attenzione, write join prende tutto quello che c'è sulla destra, quindi prende tutti gli uffici, e mi dà tutti i dipendenti che sono assegnati. E basta. Perché? Perché non mi darà tutti i dipendenti. Mi darà solo i dipendenti che sono assegnati, ovvero solo i dipendenti che sono blu con gli uffici, ma mi darà tutti gli uffici. Quindi in questo caso vogliamo sapere, mi dai tutti gli uffici che abbiamo? Ok. Mi dai le persone che sono assegnate a quegli uffici? Quindi è il contrario, anziché sapere la situazione dei dipendenti in base agli uffici, vogliamo sapere la situazione degli uffici in base ai dipendenti. Vi faccio vedere qua l'esempio, right join, vedete prendiamo tutta la tabella di destra e della tabella di sinistra prendiamo solo quella parte che combacia. Andiamo a vedere, quindi RAS Join, ok, vedete abbiamo tutti i dipendenti che hanno un collegamento con gli uffici. Quindi sono sempre i soliti 5. Viene lasciato fuori Leonardo Valli perché si trova nella tabella di sinistra, che quindi non è blu, e non ha un collegamento per ora con gli uffici perché non è stato assegnato. Ma che cosa abbiamo? Risorse umane, perché noi prendiamo tutta la tabella di destra e risorse umane effettivamente rientra dentro, ma ci dice guarda, risorse umane non ha nemmeno un dipendente. Le full join saranno invece l'unione totale di tutte le tabelle, prendiamo le tabelle così come sono e le uniamo tra di loro complete, tuttavia il mysql non è supportato, perciò lo faremo con union, e vi ho detto che non ve lo faccio vedere nel prossimo episodio perché ha una sintassi completamente diversa da questa, io voglio che per ora impariate questa sintassi che è fondamentale, vi servirà nella vita di tutti i giorni se avrete a che fare con database. E poi le cross join appunto le saltiamo perché per ora... Non voglio riempirvi di informazioni, non sono così necessarie, non lo userete così spesso. Va bene? È la mia scelta personale, se volete approfondire subito potete farlo, altrimenti lo faremo noi più avanti, quando e se ce ne sarà il motivo e il bisogno. Io vi ringrazio per essere rimasti con me, noi ci vediamo appunto al prossimo episodio con le join, io spero che si sia capita questa lezione, se avete capito questa lezione, noi siamo a posto. Tutto quello che vi ho spiegato prima, anche quello che vi spiegherò dopo, non è così importante, perché le joins sono l'essenza di MySQL. Va bene? Sono l'essenza del linguaggio SQL. Nel momento in cui lo capite, siete a posto, perché questa credo sia la parte più difficile, onestamente, da capire per i newcomers, per i nuovi arrivati. Quindi, se ce l'avete fatta e l'avete capito, per favore, lasciatemi dei commenti, dei feedback, fatemi sapere, e magari anche un like, così aiutate... youtube e l'algoritmo a capire che questo è un buon video che può servire ad altre persone vi ringrazio ancora sotto in descrizione per gli abbonamenti e per il gruppo e il canale di Terrigan vi ringrazio ancora e alla prossima ciao ciao