NicolaIantomasi1
2,976 views
29 slides
Dec 13, 2020
Slide 1 of 29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
About This Presentation
Come imparare a scrivere correttamente join tra tabelle con il linguaggio SQL
Size: 387.99 KB
Language: it
Added: Dec 13, 2020
Slides: 29 pages
Slide Content
Linguaggio SQL Join tra tabelle
Interrogare un database Schema del database Riportiamo l’insieme delle tabelle del nostro database
Interrogare un database Nuova tipologia di domande Nelle domande poste finora, tutti i dati e i filtri richiesti facevano riferimento ad un’unica tabella alla volta. Come rispondiamo invece a domande di questo genere? Riportare per ogni carta di credito il suo numero , il saldo , il nome e il cognome del relativo cliente
Interrogare un database Tabella CarteCredito Il numero della carta e il relative saldo si trovano nella tabella CarteCredito
Interrogare un database Tabella Clienti Il nome e il cognome dei clienti si trova nella tabella Clienti .
Interrogare un database Collegamento tra tabelle Occorre dunque trovare un criterio per collegare le due tabelle .
Interrogare un database Criterio per collegare le tabelle Ad esempio : quale riga della tabella Clienti colleghiamo alla carta numero 1?
Interrogare un database Criterio per collegare le tabelle Risposta : la riga della tabella Clienti con lo stesso CodiceFiscale
Interrogare un database INNER JOIN e ON Per collegare le due tabelle secondo il criterio del codice fiscale occorre usare una nuova sintassi nella clausula FROM: i costrutti INNER JOIN e ON : FROM CarteCredito INNER JOIN Clienti ON CarteCredito.CodiceFiscale = Clienti.CodiceFiscale
Interrogare un database Rinomina tabelle Per “ alleggerire ” questa sintassi possiamo rinominare le tabelle nella query tramite la parola AS FROM CarteCredito AS Cc INNER JOIN Clienti as Cl ON Cc .CodiceFiscale = Cl .CodiceFiscale
Interrogare un database Query finale Possiamo ora rispondere alla domanda di partenza : Riportare per ogni carta di credito il suo numero , il saldo , il nome e il cognome del relativo cliente SELECT Cc .Carta , Cc .Saldo , Cl .nome , Cl .cognome FROM CarteCredito AS Cc INNER JOIN Clienti as Cl ON Cc .CodiceFiscale = Cl .CodiceFiscale ;
Interrogare un database Esempio su MySQL Vediamo la query su MySQL
Interrogare un database Tipologie di JOIN Domanda : cosa succede se il codice fiscale associato alla carta di credito non ha nessun record corrispondente nella tabella dei clienti? La query precedente non mostrerà queste carte di credito FROM CarteCredito AS Cc INNER JOIN Clienti as Cl ON Cc.CodiceFiscale = Cl.CodiceFiscale ;
Interrogare un database LEFT JOIN In alcune, circostanze ci potrebbe essere chiesto di visualizzare comunque queste carte di credito. A tal fine basta modificare la tipologia di Join della query precedente, passando da INNER JOIN a LEFT JOIN FROM CarteCredito AS Cc LEFT JOIN Clienti as Cl ON Cc.CodiceFiscale = Cl.CodiceFiscale ;
Interrogare un database RIGHT JOIN Analogamente, se volessimo vedere anche i Clienti che non hanno carte di credito associate, basterà modificare la tipologia di Join passando da INNER JOIN a RIGHT JOIN FROM CarteCredito AS Cc RIGHT JOIN Clienti as Cl ON Cc.CodiceFiscale = Cl.CodiceFiscale ;
Interrogare un database Righe senza corrispondenze Domanda: cosa succede quando visualizziamo colonne della tabella CarteCredito per Clienti che non ne hanno nessuna? SELECT Cc.Carta , Cc.Saldo , Cl.nome , Cl.cognome FROM CarteCredito AS Cc RIGHT JOIN Clienti as Cl ON Cc.CodiceFiscale = Cl.CodiceFiscale ;
Interrogare un database Esempio MySql Risposta: in questi casi avremo dei null
Interrogare un database Nuova tipologia di domande Proviamo a rispondere ad un’altra domanda: riportare per ogni conto corrente il suo numero , il saldo, il codice fiscale e il numero dei clienti.
Interrogare un database Tabella CarteCredito Il numero del conto e il saldo si trovano nella tabella ContoCorrente .
Interrogare un database Tabella Clienti Il codice fiscale e la residenza dei clienti si trovano nella tabella Clienti .
Interrogare un database Join con relazioni molti a molti La relazione ContiCorrenti-Clienti è molti a molti , di conseguenza è presente una tabella di associazione di nome ClientiContiCorrenti
Interrogare un database Join con relazioni molti a molti Di conseguenza , per collegare le tabelle ContoCorrente e Cliente abbiamo bisogno di due JOIN: una tra la tabella ContoCorrente e la tabella ClientiContiCorrenti una tra la tabella ClientiContiCorrenti e la tabella Clienti
Interrogare un database Join con relazioni molti a molti Occorre stabilire i criteri di JOIN. Si tratta di scelte “ naturali ”. Tra ContoCorrente e ClientiContiCorrenti dobbiamo considerare l’uguaglianza tra il numero dei conti .
Interrogare un database Join con relazioni molti a molti Tra ClientiContiCorrenti e Clienti dobbiamo considerare l’uguaglianza tra il codice fiscale .
Interrogare un database Query finale In definitiva, al netto di riconsiderare la tipologia di Join in base al comportamento desiderato, abbiamo la query SELECT Cc .Conto , Cc .Saldo , Cl .CodiceFiscale , Cl .Residenza FROM ContoCorrente AS Cc INNER JOIN ClientiContiCorrente As Associazione ON Cc .Conto = Associazione .Conto INNER JOIN Clienti As Cl ON Associazione .CodiceFiscale = Cl .CodiceFiscale ;
Interrogare un database Query finale Osserviamo attentamente l’output della query su MySql
Interrogare un database Analisi risultati join Notiamo che i conti numero 1 e 12 sono ripetuti in due righe ciascuno . Ciò può essere considerato corretto perché per ognuno di questi conti sono associati due differenti clienti con codici fiscali distinti .
Interrogare un database Analisi risultati join Osserviamo però che anche la colonna dei saldi è ripetuta . Di conseguenza , otteniamo un risultato errato se calcoliamo la somma dei valori di questa colonna dopo la Join. Infatti calcoleremmo due volte (una per ogni cliente ) ciascuno dei due saldi condivisi dei conti 1 e 12.
Interrogare un database Esercizi Per ogni servizio , riportare il numero del servizio , il numero del conto , la data di apertura del conto e la data di apertura del servizio Riportare per ogni carta di credito , il numero della carta, la tipologia , il circuito , il numero del cliente associato e il suo impiego . Se un cliente non ha carte associate, riportare comunque i suoi dati .