Unità C1 Il linguaggio SQL © 2007 SEI-Società Editrice Internazionale, Apogeo Obiettivi • Conoscere l’evoluzione del linguaggio SQL • Saper definire dati, domini e vincoli ed essere in grado di recuperare dati dal database • Conoscere le funzioni di aggregazione • Sapere ordinare e raggruppare i dati • Saper effettuare unioni, intersezioni e differenze • Saper eseguire interrogazioni nidificate • Saper aggiornare i dati, inserendo, modificando ed eliminando quelli esistenti • Utilizzare SQL all’interno di altri linguaggi © 2007 SEI-Società Editrice Internazionale, Apogeo L’evoluzione del linguaggio • SQL è un linguaggio standard per l’interazione con i database relazionali. • Le origini di SQL si trovano in un documento del 1970 realizzato da Edgar Codd, “A Relational Model of Data of Large Shared Data Banks”. • Primo standard SQL-86 pubblicato da ANSI e ratificato da ISO nel 1987 (ANSI e ISO sono due organismi internazionali che si occupano della standardizzazione delle tecnologie). • SQL-92 (SQL 2) è lo standard a cui fanno riferimento la maggior parte dei DBMS. • L’evoluzione del linguaggio ha portato a due ulteriori versioni: SQL:1999 e SQL:2003. • Il primo ha incluso funzioni orientate agli oggetti, ritenute tuttavia controverse e quindi non completamente supportate; il secondo ha esteso il supporto alla tecnologia XML. © 2007 SEI-Società Editrice Internazionale, Apogeo Le funzionalità di SQL • DDL (Data Definition Language, linguaggio di definizione dei dati). – Consente di descrivere la struttura delle tabelle e di tutti gli elementi di supporto (come indici, vincoli, trigger, viste ecc.). – Viene utilizzato per realizzare lo schema logico e lo schema fisico del database. • DML (Data Manipulation Language, linguaggio per la manipolazione dei dati). – Operazioni di inserimento, modifica e cancellazione dei dati. • DCL (Data Control Language, linguaggio di controllo dei dati). – Limiti sui dati (permessi di accesso, vincoli di integrità). • QL (Query Language, linguaggio di interrogazione) – Interrogare il database al fine di individuare i dati che corrispondono ai parametri di ricerca dell’utente. © 2007 SEI-Società Editrice Internazionale, Apogeo L’utilizzo di SQL • Interattivo – L’utente utilizza un programma software, in genere fornito con il DBMS, in cui introdurre comandi SQL che vengono inviati al DBMS. • All’interno di applicazioni software – L’ utente utilizza applicazioni che sono approntate da sviluppatori che realizzano i comandi SQL necessari per attivare le funzionalità desiderate. – I comandi possono essere poi collegati nel programma in due modalità differenti: • “ospitati” nel codice del software e inviati al DBMS all’occorrenza. • memorizzati all’interno del DBMS e quindi richiamati dal programma. © 2007 SEI-Società Editrice Internazionale, Apogeo I tipi di dato © 2007 SEI-Società Editrice Internazionale, Apogeo Gli operatori © 2007 SEI-Società Editrice Internazionale, Apogeo DDL Data Definition Language © 2007 SEI-Società Editrice Internazionale, Apogeo Creazione di una tabella © 2007 SEI-Società Editrice Internazionale, Apogeo Modifica di una tabella © 2007 SEI-Società Editrice Internazionale, Apogeo Eliminazione di una tabella • RESTRICT indica al database di impedire la cancellazione della tabella se questa contiene dati che sono referenziati da altre tabelle collegate. In questo modo, si evita che la base dati assuma contenuti inconsistenti. • CASCADE indica al database di cancellare automaticamente tutte le tabelle collegate a questa mediante vincoli referenziali. • SET NULL indica di impostare a NULL tutti i valori delle chiavi interessate. © 2007 SEI-Società Editrice Internazionale, Apogeo Domini • SQL offre la possibilità di definire nuovi tipi di dato (domini) • CREATE DOMAIN <NomeDominio> [AS] <Tipo> [CHECK(<Condizione>)]; – NomeDominio è il nome del nuovo tipo di dato; – Tipo è il tipo di dato di base da cui partire per creare il dominio; – Condizione indica eventuali condizioni di controllo da associare al tipo di dato. • CREATE DOMAIN TIPO_COMPUTER AS CHAR(11) CHECK (VALUE IN (‘notebook’,‘desktop’,‘tower’, ‘pda’); © 2007 SEI-Società Editrice Internazionale, Apogeo Vincoli • I vincoli consentono di specificare controlli sui dati, al fine di assicurare la correttezza e consistenza dell’informazione. • I vincoli possono essere: – interni (o intrarelazionali) specificano controlli sulla singola tabella intesa come entità a se stante – di integrità referenziale riguardano i rapporti tra una tabella e l’altra. © 2007 SEI-Società Editrice Internazionale, Apogeo Vincoli interni • • • • NOT NULL VALUE IN VALUE BETWEEN PRIMARY KEY (<ElencoCampi>) indica la chiave primaria della tabella • UNIQUE(<ElencoCampi>) indica che le colonne elencate sono parte di una chiave candidata • CHECK(<Condizione>) indica un controllo su un’espressione composta utilizzando i campi della tabella stessa. © 2007 SEI-Società Editrice Internazionale, Apogeo Vincoli di integrità referenziale • FOREIGN KEY (<ElencoCampi1>) REFERENCES <NomeTabella> (<ElencoCampi2>) dove il primo elenco dei campi indica la chiave esterna che corrisponde alla chiave primaria della tabella NomeTabella come specificata dal secondo elenco di campi. • L’integrità referenziale viene controllata anche dalle parole chiave RESTRICT, CASCADE e SET NULL, che consentono di controllare la risposta del database a un vincolo. © 2007 SEI-Società Editrice Internazionale, Apogeo RESTRICT, CASCADE, SET NULL © 2007 SEI-Società Editrice Internazionale, Apogeo Un esempio © 2007 SEI-Società Editrice Internazionale, Apogeo QL Query Language © 2007 SEI-Società Editrice Internazionale, Apogeo SELECT • Per estrarre informazioni dalla base di dati si utilizza l’istruzione SELECT. • La sintassi completa dell’istruzione SELECT è complessa perché l’istruzione implementa varie funzionalità. © 2007 SEI-Società Editrice Internazionale, Apogeo SELECT – sintassi base • DISTINCT per restituire solo righe diverse tra loro. • <CampoXXX> indica il campo da ritornare. • <AliasXXX> indica un nome alternativo per il campo da restituire. • <TabellaXXX> indica la tabella da cui recuperare i campi. © 2007 SEI-Società Editrice Internazionale, Apogeo SELECT (esempi) © 2007 SEI-Società Editrice Internazionale, Apogeo Restrizione • Nell’istruzione SELECT è possibile limitare la quantità di dati ritornati, individuando solo un sottoinsieme di quelli contenuti nella tabella. • Questo è possibile grazie alla parola chiave WHERE. © 2007 SEI-Società Editrice Internazionale, Apogeo WHERE (condizione) • L’espressione <Condizione> indica la condizione che deve essere soddisfatta dai record affinché i dati siano ritornati. • All’interno di questa espressione è possibile specificare: – nomi dei campi di una qualsiasi delle tabelle indicate; – operatori di confronto, come =, <>, >, >=, <=, <; – operatori logici come NOT, AND, OR; – l’operatore LIKE; – la parola chiave IS NULL o IS NOT NULL. © 2007 SEI-Società Editrice Internazionale, Apogeo SELECT … WHERE (esempi) © 2007 SEI-Società Editrice Internazionale, Apogeo Join di due tabelle • La parola chiave WHERE può essere utilizzata anche per legare tra loro (JOIN) due o più tabelle, al fine di restituire solo alcune righe delle tabelle collegate. • Per esempio: © 2007 SEI-Società Editrice Internazionale, Apogeo Alias anche per le tabelle © 2007 SEI-Società Editrice Internazionale, Apogeo Funzioni di aggregazione • SQL dispone di alcune modalità per effettuare calcoli sui dati, senza per questo modificare i dati in tabella: il calcolo di espressioni e l’utilizzo di funzioni predefinite. © 2007 SEI-Società Editrice Internazionale, Apogeo Un esempio • MARCA e MODELLO identificano il prodotto. • GIACENZA indica quante unità di prodotto esistono a magazzino. • LIVELLO_SCORTA indica il numero di unità al di sotto delle quali non vengono più accettati ordini per quel prodotto. • LIVELLO_RIORDINO indica il numero di unità al di sotto dei quali viene emesso un ordine di acquisto per aumentare la giacenza. © 2007 SEI-Società Editrice Internazionale, Apogeo Calcoli sui campi © 2007 SEI-Società Editrice Internazionale, Apogeo Funzioni predefinite • COUNT([DISTINCT] Campo) conteggia il numero di elementi del campo indicato. • MIN([DISTINCT] Campo) restituisce il valore minimo del campo indicato. • MAX([DISTINCT] Campo) restituisce il valore massimo del campo indicato. • SUM([DISTINCT] Campo) calcola e restituisce la somma dei valori presenti nel campo indicato. • AVG([DISTINCT] Campo) calcola e restituisce la media aritmetica dei valori presenti nel campo indicato. © 2007 SEI-Società Editrice Internazionale, Apogeo Ordinamento • Il nome del campo viene utilizzato per effettuare l’ordinamento. • Il modificatore ASC o DESC viene utilizzato per indicare se l’ordinamento è di tipo crescente o decrescente. Di default ascendente. © 2007 SEI-Società Editrice Internazionale, Apogeo Raggruppamento • GROUP BY raggruppa le righe sulla base del valore di uno o più attributi, in genere per effettuare calcoli aggregati su dati omogenei. • La sintassi completa dell’istruzione SELECT, includendo anche la clausola GROUP BY, è la seguente: © 2007 SEI-Società Editrice Internazionale, Apogeo Esempi © 2007 SEI-Società Editrice Internazionale, Apogeo HAVING • È anche possibile restringere il risultato specificando una condizione che può considerare sia i campi sia il valore di funzioni di aggregazione. © 2007 SEI-Società Editrice Internazionale, Apogeo Unione • SQL consente di unire il risultato di più SELECT “in verticale”. • Il meccanismo è simile all’accodamento di una seconda lista a una prima, a patto che le due liste abbiano campi omogenei. © 2007 SEI-Società Editrice Internazionale, Apogeo Differenza e intersezione © 2007 SEI-Società Editrice Internazionale, Apogeo Interrogazioni nidificate • Talvolta le operazioni di interrogazione si rivelano particolarmente complesse; in questo caso, è necessario utilizzare più istruzioni SELECT al fine di ottenere tutti i dati voluti. © 2007 SEI-Società Editrice Internazionale, Apogeo Un esempio © 2007 SEI-Società Editrice Internazionale, Apogeo IN – NOT IN – EXIST © 2007 SEI-Società Editrice Internazionale, Apogeo ANY - ALL • ANY ritorna vero se il confronto indicato è vero per almeno uno degli elementi identificati dalla query nidificata • ALL ritorna vero se il confronto indicato è vero per tutti gli elementi individuati dalla query nidificata. • ANY e ALL sono più potenti di IN, in quanto consentono di utilizzare operatori di confronto >, >=, <= e < © 2007 SEI-Società Editrice Internazionale, Apogeo DML Data Manipulation Language © 2007 SEI-Società Editrice Internazionale, Apogeo Inserimento • <NomeTabella> è il nome della tabella in cui inserire i dati. • <CampoXXX> è il nome dei campi da valorizzare. • <ValoreXXX> sono i valori da inserire nei campi. • L’elenco dei campi è opzionale. Se non viene specificato, è necessario fornire valori per tutti i campi presenti nella tabella. © 2007 SEI-Società Editrice Internazionale, Apogeo Modifica • • • • • <NomeTabella> è il nome della tabella da modificare. <CampoXXX> è il nome dei campi da valorizzare. <ValoreXXX>, sono i valori da inserire nei campi. <Condizione> è l’espressione che individua un sottoinsieme di righe per cui deve essere applicata la modifica. Nell’esempio si azzera la velocità di tutti i processori presenti nella tabella Processore. © 2007 SEI-Società Editrice Internazionale, Apogeo Eliminazione • <NomeTabella> è il nome della tabella da modificare. • <Condizione> è l’espressione che individua il sottoinsieme di righe da eliminare. © 2007 SEI-Società Editrice Internazionale, Apogeo SQL come linguaggio ospitato • • • • • • • • Per eseguire comandi SQL da un programma software (come si dice in gergo, per eseguire SQL ospitato) è necessario effettuare alcune operazioni aggiuntive. Connessione: per ottenere un oggetto che consentirà di eseguire uno o più comandi SQL. La connessione è necessaria per stabilire con quale database si vuole operare e per fornire dati di autenticazione (in genere utente/password). Creazione di un comando SQL: viene creato un oggetto che rappresenta un’istruzione SQL e che viene impostato con uno specifico comando. Esecuzione del comando: comporta il passaggio dell’oggetto che rappresenta il comando a quello che rappresenta la connessione, in modo che il comando venga eseguito. Iterazione sulla risposta: il risultato di un’istruzione SELECT è una tabella e in genere un programma deve scorrere le righe del risultato per elaborarle. Chiusura della risposta: l’oggetto che rappresenta la risposta, una volta utilizzato, deve essere chiuso e rilasciato dalla memoria. Chiusura del comando: l’oggetto che rappresenta il comando SQL, una volta utilizzato, deve essere chiuso e rilasciato dalla memoria. Chiusura della connessione: l’oggetto che rappresenta la connessione SQL, prima della conclusione del programma, deve essere chiuso e rilasciato dalla memoria. © 2007 SEI-Società Editrice Internazionale, Apogeo Schema © 2007 SEI-Società Editrice Internazionale, Apogeo Gli errori • Nel corso di tutte le operazioni con il database è necessario occuparsi della gestione degli errori, le tecniche di gestione dipendono dal linguaggio di programmazione in uso. • Ciascuna delle operazioni con il database può sollevare un errore, che può essere di comunicazione, di dati o di altra natura. © 2007 SEI-Società Editrice Internazionale, Apogeo Esercizi • Il database Cinema è formato dalle seguenti tabelle: © 2007 SEI-Società Editrice Internazionale, Apogeo Esercizi Modificare in “ITA” la Nazionalità di tutti i registi che hanno nome che termina per “Mario”. Recuperare Titolo e Titolo originale di tutti i film di un certo regista. Recuperare Titolo e nome del regista di film di genere commedia diretti da registi di Nazionalità “ITA”. 4. Recuperare Titolo e Regista dei film che hanno avuto una candidatura all’Oscar per la Regia. 5. Recuperare Titolo, Regista e anno dei film che hanno vinto l’Oscar per la Regia. 6. Recuperare Nome degli attori che hanno recitato in un certo film. 7. Recuperare Titolo e Regista dei film in cui ha recitato un certo attore. 8. Recuperare il Titolo dei film candidati ai premi del festival di Venezia in un certo anno. 9. Aggiungere il campo at_foto di 30 caratteri alla tabella Attore 10. Modifica il campo at_foto in Attore ponendolo uguale ad at_nome+”.jpg” 1. 2. 3. © 2007 SEI-Società Editrice Internazionale, Apogeo