Basi Di Dati 04

1,605 views

Published on

Published in: Economy & Finance, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,605
On SlideShare
0
From Embeds
0
Number of Embeds
38
Actions
Shares
0
Downloads
104
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Basi Di Dati 04

  1. 1. BASI DI DATI ESERCITAZIONI -04- MSSQL - SQL Email: francesco.magagnino@ewave.it Università di Trento Corso di Laurea in Ingegneria dell’Informazione e dell’Organizzazione
  2. 2. Operatori insiemistici <ul><li>Le relazioni sono insiemi; si possono applicare operatori insiemistici </li></ul><ul><li>Gli operatori insiemistici eliminano automaticamente i duplicati (altrimenti specificare ALL ) </li></ul><ul><ul><ul><li>U -> Unione ( Union ) </li></ul></ul></ul><ul><ul><ul><li>∩ -> Intersezione ( Intersect ) </li></ul></ul></ul><ul><ul><ul><li>− -> Differenza ( Except ) </li></ul></ul></ul>
  3. 3. Tabelle iniziali tDipendenti tDirigenti
  4. 4. Principali comandi in SQL (DML) <ul><li>Unione tra select omogenee </li></ul><ul><li>Select <campi>from <nome tabella> Union Select <campi2>from <nome tabella2> </li></ul>SELECT dbo.tDipendenti.* FROM dbo.tDipendenti union SELECT dbo.tDirigenti.* FROM dbo.tDirigenti
  5. 5. Principali comandi in SQL (DML) <ul><li>Intersezione tra select omogenee </li></ul><ul><li>Select <campi>from <nome tabella> Intersect Select <campi2>from <nome tabella2> </li></ul>SELECT dbo.tDipendenti.* FROM dbo.tDipendenti Intersect SELECT dbo.tDirigenti.* FROM dbo.tDirigenti
  6. 6. Intersect in MSSQL <ul><ul><ul><ul><li>SELECT _tDipendenti.* </li></ul></ul></ul></ul><ul><ul><ul><ul><li>FROM _tDipendenti </li></ul></ul></ul></ul><ul><ul><ul><ul><li>WHERE EXISTS </li></ul></ul></ul></ul><ul><ul><ul><ul><li>( </li></ul></ul></ul></ul><ul><ul><ul><ul><li>SELECT * </li></ul></ul></ul></ul><ul><ul><ul><ul><li>FROM _tDirigenti </li></ul></ul></ul></ul><ul><ul><ul><ul><li>WHERE _tDipendenti.nome = _tDirigenti.nome </li></ul></ul></ul></ul><ul><ul><ul><ul><li>AND _tDipendenti.codice = _tDirigenti.codice </li></ul></ul></ul></ul><ul><ul><ul><ul><li>AND _tDipendenti.età = _tDirigenti.età </li></ul></ul></ul></ul><ul><ul><ul><ul><li>) </li></ul></ul></ul></ul>
  7. 7. Principali comandi in SQL (DML) <ul><li>Differenza tra select omogenee </li></ul><ul><li>Select <campi>from <nome tabella> Except Select <campi2>from <nome tabella2> </li></ul>SELECT dbo.tDipendenti.* FROM dbo.tDipendenti Except SELECT dbo.tDirigenti.* FROM dbo.tDirigenti
  8. 8. Except in MSSQL <ul><ul><li>SELECT _tDipendenti.* </li></ul></ul><ul><ul><li>FROM _tDipendenti </li></ul></ul><ul><ul><li>WHERE NOT EXISTS ( </li></ul></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM _tDirigenti </li></ul></ul><ul><ul><li>WHERE _tDipendenti.nome = _tDirigenti.nome </li></ul></ul><ul><ul><li>AND _tDipendenti.codice = _tDirigenti.codice </li></ul></ul><ul><ul><li>AND _tDipendenti.età = _tDirigenti.età </li></ul></ul><ul><ul><li>) </li></ul></ul><ul><ul><li>union </li></ul></ul><ul><ul><li>SELECT _tDirigenti.* </li></ul></ul><ul><ul><li>FROM _tDirigenti </li></ul></ul><ul><ul><li>WHERE NOT EXISTS ( </li></ul></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM _tDipendenti </li></ul></ul><ul><ul><li>WHERE _tDirigenti.nome = _tDipendenti.nome </li></ul></ul><ul><ul><li>AND _tDirigenti.codice = _tDipendenti.codice </li></ul></ul><ul><ul><li>AND _tDirigenti.età = _tDipendenti.età </li></ul></ul><ul><ul><li>) </li></ul></ul>
  9. 9. Join <ul><li>Utilizza i collegamenti sui valori che sono alla base del modello relazionale. </li></ul><ul><li>Combina selezioni e proiezioni per estrarre informazioni dalle relazioni. </li></ul><ul><li>Inner join Visualizza solo le righe per cui esiste una corrispondenza in entrambe le tabelle unite. (Join predefinito) </li></ul><ul><li>Outer join Visualizza anche le righe in cui non esiste alcuna corrispondenza nella tabella unita. </li></ul><ul><ul><li>Left outer join </li></ul></ul><ul><ul><li>Right outer join </li></ul></ul><ul><ul><li>Full outer join </li></ul></ul><ul><li>Cross join Visualizza una riga per ogni possibile coppia di righe delle due tabelle. </li></ul>
  10. 10. Tabelle tLibro (5) tAutore (3)
  11. 11. Principali comandi in SQL (DML) <ul><li>Inner Join (1): Contiene tutte le righe delle tabelle che soddisfano le condizioni </li></ul><ul><li>select <campi> from <nome tabella> JOIN <nome tabella2> ON <condizione> JOIN <tabella 3> ON <condizione> </li></ul>SELECT dbo.tLibro.*, dbo.tAutore.* FROM dbo.tLibro INNER JOIN dbo.tAutore ON dbo.tLibro.IdAutore = dbo.tAutore.AutoreId
  12. 12. <ul><li>Inner Join (2): </li></ul>
  13. 13. Principali comandi in SQL (DML) <ul><li>Outer Join (1): </li></ul><ul><ul><li>Left: le righe senza corrispondente che si trovano nella tabella di sinistra (cioè quella dichiarata per prima nella query) </li></ul></ul><ul><ul><li>Right: le righe della seconda tabella che non hanno corrispondente nella prima </li></ul></ul><ul><ul><li>Rispetto alla query: </li></ul></ul><ul><ul><ul><li>Left  si prendono tutti i record della tabella a sinistra </li></ul></ul></ul><ul><ul><ul><li>Right  si prendono tutti i record della tabella a destra </li></ul></ul></ul><ul><li>select <campi> from <nome tabella> LEFT JOIN <nome tabella2> ON <condizione> </li></ul>SELECT dbo.tLibro.*, dbo.tAutore.* FROM dbo.tLibro RIGHT OUTER JOIN dbo.tAutore ON dbo.tLibro.IdAutore = dbo.tAutore.AutoreId
  14. 14. <ul><li>Outer Join (2): </li></ul>RIGHT OUTER JOIN LEFT OUTER JOIN
  15. 15. Principali comandi in SQL (DML) <ul><li>Cross join (1): </li></ul><ul><li>select <campi> from <nome tabella> CROSS JOIN <nome tabella2> </li></ul>SELECT dbo.tLibro.*, dbo.tAutore.* FROM dbo.tLibro CROSS JOIN dbo.tAutore
  16. 16. <ul><li>Cross join (2): ....6*3=18!! </li></ul>
  17. 17. Esercizi <ul><li>Usare il db “CDs” </li></ul><ul><li>Inner join con tutte le colonne delle tabelle tCd e tCantante data la relazione legata all'id del cantante (cantante_id) </li></ul><ul><li>Inner join con le caratteristiche di ogni cd e relativo nome del cantante data la relazione legata all'id del cantante (cantante_id) </li></ul><ul><li>Inner join con titolo de cd e relativo nome del cantante data la relazione legata all'id del cantante (cantante_id) </li></ul><ul><li>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) </li></ul><ul><li>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) </li></ul>
  18. 18. Esercizi <ul><li>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 &quot;rock“ </li></ul><ul><li>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 &quot;rock&quot; e &quot;pop“ </li></ul><ul><li>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 &quot;rock&quot; e al cantante uguale a &quot;madonna“ </li></ul><ul><li>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 &quot;rock&quot; e al cantante uguale a &quot;madonna&quot;, ordinare in modo discendente per il titolo del cd </li></ul><ul><li>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 </li></ul>

×