APPUNTI SUBASI DI DATI Prof. G. Caprioli    (marzo 2008)
APPUNTI SU BASI DI DATIprogettazione concettuale e logica              SQL        implementazioni
APPUNTI SU BASI DI DATI     PROGETTAZIONE      CONCETTUALE           E        LOGICA
PROGETTAZIONE• FASI DEL PROGETTO1. Raccolta delle richieste dell’utente    •   studio preliminare su convenienza, riflessi...
PROGETTO CONCETTUALE• PROGETTO CONCETTUALE                         Dato da memorizzare       → identificatore (sostantivo)...
PROGETTO CONCETTUALE• PROGETTO CONCETTUALE(*)                                       1/2                                   ...
PROGETTO CONCETTUALE• PROGETTO CONCETTUALE(*)                                                                            2...
PROGETTO LOGICO• PROGETTO LOGICODEFINIZIONIRELAZIONE R ⊆ D1X D2 X … DN Di : domini                             SCHEMA DI R...
PROGETTO LOGICO• PROGETTO LOGICO(*)                                                                                  1/2 D...
PROGETTO LOGICO• PROGETTO LOGICO(*)                                                                    2/2        ESEMPI D...
PROGETTO LOGICO• ANOMALIE                       PRENOTA                       idLetto   indiriz   ca   localit   idLibr   ...
PROGETTO LOGICO• NORMALIZZAZIONE                                                                                          ...
PROGETTO LOGICO• NORMALIZZAZIONE                                                                                          ...
PROGETTO LOGICO• NORMALIZZAZIONE                                                                                          ...
ESERCIZIO 1          sportello dello studente (1/2)• Dato il seguente schema:                                             ...
ESERCIZIO 1          sportello dello studente (2/2)•   Utilizzando gli schemi di relazione costruiti dal precedente diagra...
ESERCIZIO 2           campionato di calcio (1/2)• Dato il seguente schema:   idSquadra                                    ...
ESERCIZIO 2         campionato di calcio (2/2)•   Utilizzando gli schemi di relazione costruiti dal precedente diagramma E...
APPUNTI SU BASI DI DATI          SQL Structured Query Language
SQLLinguaggio per basi di dati che assolve alle funzioni di definizione,manipolazione e memorizzazione dei datiPuò essere ...
CREATE TABLE• CREAZIONE DI UNA TABELLACREATE TABLE tabella (attributo tipo [clausole] [, ...][,clausole])PRINCIPALI TIPI  ...
CREATE INDEX• CREAZIONE DI UN INDICECREATE INDEX indice ON tabella (attributo [, attributo])                              ...
DROP• CANCELLAZIONE DI UNA TABELLADROP TABLE tabella  • UNA TABELLA PUÓ ESSERE ELIMINATA SOLO DAL PROPRIETARIO O DALL’AMMI...
GRANT e REVOKE • SICUREZZA ED INTEGRITÀ DEI DATIGRANT operazione ON oggetto TO utenteoperazione        operazione da conse...
SELECT• ESTRAZIONE DI DATI                                                                   SELECT 1/9SELECT [predicato] ...
SELECT• ESTRAZIONE DI DATI                                                                                         SELECT ...
SELECT• ESTRAZIONE DI DATI                                                                                            SELE...
SELECT • ESTRAZIONE DI DATI                                                                                           SELE...
SELECT• ESTRAZIONE DI DATI                                                                                          SELECT...
SELECT• ESTRAZIONE DI DATI                                                                                               S...
SELECT• ESTRAZIONE DI DATI                                                                                                ...
SELECT• ESTRAZIONE DI DATI                                                                                                ...
SELECT• ESTRAZIONE DI DATI                                                                                                ...
CREATE VIEW• ESTRAZIONE DI DATICREATE VIEW identificatore AS selezione  identificatore             nome da assegnare alla ...
JOIN• ESTRAZIONE DI DATI                                                                                                JO...
JOIN• ESTRAZIONE DI DATI                                                                                                JO...
INSERT• INSERIMENTO DI DATIINSERT INTO destinazione [(elencoattributi)] VALUES (elencovalori)  destinazione          tabel...
INSERT• INSERIMENTO DI DATIINSERT INTO destinazione [(elenco1attr)] SELECT elenco2attr FROM tabella  destinazione        t...
DELETE• CANCELLAZIONE DI DATIDELETE FROM tabella WHERE espressionetabella             tabella da cui eliminare la rigaespr...
UPDATE• AGGIORNAMENTO DI DATIUPDATE tabella SET attributo=esp [, attributo=espressione1] WHERE esp2attributo           nom...
ESERCIZIO 3• Scrivere le interrogazioni SQL relative ai  questiti degli esercizi 1 e 2 formulando, se  necessario, delle o...
ESERCIZIO 4•   Date le tabelle relative ai seguenti schemi di relazione, in cui gli identificatori sottolineati    sono ch...
APPUNTI SU BASI DI DATI      IMPLEMENTAZIONI             MS Access               MySql   (questa sezione è ancora solo una...
Access • CREAZIONE DI UNA TABELLA                                                                                         ...
Access • CREAZIONE DI UNA TABELLA                                                                                         ...
Access• CREAZIONE DI UNA MASCHERA                                                                                         ...
Access • CREAZIONE DI UNA QUERY PASS-THROUGH                                                                              ...
Access • CREAZIONE DI UNA QUERY PASS-THROUGH                                                                              ...
MySQL    Vedere il tutorial MySQL contenuto nel capitolo 3 del Reference Manual Mysql 6.0 (http://www.mysql.com sezione Do...
Upcoming SlideShare
Loading in …5
×

Appunti database

671
-1

Published on

prova iniziale

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
671
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
22
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Appunti database

  1. 1. APPUNTI SUBASI DI DATI Prof. G. Caprioli (marzo 2008)
  2. 2. APPUNTI SU BASI DI DATIprogettazione concettuale e logica SQL implementazioni
  3. 3. APPUNTI SU BASI DI DATI PROGETTAZIONE CONCETTUALE E LOGICA
  4. 4. PROGETTAZIONE• FASI DEL PROGETTO1. Raccolta delle richieste dell’utente • studio preliminare su convenienza, riflessi e settori coinvolti per l’organizzazione • analisi del sistema informativo esistente • definizione dei requisiti del nuovo sistema • classificazione dei dati • individuazione dei vincoli sui dati • descrizione delle procedure da automatizzare • volume iniziale e tasso di crescita dei dati • sicurezza e grado di riservatezza dei dati2. Progetto concettuale • schema dei dati e delle relazioni tra essi (diagramma ER) • operazioni da implementare • vincoli impliciti ed espliciti su dati, procedure, tempi di risposta (vincoli di integrità, di dominio, ecc.)3. Progetto logico • strutturazione dei dati (approccio relazionale) • stesura delle procedure4. Progetto fisico • descrizione dell’organizzazione fisica degli archivi (tabelle, indici ecc.) • codifica delle operazioni e delle interfacce (procedure, menu ecc.)
  5. 5. PROGETTO CONCETTUALE• PROGETTO CONCETTUALE Dato da memorizzare → identificatore (sostantivo) ENTITÀ → proprietà (attributi) ENTITÀ ATTRIBUTO • intensione, estensione • identificatore + dominio • entità ISA • semplice, composto, multiplo • chiave • obbligatorio, opzionale • costante, variabile • derivato Relazione matematica tra entità → identificatore (verbo) ASSOCIAZIONE → cardinalità ASSOCIAZIONE CARDINALITÀ • intensione, estensione • 1:1 • diretta, inversa • 1:N oppure N:1 • totale, parziale • N:M • univoca, multipla • suriettiva, non suriettiva ENTITÀ + ASSOCIAZIONI = DIAGRAMMI E-R (Entity-Relationship)
  6. 6. PROGETTO CONCETTUALE• PROGETTO CONCETTUALE(*) 1/2 data PRENOTA N M 1 N LETTORE PRENDE LIBRO idLettore idLibro cognome copia data nome titolo indirizzo numPagine telefono posizione tipo casaEd
  7. 7. PROGETTO CONCETTUALE• PROGETTO CONCETTUALE(*) 2/2 OPERAZIONI DA REALIZZARE: Q1. visualizzazione dell’elenco di tutti i lettori che hanno preso in prestito libri con i relativi titoli Q2. visualizzazione del cognome e nome dei lettori che hanno preso in prestito un libro in una data assegnata Q3. visualizzazione dell’elenco dei libri prenotati con titolo, data, cognome e telefono dei prenotanti Q4. visualizzazione dei dati dei lettori che hanno prenotato almeno un libro(*) Porzione del progetto concettuale della base di dati BIBLIOTECA
  8. 8. PROGETTO LOGICO• PROGETTO LOGICODEFINIZIONIRELAZIONE R ⊆ D1X D2 X … DN Di : domini SCHEMA DI RELAZIONE rJ : tuple nome + lista attributiOPERAZIONI DELL’ALGEBRA RELAZIONALEtra relazioni compatibili tra relazioni non compatibili – RIDENOMINAZIONE ρB←A(R) – PRODOTTO CARTESIANO R1 X R2 – UNIONE R1 ∪ R2 – PROIEZIONE πA(R) – DIFFERENZA R1 - R2 – RESTRIZIONE σP(R) – INTERSEZIONE R1 ∩ R2 – GIUNZIONE R1 ▷◁ R2 – DIVISIONE R1 ÷ R2IMPLEMENTAZIONE DEI DIAGRAMMI E-R – entità → schema di relazione – associazione 1:1 → chiave esterna su uno degli schemi di relazione ATTENZIONE – associazione 1:N → chiave esterna su schema di relazione N AI VINCOLI DI – associazione N:M → schema di relazione con chiavi esterne INEGRITÀ
  9. 9. PROGETTO LOGICO• PROGETTO LOGICO(*) 1/2 DEFINIZIONE DEGLI SCHEMI DI RELAZIONE LETTORE(IdLettore: INTERO LUNGO, Cognome: CHAR(20), Nome: CHAR(20), Indirizzo: CHAR(30), Telefono: CHAR(15), Tipo: CHAR) LIBRO(IdLibro: INTERO LUNGO, #Copia: INTERO, Titolo: CHAR(30), NumPagine: INTERO, Posizione: CHAR(8), CasaEd:CHA(30), IdLettore: INTERO LUNGO, Data: DATA) PRENOTA(IdPrenota: INTERO LUNGO, IdLettore: INTERO LUNGO, IdLibro: INTERO LUNGO, Data: DATA) NOTE: I campi sottolineati sono campi chiave primaria I campi in corsivo sono campi chiave esterna che implementano una relazione tra entità di tipo 1:N I campi in carattere non grassetto sono campi esterni allentità (appartenenti alla relazione 1:N) LA RELAZIONE PRENOTA IMPLEMENTA LA CORRISPONDENTE RELAZIONE TRA ENTITÀ • ciascuno schema di relazione è indicizzato sulla chiave primaria • lo schema di relazione LIBRO contiene due chiavi esterne per le associazioni PRENDE e PRENOTA • per brevità vengono omessi i vincoli impliciti ed espliciti (*) Porzione del progetto logico della base di dati BIBLIOTECA
  10. 10. PROGETTO LOGICO• PROGETTO LOGICO(*) 2/2 ESEMPI DI ESPRESSIONI DELL’ALGEBRA RELAZIONALE RELATIVE ALLE OPERAZIONI INDIVIDUATE: Q1. LETTORE ▷◁ LIBRO Q2. πcognome, nome( σ data=[parametro_data]( LETTORE ▷◁ LIBRO)) Q3. LIBRO ▷◁ PRENOTA ▷◁ LETTORE Q4. LETTORE ▷◁ ( πidLettore (PRENOTA))(*) Porzione del progetto logico della base di dati BIBLIOTECA
  11. 11. PROGETTO LOGICO• ANOMALIE PRENOTA idLetto indiriz ca localit idLibr titol dat re zo p a o o a U1 I1 C1 L1 L1 T1 D1 U1 I1 C1 L1 L2 T2 D1 U1 I1 C1 L1 L3 T3 D4 U2 I2 C2 L2 L3 T3 D2 U3 I3 C3 L3 L2 T2 D3 U3 I3 C3 L3 L4 T4 D5 • inserimento – l’inserimento di un nuovo lettore obbliga ad inserire anche un libro preso in prestito • cancellazione – la cancellazione della tupla (U3, L2) ha un effetto diverso dalla cancellazione della tupla (U2, L3) • aggiornamento – dovendo modificare l’indirizzo di un lettore si è obbligati ad aggiornare tutte le tuple Le cause vanno ricercate nella indipendenza e ridondanza di alcuni dati Il rimedio consiste nella NORMALIZZAZIONE processo di trasformazione degli schemi di relazione in altri più piccoli aventi lo stesso contenuto informativo ed esenti da un certo tipi (livelli) prestabiliti di anomalie
  12. 12. PROGETTO LOGICO• NORMALIZZAZIONE 1/31FN uno schema di relazione si dice in prima forma normale quando tutti gli attributi sono di tipo elementare soluzione attributo composto → si scompone in più attributi semplici attributo multiplp → si trasforma in più righe, una per ogni molteplicità degli attributi multipli, ripetendo la parte non multiplaES. Si abbia il seguente insieme di dati riguardante le prenotazioni in una biblioteca PRENOTA idLetto indiriz ca localit idLibr titol dat idLibr titol dat idLibr titol dat re zo p a o o a o o a o o a U1 I1 C1 L1 L1 T1 D1 L2 T2 D1 L3 T3 D4 U2 I2 C2 L2 L3 T3 D2 U3 I3 C3 L3 L2 T2 D3 L4 T4 D5 Eliminando gli attributi composti e PRENOTA idLetto indiriz ca localit idLibr titol dat multipli si ottiene: re U1 zo I1 p C1 a L1 o L1 o T1 a D1 U1 I1 C1 L1 L2 T2 D1 U1 I1 C1 L1 L3 T3 D4 U2 I2 C2 L2 L3 T3 D2 U3 I3 C3 L3 L2 T2 D3 U3 I3 C3 L3 L4 T4 D5
  13. 13. PROGETTO LOGICO• NORMALIZZAZIONE 2/32FN uno schema di relazione si dice in seconda forma normale quando – è 1FN – non esistono attributi che dipendono solo da una parte della chiave soluzione si estraggono gli attributi che dipendono da una stessa parte di chiave in uno schema di relazione a sé stante ed associato allo schema rimanente che avrà cardinalità N (la parte di chiave diventa chiave esterna)ES. Nello schema di relazione Prenota, portato in 1FN nell’esempio precente, si ha: idLettore → indirizzo idLibro → titolo quindi estraendo ad esempio titolo ed editore, si avrà: idLettore → indirizzo LETTORE PRENOTA LIBRO idLettore indirizzo cap localita idLettore idLibro data idLibro titolo U1 I1 C1 L1 U1 L1 D1 L1 T1 U2 I2 C2 L2 U2 L3 D2 L2 T2 U3 I3 C3 L3 U3 L2 D3 L3 T3 U1 L2 D1 L4 T4 U1 L3 D4 U3 L4 D5
  14. 14. PROGETTO LOGICO• NORMALIZZAZIONE 3/33FN uno schema di relazione si dice in terza forma normale quando – è 2FN – non esistono attributi non-chiave che dipendono transitivamente dalla chiave soluzione si estraggono gli attributi che dipendono da altri attributi non chiave in uno o più schemi di relazione associati allo schema originale (che avrà cardinalità N); i campi di “transizione” diventano rispettivamente chiave esterna nello schema originale e chiave primaria nello schema derivatoES. Nello schema di relazione Lettore, ricavato dalla normalizzazione in 2FN dell’esempio precente, si ha: idLettore → localita → cap (il cap non dipende direttamente da idLettore ma transitivamente attraverso localita) quindi: LETTORE LOCALITA PRENOTA LIBRO localit caidLettore indirizzo localita idLettore idLibro data idLibro titolo a p U1 I1 L1 L1 C1 U1 L1 D1 L1 T1 U2 I2 L2 L2 C2 U2 L3 D2 L2 T2 U3 I3 L3 L3 C3 U3 L2 D3 L3 T3 U1 L2 D1 L4 T4 U1 L3 D4 U3 L4 D5
  15. 15. ESERCIZIO 1 sportello dello studente (1/2)• Dato il seguente schema: idDisponibilita giorno idInsegnante orainizio cognome orafine nome classe materia materia 1 N INSEGNANTE OFFRE DISPONIBILITA 1 1 N N EFFETTUA LEZIONE RIFERITA ora fine ora inizio allievo data idLezione costruire gli schemi di relazione del relativo progetto logico
  16. 16. ESERCIZIO 1 sportello dello studente (2/2)• Utilizzando gli schemi di relazione costruiti dal precedente diagramma ER, scrivere le espressioni dell’algebra relazionale relative alle seguenti operazioni: Q1: visualizzazione di un insegnante Q2: visualizzazione di una disponibilità Q3: visualizzazione di una lezione Q4: elencare le disponibilità per insegnante Q5: elencare le disponibilità per materia Q6: elencare le disponibilità per classe
  17. 17. ESERCIZIO 2 campionato di calcio (1/2)• Dato il seguente schema: idSquadra idStadio nome nome allenatore citta girone capienza N 1 SQUADRA GIOCA STADIO M N N INCONTRA data giornata golSquadra1 golSquadra2 costruire gli schemi di relazione del relativo progetto logico
  18. 18. ESERCIZIO 2 campionato di calcio (2/2)• Utilizzando gli schemi di relazione costruiti dal precedente diagramma ER, scrivere le espressioni dell’algebra relazionale relative alle seguenti operazioni: Q1: elencare le squadre che hanno sede in città nelle quali lo stadio ha capienza superiore a 60000 persone Q2: elencare le città nelle quali c’è più di uno stadio Q3: elencare le quadre che hanno perso almeno unna volta con una difefrenza reti superiore a 3 Q4: elencare gli stadi nei quali nessun incontro è terminato con un pareggio Q5: elencare le squadre che hanno vinto tutti i derby disputati
  19. 19. APPUNTI SU BASI DI DATI SQL Structured Query Language
  20. 20. SQLLinguaggio per basi di dati che assolve alle funzioni di definizione,manipolazione e memorizzazione dei datiPuò essere utilizzato interattivamente mediante opportune interfacceutente oppure essere ospite di un linguaggio di programmazione, ingenere mediante apposite librerieIn SQL gli schemi di relazione vengono implementati in TABELLE incui ciascuna tupla diviene una RIGA; a differenza delle relazioni, lerighe possono essere duplicateSQL consente una buona indipendenza logica e fisicaLe specifiche attualmente standardizzate sono l’ANSI X3.135 e l’ISO9075 del 1992
  21. 21. CREATE TABLE• CREAZIONE DI UNA TABELLACREATE TABLE tabella (attributo tipo [clausole] [, ...][,clausole])PRINCIPALI TIPI PAROLE CHIAVESMALLINT EXTERNALINTEGER FILEFLOAT COMPUTED BYDOUBLE PRECISION PRIMARY KEYDECIMAL | NUMERIC [(precision [, scale])] DEFAULTDATE NULL| NOT NULLCHAR | VARCHAR[(int)] USERBLOB UNIQUE COLLATE CONSTRAINTCREATE TABLE LETTORE(idLettore INTEGER NOT NULL, cognome VARCHAR(20) , nomeVARCHAR(20), indirizzo VARCHAR(30), telefono CHAR(15), tipo CHAR, PRIMARY KEY(idLettore));
  22. 22. CREATE INDEX• CREAZIONE DI UN INDICECREATE INDEX indice ON tabella (attributo [, attributo]) PAROLE CHIAVE EXTERNAL FILE COMPUTED BY PRIMARY KEY DEFAULT NULL| NOT NULL USER UNIQUE COLLATE CONSTRAINTCREATE UNIQUE INDEX Alfabetico ON Lettore (cognome, nome);
  23. 23. DROP• CANCELLAZIONE DI UNA TABELLADROP TABLE tabella • UNA TABELLA PUÓ ESSERE ELIMINATA SOLO DAL PROPRIETARIO O DALL’AMMINISTRATORE • NON SI POSSONO ELIMINARE TABELLE CORRENTEMENTE APERTE O UTILIZZATE DA ALTRI OGGETTIDROP TABLE Lettore;• CANCELLAZIONE DI UN INDICEDROP INDEX indice • UN INDICE PUÓ ESSERE ELIMINATO SOLO DAL PROPRIETARIO O DALL’AMMINISTRATORE • NON SI POSSONO ELIMINARE INDICI DI SISTEMA O CORRENTEMENTE APERTIDROP INDEX Alfabetico;
  24. 24. GRANT e REVOKE • SICUREZZA ED INTEGRITÀ DEI DATIGRANT operazione ON oggetto TO utenteoperazione operazione da consentire: ALTER|DELETE|INDEX|INSERT|SELECT|UPDATE|ALLoggetto nome dell’oggetto su cui consentire l’operazione: ad esempio una tabella, un indice ecc.utente identificatore dell’utente cui consentire l’operazioneGRANT UPDATE ON Libro TO SegreteriaREVOKE operazione ON oggetto FROM utenteoperazione operazione da consentire: ALTER|DELETE|INDEX|INSERT|SELECT|UPDATE|ALLoggetto nome dell’oggetto su cui consentire l’operazione: ad esempio una tabella, un indice ecc.utente identificatore dell’utente cui consentire l’operazioneREVOKE UPDATE ON Libro FROM Segreteria
  25. 25. SELECT• ESTRAZIONE DI DATI SELECT 1/9SELECT [predicato] elencocampi FROM tabella [clausole] predicato ALL, DISTINCT, DISTINCTROW, TOP elenco campi * | tabella.* | [tabella.]campo1 [AS alias1] [, ...] tabella Nome della tabella contenente i dati che si desidera recuperare clausole [IN databaseesterno] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]SELECT * FROM Lettore;SELECT DISTINCT cognome, nome FROM Lettore WHERE cognome<“D”;SELECT cognome, titolo FROM Lettore, Libro WHERE Lettore.idLettore=Libro.idLettore;
  26. 26. SELECT• ESTRAZIONE DI DATI SELECT 2/9 PREDICATO: ALL Impostazione predefinita. seleziona tutti i record che soddisfano le condizioni dellistruzione SQL DISTINCT Omette i record che contengono dati duplicati nei campi selezionati. Per essere inclusi nei risultati della query, i valori di ogni campo elencato nellistruzione SELECT devono essere univoci. Numerosi impiegati elencati in una tabella Impiegati, ad esempio, potrebbero avere lo stesso cognome. DISTINCTROW Omette i dati basati su interi record duplicati e non solo su campi duplicati. TOP Restituisce un certo numero di record che rientrano allinizio o alla fine di un intervallo specificato tramite una clausola ORDER BY. Se non si include la clausola ORDER BY, la query restituirà dalla tabella Studenti un set arbitrario di record che soddisfano la clausola WHERE. Il predicato TOP non effettua una scelta tra valori uguali. È possibile anche utilizzare la parola riservata PERCENT per ottenere una certa percentuale di record che rientrino allinizio o alla fine di un intervallo specificato tramite una clausola ORDER BY.SELECT TOP 25 cognome, nome FROM Lettore WHERE tipo=“s” OR tipo=“S” ORDER BY idLettore;
  27. 27. SELECT• ESTRAZIONE DI DATI SELECT 3/9 ELENCO CAMPI: Nome del campo o dei campi da recuperare insieme agli alias dei nomi di campo, alle funzioni di aggregazione SQL, ai predicati di selezione ALL, DISTINCT, DISTINCTROW, TOP o ad altre opzioni delle istruzioni SELECT. [tabella].* tutti i campi; [tabella.]campo un campo specifico ‘costante’ stesso valore per tute le righe risultato funzione di aggregazione funzioni che calcolano varie statistiche su set di valori (Avg,Count,Min, Max,StDev, StDevP,Sum,Var, VarP)SELECT DISTINCTROW “Lettore:”, nome, cognome FROM Lettore WHERE tipo=“S” OR tipo=“s”ORDER BY cognome DESC;
  28. 28. SELECT • ESTRAZIONE DI DATI SELECT 4/9 ESPRESSIONETABELLA Espressione che identifica una o più tabelle da cui vengono recuperati i dati. Lespressione può essere: un singolo nome di tabella un elenco di più tabelle; in questo caso viene fatto il prodotto cartesiano delle due tabelle un nome di query memorizzata un nome composto risultante da una JOIN (INNER, LEFT, RIGHT)JOINIstruzione corispondente alla JOIN dell’algebra relazionale. Può essere INNER, LEFT, RIGHT in base alla eventuale suriettivitàdel risultato e della tabella di riferimento.Combina in un campo comune i record di due tabelle se questi contengono valori corrispondenti: è quindi la base delle relazioni1:NLa sua sintassi è:SELECT elencocampi FROM tabella1 INNER JOIN tabella2 ON tabella1.campo1 operatorediconfronto tabella2.campo2 SELECT Lettore.cognome, Lettore.nome, Libro.titolo FROM Lettore INNER JOIN Libro ON Lettore.idLettore = Libro.idLettore;
  29. 29. SELECT• ESTRAZIONE DI DATI SELECT 5/9CLAUSOLE[IN databaseesterno] Specifica il database che contiene la tabella nel caso che questa sia contenuta in un altro database[WHERE espressione ] Specifica quali record delle tabelle elencate nella clausola FROM sono influenzati dalla SELECT; espressione deve assumere un valore logico e può essere composta con variabili, campi ed operatori di confronto, operstori logici[GROUP BY campiraggruppamento] Combina in un record singolo tutti i record con valori identici nellelenco di campi specificato. Se si include una funzione di aggregazione SQL, come Sum o Count, per ciascun record viene creato un valore di riepilogo.[HAVING criteriraggruppamento] Specifica i record che vengono visualizzati partendo dal risultato di GROUP BY. Dopo che GROUP BY combina i record, la clausola HAVING visualizza tutti i record raggruppati tramite la clausola GROUP BY che soddisfano le condizioni della clausola HAVING[ORDER BY elencocampi ASC|DESC] Ordina i record risultanti da una query in base a uno o più campi specifici in ordine crescente o decrescente[WITH OWNERACCESS OPTION], [UNION...], [PLAN...] clausole specifiche delle varie versioni
  30. 30. SELECT• ESTRAZIONE DI DATI SELECT 6/9FUNZIONI DI AGGREGAZIONEPermettono di calcolare varie statistiche su set di valori. È possibile utilizzare queste funzioni in una query ed in particolarenella SELECTAvg(espressione)Count(espressione) espressione rappresenta unespressione stringa che identificaMin, Max(espressione) il campo che contiene i dati numerici di cui si vuole calcolareStDev(espressione), StDevP(espressione) la media o unespressione che esegue un calcolo utilizzando iSum(espressione) dati del campoVar(espressione), VarP(espressione)ALTRE PAROLE CHIAVE/OPERATORIIS [NOT] NULLLIKE[NOT] NULLAND, OR, NOTASCOLLATE
  31. 31. SELECT• ESTRAZIONE DI DATI SELECT 7/9 ESEMPI DI VISUALIZZAZIONE DI UNA RELAZIONE 1:N 1. visualizzazione dell’elenco di tutti i lettori che hanno preso in prestito libri con i relativi titoli; il tutto ordinato in base al cognome del lettoreSELECT Lettore.*, Libro.titoloFROM Lettore, LibroWHERE Lettore.IdLettore=Libro.idLettoreORDER BY Lettore.Cognome; 1. visualizzazione dell’elenco di tutti i lettori che hanno preso in prestito libri con i relativi titoli; il tutto ordinato in base al cognome del lettore (con INNER JOIN)SELECT Lettore.*, Libro.titoloFROM Lettore INNER JOIN Libro ON Lettore.idLettore = Libro.idLettoreORDER BY Lettore.cognome;
  32. 32. SELECT• ESTRAZIONE DI DATI SELECT 8/9 ESEMPI DI VISUALIZZAZIONE DI UNA RELAZIONE N:N 1. visualizzazione dell’elenco dei libri prenotati con titolo, data, cognome e telefono dei prenotanti; il tutto ordinato in base al cognome del lettoreSELECT Libro.titolo, Prenota.data, Lettore.cognome, Lettore.indirizzo, Lettore.telefonoFROM Libro, Prenota, LettoreWHERE (Libro.idLibro = Prenota.idLibro) AND (Prenota.idLettore = Lettore.idLettore)ORDER BY Libro.titolo; 1. visualizzazione dell’elenco dei libri prenotati con titolo, data, cognome e telefono dei prenotanti; il tutto ordinato in base al cognome del lettore (con INNER JOIN)SELECT Libro.titolo, Prenota.data, Lettore.cognome, Lettore.indirizzo, Lettore.telefonoFROM (Libro INNER JOIN Prenota ON Libro.idLibro = Prenota.idLibro) INNER JOIN Lettore ON Prenota.idLettore = Lettore.idLettoreORDER BY Libro.titolo;
  33. 33. SELECT• ESTRAZIONE DI DATI SELECT 9/9 ALTRI ESEMPI DI OPERAZIONI DI SELEZIONE 1. visualizzazione dei dati dei lettori che hanno prenotato almeno un libro; si utilizza la clausola IN anziché la JOINSELECT Lettore.*FROM LettoreWHERE Lettore.IdLettore IN (SELECT DISTINCT Prenota.IdLettore FROM Prenota)ORDER BY Lettore.Cognome; 1. visualizzazione dell’elenco dei lettori e del numero di libri che hanno preso in prestito solo per chi ha preso più di un libroSELECT DISTINCTROW Lettore.Cognome, Lettore.nome, count(Titolo)FROM Lettore, LibroWHERE Lettore.IdLettore=Libro.IdLettoreGROUP BY Lettore.Cognome, Lettore.NomeHAVING count(Titolo)>=2ORDER BY Lettore.Cognome;
  34. 34. CREATE VIEW• ESTRAZIONE DI DATICREATE VIEW identificatore AS selezione identificatore nome da assegnare alla VISTA selezione istruzione SELECT che popola di dati la VISTA • in questo modo si assegna un identificatore ad una operazione di selezione che può essere usata all’interno di altre selezione • in questo modo è possibile inoltre fornire e revocare diritti di accesso alla selezione • analogamente agli altri oggetti una vista si elimina con il comando DROPCREATE VIEW Prenotazioni AS SELECT DISTINCTROW Lettore.*, Prenota.*, Libro.* FROM Libro INNER JOIN (Lettore INNER JOIN Prenota ON Lettore.idLettore = Prenota.idLettore) ON Libro.idLibro = Prenota.idLibro;
  35. 35. JOIN• ESTRAZIONE DI DATI JOIN 1/2 INNER, LEFT E RIGHT JOIN: elenco di lettori che hanno preso in prestito libri; il tutto ordinato in base al cognome del lettore e prendendo come tabella di riferimento Lettore 1. solo il lettori che hanno preso in prestito almeno un libroSELECT Lettore.cognome, Lettore.nome, Libro.titoloFROM Lettore INNER JOIN Libro ON Lettore.idLettore = Libro.idLettoreORDER BY Lettore.cognome; 1. tutti i lettori (anche chi non ha preso libri in prestito) ed i relativi libriSELECT Lettore.cognome, Lettore.nome, Libro.titoloFROM Lettore LEFT JOIN Libro ON Lettore.idLettore = Libro.idLettoreORDER BY Lettore.cognome; 1. solo il lettori che hanno preso in prestito un libro e tutti i libri (anche quelli non presi in prestito)SELECT Lettore.cognome, Lettore.nome, Libro.titoloFROM Lettore RIGHT JOIN Libro ON Lettore.idLettore = Libro.idLettoreORDER BY Lettore.cognome;
  36. 36. JOIN• ESTRAZIONE DI DATI JOIN 2/2 INNER, LEFT E RIGHT JOIN: elenco di lettori che hanno preso in prestito libri; il tutto ordinato in base al cognome del lettore e prendendo come tabella di riferimento Libro 1. solo il lettori che hanno preso in prestito almeno un libroSELECT Lettore.cognome, Lettore.nome, Libro.titoloFROM Libro INNER JOIN Lettore ON Libro.idLettore = Lettore.idLettoreORDER BY Lettore.cognome; 1. tutti i lettori (anche chi non ha preso libri in prestito) ed i relativi libriSELECT Lettore.cognome, Lettore.nome, Libro.titoloFROM Libro RIGHT JOIN Lettore ON Libro.idLettore = Lettore.idLettoreORDER BY Lettore.cognome; 1. solo il lettori che hanno preso in prestito un libro e tutti i libri (anche quelli non presi in prestito)SELECT Lettore.cognome, Lettore.nome, Libro.titoloFROM Libro LEFT JOIN Lettore ON Libro.idLettore = Lettore.idLettoreORDER BY Lettore.cognome;
  37. 37. INSERT• INSERIMENTO DI DATIINSERT INTO destinazione [(elencoattributi)] VALUES (elencovalori) destinazione tabella, query o view in cui si vogliono inserire i dati elencoattributi elenco dei nomi dei campi ai quali si riferiscono i dati elencovalori elenco dei dat da inserire • NORMALMENTE L’ISTRUZIONE INSERT PERMETTE DI INSERIRE DATI IN TUTTI I CAMPI DELLA DESTINAZIONE • L’ELENCO DEI VALORI DEVE RISPETTARE COME NUMERO E TIPO DI DATI L’ORDINE DELLE COLONNE DELLA TABELLA; IN QUESTO CASO NON È NECESSARIO SPECIFICARE elencoattributi; SE INVECE SI VOGLIONO INSERIRE I DATI SOLO IN ALCUNI DEI CAMPI SI DEVONO SPECIFICARE TALI CAMPI IN elencoattributi; IN QUESTO CASO L’ELENCO DEI VALORI DEVE RISPETTARE COME NUMERO E TIPO DI DATI L’ORDINE INDICATO IN elencoattributiINSERT INTO Lettore (idLettore, cognome, nome, telefono, tipo) VALUES (1234, "Rossi", "Mario","0773123456", "s");
  38. 38. INSERT• INSERIMENTO DI DATIINSERT INTO destinazione [(elenco1attr)] SELECT elenco2attr FROM tabella destinazione tabella, query o view in cui si vogliono inserire i dati elenco1attr elenco dei nomi dei campi ai quali si riferiscono i dati da inserire elenco2attr elenco dei nomi dei campi ai quali si riferiscono i dati che vengono estratti tabella tabella contenente i dati che vengono estratti • I DUE ELENCHI DI ATTRIBUTI DEVONO CONTENERE, IN MANIERA ORDINATA, LO STESSO NUMERO E TIPO DI ATTRIBUTIINSERT INTO Lettore (idLettore, cognome, nome, telefono, tipo) SELECT Idlettore,Cognome,Nome,Telefono, Tipo FROM CopiaLettore
  39. 39. DELETE• CANCELLAZIONE DI DATIDELETE FROM tabella WHERE espressionetabella tabella da cui eliminare la rigaespressione espressione logica che determina la riga da cancellare• LA CANCELLAZIONE DEI DATI PUÒ PORTARE AD UNA PERDITA DI CONSISTENZA DEGLI STESSI QUANDO NELLA CANCELLAZIONE SONO COINVOLTE CHIAVI ESTERNE DI ASSOCIAZIONI• IL CONTROLLO DI TALE FENOMENO PRENDE IL NOME DI INTEGRITÀ REFERENZIALE)• IN GENERE I DBMS FORNISCONO DEI MECCANISMI DI IMPOSTAZIONE E CONTROLLO DELL’INTEGRITÀ REFERENZIALE (IMPEDIMENTO DELLE CANCELLAZIONI, AGGIORNAMENTO A CATENA ECC.)• LA CANCELLAZIONE PUÒ OVVIAMENTE AGIRE SU PIÙ RIGHE CONTEMPORANEAMENTEDELETE FROM Lettore WHERE cognome=“Rossi”
  40. 40. UPDATE• AGGIORNAMENTO DI DATIUPDATE tabella SET attributo=esp [, attributo=espressione1] WHERE esp2attributo nomi dei campi della riga da aggiornareesp1 nuovi valori da dare ai campiesp2 espressione logica che individua la riga da aggiornare• IL VALORE DI UNA CHIAVE PRIMARIA NON PUÒ ESSERE AGGIORNATOUPDATE Libro SET posizione=“S2R3” WHERE idLibro=12 34
  41. 41. ESERCIZIO 3• Scrivere le interrogazioni SQL relative ai questiti degli esercizi 1 e 2 formulando, se necessario, delle opportune ipotesi aggiuntive riguardo vincoli, campi da visualizzare, ordinamenti
  42. 42. ESERCIZIO 4• Date le tabelle relative ai seguenti schemi di relazione, in cui gli identificatori sottolineati sono chiavi primarie e quelli in corsivo sono chiavi esterne delle rispettive tabelle: LETTORE(idLettore, cognome, nome) LIBRO(idLibro, titolo, autore) PRELEVA(idPrenota, idLettore, idLibro, data) scrivere le interrogazioni SQL per: Q1: ottenere i codici dei lettori che hanno preso in prestito almeno un libro Q2: ottenere i nomi ed i cognomi delle persone che hanno preso in prestito almeno un libro Q3: ottenere i nomi ed i cognomi delle persone che hanno preso in prestito almeno un libro a partire dal 20/02/2002 Q4: ottenere i titoli dei libri presi in prestito da almeno una persona Q5: ottenere tutti i titoli dei libri disponbili Q6: ottenere i titoli dei libri con le rispettive persone che li hanno presi in prestito Q7: ottenere i titoli dei libri presi in prestito in un dato giorno Q8: ottenere gli autori dei libri presi in prestito dal sig. Mario Rossi Q9: ottenere i nomi dei lettori che hanno preso in prestito libri di Svevo ma non di Manzoni Q10: ottenere quanti libri diversi di un autore ha preso in prestito un dato lettore
  43. 43. APPUNTI SU BASI DI DATI IMPLEMENTAZIONI MS Access MySql (questa sezione è ancora solo una bozza)
  44. 44. Access • CREAZIONE DI UNA TABELLA 1/2In Microsoft ACCESS la creazione di una tabela può avvenire in più modi:1. In maniera visuale; selezionare la cartella Tabelle; selezionare i tasti: Nuovo, Visualizzazione Struttura; a questo punto inserire i nomi dei campi ed i relativi tipi, uno per riga; Dopo aver selezionato il tasto Nuovo, sarebbe anche possibile optare per altre modalità di creazione (Visualizzazione Foglio dati, Autocomposizione Tabella ecc.)2. In maniera manuale usando SQL (istruzione CREATE TABLE); per inserire l’istruzione selezionare la cartella Query; selezionare: Nuovo, Visualizzazione Struttura, Chiudi (per chiudere la finestra delle Tabelle); selezionare poi le voci di menu: Query|Specifica SQL|Definizione dati; nella finestra che appare si digita e si esegue l’istruzione. La sintassi è: CREATE TABLE tabella (attributo tipo [,clausole] [, ...])La clausola per la definizione della chave primaria ha la sintassi:CONSTRAINT nomedelvincolo PRIMARY KEY(campo [,campo])La clausola per la definizione di un campo indicizzato ha la sintassi:CONSTRAINT nomedelvincolo UNIQUE (campo [,campo])I principali tipi utilizzabili sono: INTEGER, LONG, COUNTER, TEXT/STRING, DATA, FLOAT, OBJECT, ecc.CREATE TABLE LETTORE(IdLettore COUNTER , Cognome STRING(20), Nome TEXT(20), IndirizzoTEXT(30), Telefono TEXT(15), Tipo TEXT(1), CONSTRAINT Chiave PRIMARY KEY(Idlettore));
  45. 45. Access • CREAZIONE DI UNA TABELLA 2/2In Microsoft ACCESS la creazione di una tabela può avvenire in più modi:3. Attraverso una istruzione SELECT; si prelevano i record da una tabella o query esistente e si inseriscono in una nuova tabella che verrà definita in base alle righe ottenute. SELECT elencoattributi INTO nuovatabella FROM origine elencoattributi elenco dei campi da estrarre nuovatabella nome della tabella da creare origine tabella o query origineSELECT Lettore.* INTO Copialet FROM Lettore;
  46. 46. Access• CREAZIONE DI UNA MASCHERA 1/1Quando una maschera viene creata su una query LEFT JOIN, automaticamente si basa sulla tabella di sinistra in quanto è la tabella principale; la tabella di destra va eventualmente in una sottomaschera tramite un’associazione campo master/secondario.Per consentire l’aggiunta in una maschera con sottomaschere solo nella tabella della sottomaschera (tabella N) e non nella tabella principale (tabella 1) è necessario impostare le seguenti proprietà nella maschera principale:NO consenti aggiunteNO consenti eliminazioniSI consenti modificheBLOCCA tutti i campi
  47. 47. Access • CREAZIONE DI UNA QUERY PASS-THROUGH 1/2Per procedere alla creazione di una query pass-trough è necessario:avere accesso ad un Server SQLavere installato la libreria ODBCPASSO 1: creazione di una fonte dati ODBC1. Aprire il Pannello di Controllo di Windows2. Aprire ODBC3. Dalla cartella DSN utente selezionare Aggiungi4. Selezionare il driver relativo al Sever SQL che contiene il database da interrogare5. Selezionare Fine6. Inserire nella maschera i dati richiesti: Data Source Name Identificatore della sorgente di dati (deciso dall’utente) Description Descrizione simbolica ad uso dell’utente Network Protocol Eventuale protocollo di rete da utilizzare (se il Server SQL è remoto) Database Identificatore del database da interrogare Server Identificatore di rete del Server SQL Username Nome utente assegnato per l’accesso al Server SQL Password Password Nome utente assegnato per l’accesso al Server SQL7. Selezionare il pulsante OKN.B prima di selezionare OK è possibile effettuare un test della connessione (pulsante Test Connect)
  48. 48. Access • CREAZIONE DI UNA QUERY PASS-THROUGH 2/2PASSO 2: creazione della query pass-through1 Nella finestra del database, scegliere la cartella Query, quindi il pulsante Nuovo2 Selezionare Nuova query, Visualizzazione Struttura, OK, Chiudi nella finestra di dialogo Mostra tabella3. Selezionare Query|Specifica SQL|Pass-Through4. Selezionare le voci di menu Visualizza|Proprietà5. Nella tavola delle proprietà della query, impostare la proprietà StringaConnessODBC per specificare informazioni sul database al quale si desidera collegarsi; ad es.: “ODBC; DSN=biblioteca; UID=SYSDBA; PWD=masterkey; Hostname=LISERDB; NetworkProt=TCP/IP; Database=c:interbasedidattico;” NOTA: queste informazioni devono corrispondere a quelle inserite nella fonte dati ODBC creata nel passo 1; tali informazioni possono essere recuperate anche attraverso il Generatore di stringhe di connessione ODBC (selezionando ... nella proprietà StringaConnessODBC)6. Impostare se necessario le altre proprietà (ad es. RestituisciRecord a No se la query non è del tipo che restituisce record)7. Nella finestra Query SQL pass-through, digitare la query NOTA: la sintassi della query deve essere conforme alle convenzioni adottate dal server di database SQL al quale si sta inviando la query8. Selezionare le voci di menu Visualizza|Foglio Dati per eseguire la query, oppure in alternativa utilizzare gli appositi pulsanti (punto esclamativo e/o foglio dati)9. Chiudere la query e salvareNOTE: Da questo momento la query può essere utilizzata come fonte di dati per maschere, report, inserimenti, modifiche ecc. Può succedere, inoltre, che in fase di esecuzione della query vengano visualizzate richieste di informazioni sul database del server SQL (ad es. la password di accesso).
  49. 49. MySQL Vedere il tutorial MySQL contenuto nel capitolo 3 del Reference Manual Mysql 6.0 (http://www.mysql.com sezione Documentation)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×