Basi Di Dati 04

18
Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 1 BASI DI DATI ESERCITAZIONI -04- MSSQL - SQL Email: [email protected] Università di Trento Corso di Laurea in Ingegneria dell’Informazione e dell’Organizzazione

Transcript of Basi Di Dati 04

Page 1: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 1

BASI DI DATI

ESERCITAZIONI -04-MSSQL - SQL

Email: [email protected]

Università di TrentoCorso di Laurea in Ingegneria dell’Informazione e dell’Organizzazione

Page 2: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 2

Operatori insiemistici Le relazioni sono insiemi; si possono applicare operatori

insiemistici Gli operatori insiemistici eliminano automaticamente i

duplicati (altrimenti specificare ALL)

U → Unione (Union)

∩ → Intersezione (Intersect)

− → Differenza (Except)

Page 3: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 3

Tabelle iniziali

tDipendenti

tDirigenti

Page 4: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 4

Principali comandi in SQL (DML)

Unione tra select omogeneeSelect <campi>from <nome tabella> Union Select <campi2>from <nome tabella2>

SELECT dbo.tDipendenti.*FROM dbo.tDipendentiunionSELECT dbo.tDirigenti.*FROM dbo.tDirigenti

Page 5: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 5

Principali comandi in SQL (DML)

Intersezione tra select omogeneeSelect <campi>from <nome tabella> Intersect Select <campi2>from <nome tabella2>

SELECT dbo.tDipendenti.*FROM dbo.tDipendentiIntersectSELECT dbo.tDirigenti.*FROM dbo.tDirigenti

Page 6: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 6

Intersect in MSSQL

SELECT _tDipendenti.*FROM _tDipendentiWHERE EXISTS(SELECT *FROM _tDirigentiWHERE _tDipendenti.nome = _tDirigenti.nomeAND _tDipendenti.codice = _tDirigenti.codiceAND _tDipendenti.età = _tDirigenti.età)

Page 7: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 7

Principali comandi in SQL (DML)

Differenza tra select omogeneeSelect <campi>from <nome tabella> Except Select <campi2>from <nome tabella2>

SELECT dbo.tDipendenti.*FROM dbo.tDipendentiExceptSELECT dbo.tDirigenti.*FROM dbo.tDirigenti

Page 8: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 8

Except in MSSQL SELECT _tDipendenti.*FROM _tDipendentiWHERE NOT EXISTS( SELECT * FROM _tDirigentiWHERE _tDipendenti.nome = _tDirigenti.nome AND _tDipendenti.codice = _tDirigenti.codice

AND _tDipendenti.età = _tDirigenti.età )unionSELECT _tDirigenti.*FROM _tDirigentiWHERE NOT EXISTS( SELECT * FROM _tDipendentiWHERE _tDirigenti.nome = _tDipendenti.nome AND _tDirigenti.codice = _tDipendenti.codice

AND _tDirigenti.età = _tDipendenti.età )

Page 9: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 9

Join Utilizza i collegamenti sui valori che sono alla base del modello relazionale. Combina selezioni e proiezioni per estrarre informazioni dalle relazioni.

Inner joinVisualizza solo le righe per cui esiste una corrispondenza in entrambe le tabelle unite. (Join predefinito)

Outer joinVisualizza anche le righe in cui non esiste alcuna corrispondenza nella tabella unita. Left outer join Right outer join Full outer join

Cross joinVisualizza una riga per ogni possibile coppia di righe delle due tabelle.

Page 10: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 10

Tabelle

tLibro (5)

tAutore (3)

Page 11: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 11

Principali comandi in SQL (DML)

Inner Join (1): Contiene tutte le righe delle tabelle che soddisfano le condizioni

select <campi> from <nome tabella> JOIN <nome tabella2> ON

<condizione> JOIN <tabella 3> ON <condizione>

SELECT dbo.tLibro.*, dbo.tAutore.*FROM dbo.tLibro INNER JOIN dbo.tAutoreON dbo.tLibro.IdAutore = dbo.tAutore.AutoreId

Page 12: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 12

Inner Join (2):

Page 13: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 13

Principali comandi in SQL (DML)Outer Join (1):

Left: le righe senza corrispondente che si trovano nella tabella di sinistra (cioè quella dichiarata per prima nella query)

Right: le righe della seconda tabella che non hanno corrispondente nella prima

Rispetto alla query: Left si prendono tutti i record della tabella a sinistra Right si prendono tutti i record della tabella a destra

select <campi> from <nome tabella> LEFT JOIN <nome tabella2> ON <condizione>

SELECT dbo.tLibro.*, dbo.tAutore.*FROM dbo.tLibro RIGHT OUTER JOIN dbo.tAutore ON dbo.tLibro.IdAutore = dbo.tAutore.AutoreId

Page 14: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 14

Outer Join (2):

RIGHT

OUTER

JOIN

LEFT

OUTER

JOIN

Page 15: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 15

Principali comandi in SQL (DML)

Cross join (1):

select <campi> from <nome tabella> CROSS JOIN <nome tabella2>

SELECT dbo.tLibro.*, dbo.tAutore.*FROM dbo.tLibro CROSS JOIN dbo.tAutore

Page 16: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 16

Cross join (2): ....6*3=18!!

Page 17: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 17

Esercizi Usare il db “CDs”

3. Inner join con tutte le colonne delle tabelle tCd e tCantante data la relazione legata all'id del cantante (cantante_id)

4. Inner join con le caratteristiche di ogni cd e relativo nome del cantante data la relazione legata all'id del cantante (cantante_id)

5. Inner join con titolo de cd e relativo nome del cantante data la relazione legata all'id del cantante (cantante_id)

6. Inner join con titolo de cd, relativo nome del cantante e genere del cantante data la relazione legata all'id del cantante (cantante_id) e all'id del genere (genere_id)

7. Inner join con titolo de cd, relativo nome del cantante e label del cd data la relazione legata all'id del cantante (cantante_id) e all'id della label(label_id)

Page 18: Basi Di Dati 04

Basi di Dati - 2006-2007 (L. Colazzo - F. Magagnino) 18

Esercizi2. Inner join con titolo del cd, relativo nome del cantante e genere del

cantante data la relazione legata all'id del cantante (cantante_id) e all'id del genere (genere_id) - Filtrare rispetto al genere uguale a "rock“

3. Inner join con titolo del cd, relativo nome del cantante e genere del cantante data la relazione legata all'id del cantante (cantante_id) e all'id del genere (genere_id) - Filtrare rispetto al genere uguale a "rock" e "pop“

4. Inner join con titolo del cd, relativo nome del cantante e genere del cantante data la relazione legata all'id del cantante (cantante_id) e all'id del genere (genere_id) - Filtrare rispetto al genere uguale a "rock" e al cantante uguale a "madonna“

5. Inner join con titolo del cd, relativo nome del cantante e genere del cantante data la relazione legata all'id del cantante (cantante_id) e all'id del genere (genere_id) - Filtrare rispetto al genere uguale a "rock" e al cantante uguale a "madonna", ordinare in modo discendente per il titolo del cd

6. Inner join con titolo del cd, PREZZO DEL CD, ANNO DEL CD, relativo nome del cantante e genere del cantante data la relazione legata all'id del cantante (cantante_id) e all'id del genere (genere_id) - Visualizzare i due più vecchi