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
Scarica

Unità C1 - Alberto Ferrari