Linguaggio SQL: join tra tabelle

NicolaIantomasi1 2,976 views 29 slides Dec 13, 2020
Slide 1
Slide 1 of 29
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29

About This Presentation

Come imparare a scrivere correttamente join tra tabelle con il linguaggio SQL


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 .