Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
Basi di dati
CAPITOLO
7 Linguaggio SQL
Competenze
• Individuare le caratteristiche di un linguaggio per basi di dati.
• Utilizzare correttamente la sintassi del linguaggio per costruire comandi di
interrogazione e di manipolazione dei dati.
Conoscenze Abilità
• Linguaggio per basi di dati • Applicare i principi del modello
• Parole chiave e sintassi del relazionale
linguaggio SQL • Utilizzare i comandi del
• Codiica delle operazioni sui linguaggio SQL per la deinizione
database relazionali delle tabelle, le operazioni di
manipolazione dei dati e le
interrogazioni
• Utilizzare funzioni e clausole
per calcoli, raggruppamenti,
ordinamenti e ricerche
• Utilizzare i comandi per la
sicurezza
Contenuti
• Caratteristiche generali del linguaggio
• Identiicatori e tipi di dati
• Deinizione delle tabelle
• Comandi per la manipolazione dei dati
• Comando Select
• Operazioni relazionali
• Funzioni di aggregazione
• Ordinamenti e raggruppamenti
• Condizioni di ricerca
• Comandi per la sicurezza
1 Linguaggio per basi di dati
Il linguaggio SQL (Structured Query Language) è nato con lo scopo di poter
eseguire con facilità:
• la deinizione e la creazione di un database relazionale;
• le diverse operazioni di gestione dei dati, quali l’inserimento, la cancellazione e
la variazione dei record di un archivio;
• l’interrogazione del database a scopo informativo.
Il linguaggio è basato su costrutti semplici e facili da imparare. Le sue caratteri-
stiche, inine, sono standardizzate in modo che un utente, cambiando DBMS, non
debba apprendere un nuovo linguaggio per usare la base di dati.
Le interrogazioni che si costruiscono con SQL sono un’estensione di quelle che si
realizzano con sequenze di operazioni relazionali, in quanto con SQL è possibile,
come nelle query di Access, effettuare calcoli, raggruppamenti e ordinamenti.
Come abbiamo visto nel precedente capitolo, Access permette di costruire una
query in modalità QBE (cioè attraverso l’interfaccia graica) e di visualizzarne il
corrispondente codice SQL. È anche possibile costruire l’interrogazione in SQL e,
passando alla Visualizzazione Struttura, esaminare la versione QBE della query.
Per imparare il linguaggio è molto utile passare da una modalità all’altra e osser-
vare come una frase di SQL viene rappresentata in QBE, oppure, viceversa, come
una query QBE, di cui si conoscono gli effetti, viene tradotta in SQL.
La conoscenza di SQL è di grande importanza anche nello sviluppo di applicazioni
direttamente con Access in modalità QBE per le seguenti ragioni:
• ci sono interrogazioni che non si riescono a sviluppare con le QBE di Access;
• per scrivere interrogazioni annidate in modalità QBE bisogna inserire un comando
SQL nella riga dei criteri;
• per inserire in una maschera una casella combinata che permetta la scelta da
un elenco di dati estratti da una tabella, bisogna scrivere un’interrogazione SQL
da inserire tra le proprietà della casella;
• dopo aver creato un’interrogazione in modalità QBE e dovendola modiicare, è
spesso più facile e rapido modiicare il codice SQL dell’interrogazione, anziché
la versione QBE originale.
Progettare un database per organizzare le informazioni sugli elementi della tavola periodica.
Gli elementi possono poi essere classiicati nelle serie chimiche, che sono:
- Metalli alcalini
- Metalli alcalino terrosi
- Lantanoidi
- Attinoidi
- Metalli di transizione
- Metalli di post-transizione
- Metalloidi
- Non metalli
- Alogeni
- Gas nobili.
La serie chimica può essere identiicata con un numero progressivo e caratterizzata da un nome
per esteso ed eventualmente da una descrizione alternativa.
Quindi il modello concettuale dei dati contiene due entità principali: elemento e serie chimica.
Tra serie chimica ed elemento esiste un’associazione uno a molti, perché ad ogni serie chimica
possono corrispondere più elementi, mentre ogni elemento è classiicato in una sola serie chimica.
Il database SistemaPeriodico comprende le tabelle corrispondenti alle entità che caratterizzano
la gestione dei dati:
• Tabella SerieChimiche con le informazioni sulle serie: ID (codice identiicativo e chiave primaria),
nome e descrizione alternativa.
• Tabella Elementi con le informazioni sugli elementi del sistema periodico: numero atomico (chiave
primaria), simbolo atomico, gruppo, periodo, e tutte le altre proprietà elencate in precedenza.
La rappresentazione delle informazioni con due tabelle separate, come abbiamo visto nel capi-
tolo precedente, risponde all’esigenza di mantenere distinti i dati ed evitare anomalie durante le
operazioni su un database. Inoltre consente di deinire attributi aggiuntivi per le serie chimiche.
La igura seguente illustra il modello dei dati con alcune righe di esempio (per rendere più facile
la lettura, sono stati riportati solo alcuni tra gli attributi dell’elemento).
SerieChimiche
Elementi
Numero Simbolo Gruppo Periodo Nome Nome Massa Punto Serie
Atomico Atomico Italiano Inglese Atomica Fusione Chimica
1 H 1 1 idrogeno hydrogen 1,00794 -259,1 8
2 He 18 1 elio helium 4,0026.2 -272,2 10
3 Li 1 2 litio lithium 6,941 180,5 1
4 Be 2 2 berillio beryllium 10,811 1278 2
Possiamo quindi deinire il modello logico del database con le seguenti tabelle:
SerieChimiche (ID, Nome, DescrizioneAlternativa)
Elementi (NumeroAtomico, SimboloAtomico, Gruppo, Periodo, NomeItaliano, NomeInglese,
MassaAtomica, PuntoFusione, PuntoEbollizione, Densità, Elettronegatività, AfinitàElettronica,
SerieChimica)
Fine esempio
Oggi il linguaggio SQL viene usato in tutti i prodotti DBMS (Oracle, MySQL,
SQLServer, Access) come linguaggio di comandi per l’utente della base di dati.
Le diverse versioni del linguaggio SQL sono in genere aderenti agli standard inter-
nazionali, ma ci sono sicuramente delle differenze che possono essere individuate
attraverso la documentazione fornita con gli speciici software.
Le parole chiave che costituiscono i comandi del linguaggio SQL possono essere
usate in modo interattivo, scrivendole direttamente sulla tastiera nel momento in
cui si vogliono attivare. Tuttavia in molti ambienti i comandi possono essere inviati
al sistema attraverso un’interfaccia graica, che utilizza menu, inestre e icone per
guidare l’utente nella costruzione dell’istruzione SQL.
La terminologia del linguaggio SQL è analoga a quella di Access: un database è
costituito da tabelle, gli attributi sono le colonne della tabella e i record sono le
righe della tabella.
Il linguaggio SQL fornisce inoltre gli opportuni comandi per deinire in modo
facile i tabulati di uscita dei risultati (report), per recuperare i dati quando accade
un’interruzione del programma, un guasto nei supporti magnetici o un malfun-
zionamento del sistema, per deinire le viste parziali degli utenti sul database, per
garantire la sicurezza dei dati nei confronti degli accessi di più utenti.
La clausola Unique vieta la presenza di valori duplicati in una colonna o in un insieme di colonne:
non ci possono essere due elementi con lo stesso simbolo atomico.
La parola references deinisce il riferimento di un campo al campo di un’altra tabella.
Le clausole Primary Key e la deinizione della chiave esterna (Foreign Key) possono essere
inserite, come la clausola Unique, in righe isolate.
Per esempio nel comando di creazione della tabella Elementi:
La struttura di una tabella può essere modiicata in un secondo tempo con il comando ALTER
TABLE, per aggiungere una nuova colonna (ADD) a quelle già esistenti, oppure per togliere
una colonna (DROP).
Per esempio, il seguente comando aggiunge un nuovo campo RaggioAtomico alla struttura
della tabella Elementi:
Il seguente comando rimuove il campo RaggioAtomico dalla struttura della tabella Elementi:
L’istruzione CREATE INDEX viene utilizzata per creare un nuovo indice su una tabella esistente,
indicando il nome della tabella e il nome dell’attributo o degli attributi ai quali associare l’indice.
Se non si vuole che ci siano valori duplicati per l’attributo associato all’indice, occorre usare la
clausola Unique.
Per esempio, il seguente comando crea l’indice IndiceSimboli sul campo SimboloAtomico della
tabella Elementi: non ci possono essere elementi con lo stesso simbolo.
ine esempio
I comandi illustrati rappresentano la parte del linguaggio SQL che fa riferimento
alla categoria dei comandi deiniti con la sigla DDL (Data Deinition Language),
cioè il linguaggio che consente di implementare il modello logico dei dati sulle
memorie di massa del computer.
Occorre osservare che nelle versioni moderne dei prodotti DBMS le operazioni di
creazione di tabelle, oltre che di modiica alla struttura della tabella o di cancel-
lazione di tabelle, vengono effettuate, come in Access, attraverso un’interfaccia
interattiva che facilita il lavoro dell’utente, il quale può anche non conoscere la
sintassi dei comandi sopra illustrati.
Il seguente comando INSERT INTO inserisce una nuova riga nella tabella Elementi:
Si noti l’uso del punto decimale nella rappresentazione dei valori numerici non interi.
Il comando UPDATE aggiorna il contenuto di un campo: la clausola SET imposta il nuovo valore,
la clausola WHERE stabilisce il criterio di scelta della riga (o delle righe) da aggiornare.
UPDATE Elementi
SET MassaAtomica = 44.956
WHERE NumeroAtomico = 21;
UPDATE Elementi
SET PuntoEbollizione = PuntoEbollizione + 273.15
WHERE SerieChimica = 8;
Il comando DELETE FROM cancella una riga (o più righe) di una tabella secondo un criterio
stabilito con la clausola WHERE.
Il comando DELETE FROM senza la clausola WHERE elimina tutti i dati della tabella, ma ne
mantiene la struttura. Per esempio:
Come già detto a proposito della creazione delle tabelle, nell’uso pratico del
linguaggio, le operazioni di inserimento, così come quelle di modiica e di cancel-
lazione, vengono facilitate mediante l’uso di maschere video che guidano l’utente
nelle operazioni di trattamento dei dati, all’interno di un ambiente software basato
sull’uso di interfacce graiche amichevoli.
Si pensi, nel caso di Access, all’uso delle maschere e alla possibilità di manipolare
dati agendo direttamente sulla Visualizzazione Foglio dati di una tabella.
Quindi i comandi di tipo DML (Data Manipulation Language) del linguaggio SQL
rimangono nascosti all’utente che può effettuare le operazioni di manipolazione
senza conoscere la sintassi delle istruzioni.
Simbolo atomico, nome in italiano e massa atomica degli elementi aventi periodo 2.
Numero atomico, simbolo atomico, nome in italiano e massa atomica dell’elemento di periodo
5 e gruppo 18.
Tutti i dati degli elementi della serie chimica avente codice identiicativo uguale a 5 (metalli di
transizione).
SELECT *
FROM Elementi
WHERE SerieChimica = 5;
Se viene speciicato il predicato DISTINCT le righe duplicate nella tabella risultante sono ridotte a
una. Per esempio, se si desidera ottenere l’elenco di tutti i gruppi degli elementi, senza duplicati,
si deve usare il predicato Distinct prima dell’indicazione dell’attributo.
La presenza del predicato Distinct
SELECT DISTINCT Gruppo
in un comando Select impone che
FROM Elementi;
una riga sia inclusa nella tabella
risultante solo se non c’è un’altra
riga con gli stessi valori.
Elenco degli elementi con il valore della densità, precisando l’unità di misura nell’intestazione
della colonna.
Con il comando Select si può richiedere il calcolo di espressioni basate sugli attributi della
tabella; la tabella risultante contiene le colonne con i risultati del calcolo per ogni riga. Tali
colonne possono avere un’intestazione opportuna utilizzando la parola AS. In assenza di AS
l’intestazione della colonna con l’espressione viene costruita dal sistema in modo differente a
seconda dell’implementazione. Nel caso di Access il nome è EXPR1001 per la prima espressione,
EXPR1002 per la seconda espressione e così via.
Elenco degli elementi con punto di fusione uguale o superiore a un valore preissato.
• La selezione, che estrae da una tabella solo le righe che soddisfano a una certa
condizione, viene realizzata nel linguaggio SQL speciicando la condizione di
selezione nella clausola Where del comando Select.
Esempio
Elenco degli elementi che hanno il punto di ebollizione, in gradi Celsius, inferiore
a zero.
Selezione sulla tabella
Elementi per SELECT *
PuntoEbollizione FROM Elementi
minore di 0: estrae le WHERE PuntoEbollizione < 0;
righe che soddisfano
la condizione.
• L’operazione di proiezione, che permette di ottenere una tabella contenente
solo alcuni attributi della tabella di partenza, si realizza scrivendo l’elenco degli
attributi richiesti dopo la parola Select.
Esempio
Elenco degli elementi con la descrizione della serie chimica. Congiunzione della
tabella Elementi e della
SELECT * tabella SerieChimiche
FROM Elementi, SerieChimiche secondo gli attributi
WHERE SerieChimica = ID; comuni SerieChimica e
ID : fornisce tutti i dati
delle due tabelle.
Per maggiore chiarezza, o se ci sono attributi con il medesimo nome nelle due
tabelle, si usa la dot notation (notazione con il punto), speciicando oltre al nome
dell’attributo anche quello della tabella alla quale appartengono.
SELECT *
FROM Elementi, SerieChimiche
WHERE Elementi.SerieChimica = SerieChimiche.ID;
Nella teoria dei database questo tipo di congiunzione si chiama inner join (join
interno), con la quale si ottengono le righe per le quali i campi corrispondenti
di entrambe le tabelle sono uguali. Essa si distingue dall’outer join ( join esterno)
che individua situazioni nelle quali non tutte le righe possono essere messe in
corrispondenza.
Nella versione di SQL adottata da Access il join viene normalmente indicato come
inner join. Se la query precedente viene realizzata con Access in modalità QBE e,
successivamente, si accede alla query in visualizzazione SQL, si legge il seguente
comando: INNER JOIN definisce le
tabelle in congiunzione.
SELECT Elementi.*, SerieChimiche.* La corrispondenza
FROM SerieChimiche INNER JOIN Elementi degli attributi comuni
ON SerieChimiche.ID = Elementi.SerieChimica; è scritta nella stessa
clausola From dopo la
La sintassi adottata da Access è una delle sintassi ammesse tra gli standard di parola ON.
SQL2. Questa forma, inoltre, è in genere da preferire per chiarezza di lettura, perché
mette in evidenza le tabelle da congiungere e gli attributi che si corrispondono,
senza usare la clausola Where, che serve più propriamente a rappresentare le
condizioni nelle operazioni di selezione delle righe di una tabella.
Dagli esempi di questo paragrafo si può osservare come nel linguaggio SQL con
poche parole di codice sia possibile estrarre da una base di dati tutte le informa-
zioni che si desiderano. Le stesse operazioni, formulate attraverso le istruzioni di
CONTENUTI DIGITALI un linguaggio di programmazione tradizionale, richiederebbero un elevato numero
INTEGRATIVI di righe di codice, oltre che lunghi processi di ricerca sui ile e di confronti tra i
1. Join esterni, self- campi dei record.
join e operazioni (Le modalità operative per la gestione degli archivi di dati in linguaggio C++ sono
insiemistiche illustrate nei Contenuti digitali integrativi del Capitolo 2).
8 Funzioni di aggregazione
Nel comando Select si possono usare funzioni predeinite che agiscono sui valori
contenuti in insiemi di righe di una tabella e che, per questo motivo, si chiamano
funzioni di aggregazione.
Le funzioni di aggregazione agiscono sui valori di una colonna e restituiscono
un solo valore, per esempio il massimo o il minimo dei valori considerati. Le
righe considerate per l’aggregazione sono quelle prodotte dall’interrogazione e
quindi, in presenza di una clausola Where, sono le sole righe che soddisfano la
condizione speciicata.
Le funzioni di aggregazione possono comparire solo nelle clausole Select e Having
(che sarà spiegata nel riquadro di approfondimento alla ine del prossimo paragrafo).
La presenza di una funzione di aggregazione nella clausola Select provoca un’inte-
stazione che dipende dall’implementazione di SQL. Nel caso di Access l’intestazione
è del tipo EXPR1001, EXPR1002, ecc.
• Funzione COUNT
La funzione COUNT conta il numero di occorrenze selezionate dall’interrogazione. La sintassi del
linguaggio SQL richiede di speciicare come argomento della funzione il nome di un attributo
oppure il carattere * (asterisco). Nel primo caso sono conteggiati i valori non nulli nella colonna
considerata; nel secondo caso, la funzione Count(*) calcola il numero di righe nella tabella.
SELECT COUNT(*)
FROM Elementi;
Numero di elementi per i quali è presente un valore per l’afinità elettronica (in alcune righe i
valori sono nulli).
SELECT COUNT(AffinitàElettronica)
FROM Elementi;
SELECT COUNT(*)
FROM Elementi
WHERE Gruppo = "18";
Con le funzioni di aggregazione è opportuno rinominare le colonne con la clausola AS, per
evitare la presenza di intestazioni poco signiicative.
• Funzione SUM
La funzione SUM restituisce la somma dei valori contenuti in una colonna, speciicata come
argomento della funzione: naturalmente l’attributo utilizzato nel calcolo deve essere di tipo
numerico; i valori nulli sono trascurati dalla funzione Sum.
Somma delle masse atomiche dei metalli alcalini (identiicativo della serie chimica uguale a 1).
SELECT SUM(MassaAtomica)
FROM Elementi
WHERE SerieChimica = 1;
Somma delle masse atomiche degli elementi Na e Cl (peso formula del cloruro di sodio NaCl).
SELECT SUM(MassaAtomica)
FROM Elementi
WHERE SimboloAtomico = "Na" OR SimboloAtomico = "Cl";
Valore medio delle masse atomiche degli elementi alogeni (serie chimica con identiicativo = 9).
9 Ordinamenti e raggruppamenti
Nel comando Select si può inserire la clausola ORDER BY per ottenere i risultati
di un’interrogazione ordinati secondo i valori contenuti in una o più colonne, che
vengono speciicate di seguito alla clausola Order By. L’indicazione delle colonne
da considerare nell’ordinamento avviene precisando il nome della colonna oppure
la posizione che essa occupa nella lista che segue la parola Select: 1 per la prima
posizione, 2 per la seconda, e così via.
L’ordinamento può essere crescente (le stringhe dalla A alla Z e i numeri dal mi-
nore al maggiore) oppure decrescente (le stringhe dalla Z alla A e i numeri dal
maggiore al minore): i due tipi di ordinamento sono precisati usando le parole
chiave ASC per crescente e DESC per decrescente.
L’ordinamento è crescente per default e quindi va speciicata la parola Desc solo
se si desidera l’ordinamento decrescente.
Negli ordinamenti il valore Null compare, di norma, all’inizio delle sequenze cre-
scenti e alla ine delle sequenze decrescenti.
La clausola Order By, se presente, deve essere l’ultimo elemento di un comando
Select.
Elenco degli elementi in ordine decrescente di massa atomica e, a parità di massa atomica, in
ordine crescente di numero atomico.
SELECT NumeroAtomico, SimboloAtomico, MassaAtomica
FROM Elementi
ORDER BY MassaAtomica DESC, NumeroAtomico;
Media della massa atomica per i periodi della tavola periodica che hanno più di 8 elementi.
Gli elementi sono raggruppati per periodo e vengono selezionati i gruppi aventi più di 8 elementi.
Per ciascuno dei gruppi selezionati viene calcolata la media delle masse atomiche.
Descrizione e numero degli elementi per le serie chimiche che hanno almeno 5 elementi con punto
di fusione maggiore di 1000 °C.
La precedente query evidenzia la differenza tra le clausole Where e Having: Where pone condi-
zioni sulle singole righe della tabella, Having pone condizioni sui raggruppamenti formati con
Group By.
Per realizzare l’ultima interrogazione con Access in modalità QBE bisogna trovare il modo di
esprimere nella griglia posta nella parte inferiore della QBE sia le condizioni sui raggruppamenti
(clausola Having), sia le condizioni sulle righe (clausola Where).
Clic sul pulsante Totali nella scheda Home per attivare la riga Formula nella griglia QBE: si
deiniscono nei diversi campi i raggruppamenti, i conteggi, le somme, in base alle richieste del
problema, come illustrato di seguito.
3 4
Riassumendo, le diverse clausole che possono apparire nel comando Select sono:
SELECT Elenco espressioni da mostrare
FROM Tabelle da cui estrarre le righe
WHERE Condizioni sulle righe estratte
GROUP BY Campi da considerare per i raggruppamenti
HAVING Condizioni sui raggruppamenti
ORDER BY Ordinamenti sulle espressioni elencate nella clausola SELECT.
Questi predicati sono già stati presentati nei Contenuti digitali integrativi del Ca-
pitolo 6 per le query in modalità QBE.
Elenco degli elementi che hanno una massa atomica compresa tra 50 e 100.
Per esempio:
LIKE ‘xyz%’ Ricerca le stringhe che iniziano con ‘xyz’ e anche i soli caratteri
‘xyz’;
LIKE ‘%xyz’ Ricerca le stringhe che terminano con ‘xyz’ e anche i soli
caratteri ‘xyz’;
LIKE ‘%xyz%’ Ricerca le stringhe che contengono ‘xyz’ e anche i soli caratteri
‘xyz’;
LIKE ‘_xyz’ Ricerca le stringhe di 4 caratteri che iniscono con ‘xyz’;
Nome LIKE ‘xyz’ Equivale al confronto: Nome = ‘xyz’.
Riprendiamo il database Prontuario presentato nel Capitolo 6, che organizza le informazioni sui
farmaci, le aziende farmaceutiche e i principi attivi.
Per comodità di lettura si riporta il modello logico del database con le tre tabelle:
Principi (ATC, PrincipioAttivo)
Ditte (IDDitta, NomeDitta)
Farmaci (Codice, Denominazione, Descrizione, Prezzo, ATC, IDDitta, DataAutMin)
Le chiavi primarie sono sottolineate e le chiavi esterne sono in corsivo.
Interrogazioni
Le parentesi quadre indicano la presenza di una interrogazione parametrica con il valore da
richiedere al momento dell’esecuzione.
Denominazione, prezzo e codice della Ditta per i farmaci che sono classiicati con un principio
attivo del quale viene fornito da tastiera il codice ATC.
Denominazione, prezzo e codice della Ditta per i farmaci aventi il prezzo superiore a un valore
fornito come parametro.
Denominazione, prezzo e nome della Ditta per i farmaci che appartengono ad un principio attivo
del quale viene fornito da tastiera il codice ATC.
SELECT COUNT(*)
FROM Farmaci
WHERE IDDitta = [quale codice ditta?];
Prezzo medio dei farmaci forniti da una ditta della quale viene fornito il codice.
Codici delle ditte e numero di farmaci solo per le ditte che forniscono almeno 50 farmaci.
Nomi delle ditte e numero di farmaci solo per le ditte che forniscono meno di 30 farmaci.
Nomi delle ditte e numero di farmaci solo per le ditte che forniscono almeno 10 farmaci aventi
prezzo superiore a 20 euro.
Le informazioni relative alle attività sportive studentesche devono essere organizzate in una base di
dati. Gli studenti, dei quali si conservano le informazioni anagraiche, frequentano i diversi Istituti
superiori e partecipano alle manifestazioni sportive (per semplicità si suppone che ogni studente
partecipi a una sola specialità sportiva).
Si può ipotizzare che i dati sugli Istituti siano comunque inseriti nel database, anche se non ci
sono studenti che partecipano alle manifestazioni di un determinato anno scolastico.
Tra Istituto e Studente esiste un’associazione uno a molti, perché ci sono più studenti di un
istituto che partecipano alle gare e uno studente frequenta un solo istituto.
Tra Manifestazione e Studente esiste un’associazione uno a molti, perché ci sono più studenti
che partecipano a una manifestazione e uno studente (secondo le ipotesi iniziali) può iscriversi
a una sola manifestazione.
Le associazioni uno a molti si rappresentano introducendo le chiavi esterne nella tabella degli
studenti.
Interrogazioni
Le parentesi quadre indicano la presenza di una interrogazione parametrica con il valore da
richiedere al momento dell’esecuzione.
Elenco alfabetico degli studenti che partecipano a una manifestazione sportiva di cui viene fornito
il codice.
SELECT CognStud, NomeStud
FROM Studenti
WHERE CodiceManif = [codice manifestazione]
ORDER BY CognStud, NomeStud;
Un’agenzia di viaggi intende organizzare in una base di dati tutte le informazioni riguardanti la
sua attività: i viaggi o vacanze, le organizzazioni turistiche o tour operator, le nazioni o località
o città che sono destinazione dei viaggi/vacanze.
Tutte le attività proposte ai clienti sono dei pacchetti: ciascuno di essi si riferisce a un’organizzazione
turistica, e riguardano una precisa zona del mondo o nazione o città. Ci possono essere offerte di
viaggi con la stessa destinazione da parte di organizzazioni diverse.
Per esempio ci può essere una crociera nel Mediterraneo proposta dall’organizzazione turistica A,
oppure un soggiorno di una settimana a New York offerta dall’organizzazione turistica B.
Di ogni pacchetto offerto occorre conoscere modalità e prezzi; di ogni località o nazione è oppor-
tuno tenere memorizzate informazioni su condizioni climatiche, moneta, ecc.
Interrogazioni
SELECT *
FROM Pacchetti
WHERE Prezzo < [prezzo massimo];
Elenco dei soggiorni (con modalità e prezzo) relativi ad una località preissata.
Organizzazioni turistiche per le quali sono registrati nel database più di 20 pacchetti.
Per concedere il diritto di modiica sulla tabella Elementi agli utenti denominati
con User1 e User2, si deve usare il comando Grant nella forma:
GRANT UPDATE
ON Elementi
TO User1, User2;
La revoca dei permessi con annullamento dei diritti di accesso viene effettuato
con il comando REVOKE che ha una sintassi analoga a quella del comando Grant:
REVOKE UPDATE
ON Elementi
FROM User1, User2;
I permessi che possono essere concessi (o revocati) agli utenti sono indicati con
le seguenti parole chiave che vanno speciicate dopo Grant o Revoke:
ALTER per aggiungere o eliminare colonne, oppure per modiicare i tipi di dati
DELETE per eliminare righe dalle tabelle
INDEX per creare indici
INSERT per inserire nuove righe nelle tabelle
SELECT per ritrovare i dati dalle tabelle
UPDATE per cambiare i valori contenuti nelle tabelle
ALL per tutti i permessi precedenti.
I permessi con le opzioni Select e Update, nei comandi Grant e Revoke, diventano
più restrittivi speciicando, tra parentesi tonde e separati con la virgola, i nomi
delle colonne che l’utente può vedere o modiicare.
Con riferimento alla tabella degli elementi nel database del sistema periodico,
visto nei paragrai precedenti, per concedere il diritto di modiica della tempera-
tura di fusione e della densità all’utente denominato con User3, si deve usare il
comando Grant nella forma:
Linguaggio SQL 6. Quale delle segueni frasi SQL coniene una selezione?
1. Completa le frasi segueni uilizzando una tra le a. Select * From Tabella1
parole elencate alla ine della domanda. b. Select * From Tabella1, Tabella2 Where K1 = K2
c. Select A1 = A2 From Tabella1
a. Per eliminare una tabella dal database si usa il d. Select * From Tabella1 Where A1 = ‘xyz’
comando .........
b. Per modiicare i valori nelle righe di una tabella 7. Quale delle segueni frasi SQL rappresenta meglio
si usa il comando ......... una congiunzione (join)?
a. Select * From Tabella1, Tabella2 Where K1 = K2
c. Per inserire nuove tabelle nel database si usa il
b. Select A1, A2 From Tabella1
comando .........
c. Select A1, A2, K1 From Tabella1, Tabella2
d. Per aggiungere una colonna a una tabella si usa Where K1 = K2 And A1 = ‘xyz’
il comando ......... d. Select * From Tabella2 Where A1 = ‘xyz’
Insert, Select, Create Table, Update, Alter Table,
Delete, Drop Table Calcoli, ordinamenti, raggruppamenti
e comandi per la sicurezza
2. Determina il ipo di linguaggio per ciascuno dei
comandi SQL elencai nella colonna di sinistra. 8. Quali delle segueni frasi SQL sono sintaicamente
correte (V) e quali sono errate (F)?
comando ipo di linguaggio: DDL, DML,
a. Select SUM (Num1 * Num2) AS ‘Totale’
QL (Query Language)
From Tabella; VF
a. INSERT .............. b. Select Tabella Where AVG(Importo) > 100; V F
b. CREATE TABLE .............. c. Select Count (Num1) AS Conteggio
c. UPDATE .............. From Tabella Where Nome = ‘ABCD’; VF
d. ALTER TABLE .............. d. Select Nome, Num1 From Tabella
Group By Nome; VF
e. DELETE ..............
9. Quali delle segueni frasi SQL elenca il totale delle
3. Quale delle segueni frasi SQL estrae i valori di A1 fature suddivise per cliente?
nelle righe di Tabella con A2 = 5? a. Select Cliente, SUM(Importo)
a. Select A1, A2=5 From Tabella From TabellaFature Group By Importo;
b. Select A2=5 From Tabella.A1 b. Select Cliente, SUM (Importo)
c. Select A1 From Tabella Where A2 = 5 From TabellaFature Order By Cliente;
d. Select Tabella.A1 From Tabella.A2 = 5 c. Select ORDER (Cliente, Importo )
From TabellaFature;
4. Quale delle segueni frasi SQL estrae le righe di d. Select Cliente, SUM (Importo)
Tabella prive di valori in A2? From TabellaFature Group By Cliente;
a. Select ALL From Tabella Where A1 = ’ ’ 10. Quale delle segueni frasi SQL consente di otenere
b. Select * From Tabella Where A2 Is Null il nome delle cità da cui provengono più di 10
c. Select Tabella.* From Tabella Where A1 = ’ ’ studeni?
d. Select A1 From Tabella With A2 Null a. Select Studeni From Cità Group By Cità
Having COUNT(*) > 10;
5. Quale delle segueni frasi SQL rappresenta meglio b. Select Studeni From Cità Group By Cità
una proiezione? Where COUNT(*) > 10;
a. Select A1, A2 From Tabella1 Where K1 > 10 c. Select Cità From Studeni Group By Cità
b. Select * From Tabella1, Tabella2 Where K1 = K2 Having COUNT(*) > 10;
c. Select A1, A2 From Tabella1 d. Select Cità From Studeni Group By Cità
d. Select * From Tabella1 Where A1 = ‘xyz’ Where COUNT(*) > 10;
20. Elenco alfabeico con cognome, nome dei dipen- 30. Scrivere le istruzioni SQL per la creazione delle
deni e indirizzo dell’azienda dove lavorano. tabelle degli studeni, delle materie e dei doceni.
21. Elenco dei dipendeni di un’azienda (di cui viene 31. Scrivere le istruzioni SQL per la creazione della ta-
fornito il codice) con cognome, nome, reddito lordo, bella dei voi, che rappresenta il legame tra studeni
somma dei versameni di imposta. e materie, rendendo obbligatoria l’immissione del
voto e dichiarando i campi della tabella che sono
22. Per ciascuna azienda: denominazione, numero dei in corrispondenza con le tabelle degli studeni e
dipendeni, totale dei reddii. delle materie.
38. Elenco degli studeni di un docente, di cui si conosce 52. Cognome, nome e classe degli studeni per i quali
il codice. il cognome inizia con la letera R.
39. Elenco delle materie insegnate nella scuola, con 53. Cognome e nome degli studeni di una data classe
descrizione della materia e dei dai dei doceni che che hanno voi compresi tra i valori di 7,5 e 10 in
la insegnano. una materia fornita come parametro.
54. Elenco alfabeico dei doceni con la media dei voi
Funzioni di aggregazione, ordinameni, raggruppameni assegnai per i quali la media è superiore a 5.
40. Media dei voi di Inglese di uno studente di cui si
55. Elenco con cognome e nome degli studeni di
conosce il nome.
una determinata classe che hanno il voto minimo
41. Numero degli studeni di una classe. inferiore a 4.
56. Elenco con cognome e nome degli studeni di una
42. Numero degli studeni della scuola.
determinata classe che hanno il voto massimo
43. Miglior voto di Matemaica nella classe terza. superiore a 7.
44. Miglior voto e peggior voto di uno studente di cui 57. Elenco dei doceni, con la materia di insegnamento,
si conosce il codice. che hanno svolto più di 2 prove.
45. Elenco dei voi otenui da uno studente di cui si 58. Descrizione delle materie nelle quali sono state
conosce il codice. L’elenco, con descrizione della efetuate più di 10 prove.
materia, data e voto, deve essere ordinato per 59. Cognome e nome degli studeni che hanno più di
materia e data. 10 prove.