Title: Structured Query Language - SQL un linguaggio di definizione e manipolazione dei dati
1Structured Query Language - SQL un linguaggio di
definizione e manipolazione dei dati
- Esercitazioni del Corso di Sistemi Informativi
- Marina Mongiello
2SQL come standard
- Varie versioni con successivi miglioramenti
- SQL-1 o SQL-89
- SQL-2 o SQL-92 (entry, intermediate e full)
- SQL-3?
3La struttura base della query
- Linterrogazione è specificata in maniera
dichiarativa si specifica non il modo in cui
linterrogazione deve essere eseguita, ma le
caratteristiche del risultato che deve fornire. - Query semplici
- Select AttrExpr as Alias, AttrExpr as
Alias - From TableName as Alias, TableName as
Alias - Where condition
- Le tre parti componenti vengono chiamate target
list, from clause e where clause
4- Ciascun attributo e tabella può essere
ridenominato mediante un alias.
Select nome as nome_di _battesimo From
Impiegati Where cognomeDe Paperis
Select From Impiegati
Cosa restituisce??
Rappresenta tutti gli attributi delle tabelle
presenti nella clausola from, evitando di
elencarli
Select From Impiegati Where cognomeDe
Paperis AND nomePippo
Largomento della clausola where si basa su
condizioni composte tramite operatori logici da
predicati semplici
Select From Impiegati Where cognomeDe Paperis
5Query SQL in ACCESS
- In applicazioni sviluppate con ACCESS, le query
possono essere create - mediante la griglia di struttura grafica QBE
(query by example) - mediante la specifica in SQL
6(No Transcript)
7Esempi di query in SQL
- Di seguito riportiamo alcuni esempi di query in
linguaggio SQL facendo riferimento al database di
esempio northwind presente nellapplicazione
Microsoft Access di cui riportiamo il diagramma
delle relazioni
8(No Transcript)
9Esempio 1 Query di Selezione
Si vuole determinare il nome e il cognome degli
impiegati nati dopo il 1/1/60 e assunti dopo il
3/5/93
SELECT Impiegati.Cognome, Impiegati.Nome,
Impiegati.DataNascita, Impiegati.DataAssunzione FR
OM Impiegati WHERE (((Impiegati.DataNascita)gt1/1/1
960) AND ((Impiegati.DataAssunzione)gt5/3/1993))
SELECT Impiegati.Cognome, Impiegati.Nome,
Impiegati.DataNascita, Impiegati.DataAssunzione FR
OM Impiegati WHERE (((Impiegati.DataNascita)gt1/1/1
960) AND ((Impiegati.DataAssunzione)gt5/3/1993))
10Griglia di struttura corrispondente allesempio 1
11Codice SQL corrispondente allesempio 1
12Operatori aggregati
- In SQL è possibile utilizzare operatori per
valutare delle proprietà su insiemi di tuple -
- count ( lt distinct all
ListaAttributigt) - lt sum max min avg gt ( distinct all
ListaAttributi )
Effettua unoperazione di conteggio
Distinct elimina i duplicati All trascura solo i
valori nulli
Corrispondono alla somma, massimo, minimo, media
13Esempio 2Query con operatori aggregati
- Determinare il numero di prodotti disponibili
SELECT Count(Prodotti.IDProdotto) AS
ConteggioDiIDProdotto FROM Prodotti
14Query con raggruppamento
- E possibile dividere la tabella risultante da
una query con operatori aggregati in
sottoinsiemi, raggruppando le righe che
contengono gli stessi valori per un insieme di
attributi.
SELECT count() AS nomeAlias FROM
nomeTabella group by nomeAttributo
Operatore di raggruppamento
15Esempio 3Query con raggruppamento
Si vogliono determinare i prodotti con prezzo
mediamente maggiore di 100
- SELECT Prodotti.NomeProdotto, Avg(Prodotti.PrezzoU
nitario) AS MediaDiPrezzoUnitario - FROM Prodotti
- GROUP BY Prodotti.NomeProdotto
- HAVING (((Avg(Prodotti.PrezzoUnitario))gt100))
16Esempio 4Query con raggruppamento
Determinare i fornitori a cui sia stata ordinata
merce in quantità minore di 10 pezzi
- SELECT Prodotti.IDFornitore, Prodotti.QuantitàOrdi
nata, Avg(Prodotti.Scorte) AS MediaDiScorte - FROM Prodotti
- GROUP BY Prodotti.IDFornitore, Prodotti.QuantitàOr
dinata - HAVING (((Prodotti.QuantitàOrdinata)lt10))
17Tipi di Join
- Join interno
- produce un risultato nel quale le righe sono
tutte e sole quelle ottenibili dalle righe delle
due tabelle di origine, in cui i valori delle
colonne in comune sono uguali - Join esterno
- esterno sinistro ( rispettivamente destro)
- include tutti i record della tabella di sinistra
(rispettivamente di destra) anche se non esistono
valori corrispondenti ai record nella tabella
di destra (rispettivamente di sinistra)
18E possibile determinare il tipo di join esterno
dalle proprietà del join
19Esempio 5Query di Selezione
Si vuole determinare il prezzo massimo dei
prodotti forniti dalla società Tokyo traders.
SELECT Max(PrezzoUnitario) AS Espr1 FROM
Fornitori INNER JOIN Prodotti ON
Fornitori.IDFornitore Prodotti.IDFornitore WHERE
(((Fornitori.NomeSocietà)"Tokyo Traders"))
20Query nidificate
- Largomento della clausola where puo essere a
sua volta il risultato dellesecuzione di una
interrogazione. Si assume che lespressione che
compare nel confronto sia rappresentata dal nome
di un attributo - E possibile in tal caso usare gli operatori di
confronto ,lt,gt,gt,lt.
21Esempio 6 Query nidificate
Determinare i prodotti al di sopra del prezzo
medio
- SELECT Prodotti.NomeProdotto, Prodotti.PrezzoUnita
rio - FROM Prodotti
- WHERE (((Prodotti.PrezzoUnitario)gt(SELECT
AVG(PrezzoUnitario) From Prodotti))) - ORDER BY Prodotti.PrezzoUnitario DESC
22Query di inserimento
- Possono essere inserite singole righe allinterno
delle tabelle - insert into Nometabella Lista Attributi ltvalues
(ListadiValori SelctSQL)gt - Oppure insiemi di righe come risultato di una
precedente selezione
23Esempi 7,8Inserimento di righe
INSERT INTO Prodotti ( NomeProdotto,
PrezzoUnitario ) values (NuovoProdotto,10)
- INSERT INTO Prodotti ( NomeProdotto,
PrezzoUnitario ) - SELECT Prodotti.IDCategoria, Prodotti.PrezzoUnitar
io - FROM Prodotti
- WHERE (((Prodotti.IDCategoria)1) AND
((Prodotti.PrezzoUnitario)gt10))
24Aggiornamento di righe
- E possibile agiornare una o piu righe mediante
il comando update che presenta la seguente
sintassi - update NomeTabella set Attributo ltEspressione
SelectSQL nulldefaultgt,Attributo ltEspressione
SelectSQL nulldefault) where Condizione
25Esempio 9Aggiornamento di righe
- UPDATE Prodotti SET Prodotti.PrezzoUnitario 20
- WHERE (((Prodotti.PrezzoUnitario)0))
26Cancellazione di righe
- La cancellazione di righe dalle tabella è
effettuata dal comando delete, la cui sintassi è
la seguente - delete from NomeTabella where condizione
27Esempio 10Cancellazione di righe
- DELETE Prodotti.NomeProdotto,
- FROM Prodotti
- WHERE (((Prodotti.NomeProdotto)NuovoProdotto"))