Linguaggio SQL
Prof. Giuseppe Tandoi
Linguaggio SQL
Caratteristiche generali
SQL è uno strumento per
organizzare
gestire
recuperare
dati memorizzati in DataBase organizzati su base Relazionale.
Prof. Giuseppe Tandoi
Linguaggio SQL
Caratteristiche generali
SQL è l'acronimo di
Structured
Query
Language.
SQL è un linguaggio (non procedurale) per interagire con database.
Prof. Giuseppe Tandoi
Linguaggio SQL
Caratteristiche generali
SQL è un linguaggio standard per chi deve gestire database.
Può essere considerato un
sottolinguaggio di interazione le cui dichiarazioni possono anche essere
incluse in programmi scritti in altro linguaggio (Cobol, Php, ecc.).
Prof. Giuseppe Tandoi
Linguaggio SQL
Caratteristiche generali
SQL non è
un software
un sistema di gestione di database
un linguaggio di programmazione procedurale
Prof. Giuseppe Tandoi
Linguaggio SQL
Caratteristiche generali - DBMS
DBMS = Data Base Management System
Software che controlla il database
consente le operazioni di definizione, manipolazione e
estrazione
Prof. Giuseppe Tandoi
Linguaggio SQL
Caratteristiche generali – estrazione informazioni
Processo di estrazione delle informazioni
1. DBMS riceve la richiesta SQL
2. DBMS elabora la richiesta
3. DBMS recupera i dati richiesti
4. DBMS restituisce le informazioni
Il processo di estrazione delle informazioni viene denominato QUERY.
Prof. Giuseppe Tandoi
Linguaggio SQL
Caratteristiche generali - DBMS
E' il DBMS che consente interazioni colonnaaverso l'uso del linguaggio SQL.
Prof. Giuseppe Tandoi
Linguaggio SQL
Regole generali - formato istruzione
Le istruzioni sono formate dal verbo imperativo e dai parametri e terminano con il
punto e virgola ( ; )
create table ALUNNI
( ID
Smallint,
COGNOME VARCHAR(20),
NOME
VARCHAR(20) ) ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Regole generali – definizione identificatori
Gli identificatori, cioè i nomi di Tabelle o di colonnaibuti
- sono costituiti da caratteri, cifre , carattere '_' (UnderScore)
- possono essere lunghi massimo 18 caratteri
- devono iniziare con una lettera
Prof. Giuseppe Tandoi
Linguaggio SQL
Regole generali – definizione identificatori
L'identificatore assoluto di un colonnaibuto è costituita dalla abituale notazione :
NomeTabella . Nomecolonnaibuto
Ordini.Data
Alunni.Data_di_Nascita
NomeTabella si può omettere se non vi sono di ambiguità di identificazione.
Prof. Giuseppe Tandoi
Linguaggio SQL
Regole generali – definizione costanti
La costante e' definita colonnaaverso il suo valore
*
considerata di tipo numerico intero se il valore non contiene parte frazionaria
*
considerata di tipo numerico reale se il valore presenta il punto decimale
separatore tra parte intera e parte frazionaria
*
la costante di tipo stringa è racchiusa tra singoli apici ('cost')
se la costante contiene un'apice allora deve essere racchiusa tra
doppi apici (“cost”)
La costante NULL rappresenta il concetto di valore non definito o valore non
disponibile incontrato in una colonna.
Prof. Giuseppe Tandoi
Linguaggio SQL
Definizione dei dati - DDL
DDL : Data Description Language
Sottoinsieme di istruzioni di SQL che consentono di
* definire nuove tabelle
* modificare la struttura delle tabelle
* rimuovere tabelle
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – tipi standard di dati
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – definizione nuove tabelle
CREATE TABLE NomeTabella
( nome colonna1
tipo,
nome colonna2
tipo,
...
nome colonnan
tipo) ;
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – definizione nuove tabelle
CREATE TABLE Alunni
( Id
SMALLINT
,
Cognome
VARCHAR(20),
Nome
VARCHAR(20),
Indirizzo
VARCHAR(40),
Classe
VARCHAR(10) );
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – definizione nuove tabelle - clausole
CREATE TABLE NomeTabella
( nome colonna1
tipo PRIMARY KEY,
nome colonna2
tipo UNIQUE,
nome colonna3
tipo NOT NULL,
nome colonna4
tipo AUTO_INCREMENT,
...
nome colonnan
tipo DEFAULT valore) ;
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – definizione nuove tabelle - clausole
PRIMARY KEY
dichiara la colonna come chiave primaria della tabella
UNIQUE
rende inammissibili valori uguali
NOT NULL
obbliga, in fase di manipolazione, ad indicare un valore
DEFAULT
determina il valore (costante) da proporre al momento
della creazione della
AUTO_INCREMENT
per colonna di tipo numerico; ad ogni
inserimento di una nuova riga, assegna
automaticamente un valore ottenuto incrementando un
contatore
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – definizione nuove tabelle - clausole
CREATE TABLE Alunni
( Id
SMALLINT PRIMARY KEY,
Cognome
VARCHAR(20) NOT Null,
Nome
VARCHAR(20) NOT Null,
Indirizzo
VARCHAR(40),
Classe
VARCHAR(10) NOT Null,
Citta
VARCHAR(30) DEFAULT 'Bari' );
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – definizione chiavi primarie
CREATE TABLE Alunni
( Id
SMALLINT PRIMARY KEY,
. . .
. . .,
. . .
. . .,
. . .
. . .
);
.. o in alternativa
CREATE TABLE Alunni
( Id
SMALLINT,
. . .
. . .,
. . .
. . .,
PRIMARY KEY (Id)
);
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – definizione chiavi esterne
CREATE TABLE Alunni
( Id
SMALLINT PRIMARY KEY,
. . .
. . .,
IdClasse
SMALLINT REFERENCES CLASSI(Id),
. . .
. . .
);
.. o in alternativa
CREATE TABLE Alunni
( Id
. . .
IdClasse
SMALLINT PRIMARY KEY,
. . .,
SMALLINT ,
FOREIGN KEY (IdClasse)
REFERENCES CLASSI(Id) );
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – eliminazione tabella
DROP TABLE NomeTabella ;
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – eliminazione tabella
DROP TABLE Alunni;
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – modifica struttura tabella
Aggiunta colonna
ALTER TABLE NomeTabella
ADD nome colonna tipo;
Rimozione colonna
ALTER TABLE NomeTabella
DROP nome colonna ;
Prof. Giuseppe Tandoi
Linguaggio SQL
DDL – modifica struttura tabella
Aggiunta colonna
ALTER TABLE Alunni
ADD ContattoMSN VARCHAR(50);
Rimozione colonna
ALTER TABLE Alunni
DROP Classe;
Prof. Giuseppe Tandoi
Linguaggio SQL
Manipolazione dei dati - DML
DML : Data Manipulation Language
Sottoinsieme di istruzioni di SQL che consentono di
* inserire nuove righe
* modificare il contenuto di una o più colonne
* cancellare righe
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Inserimento record
INSERT INTO NomeTabella
(colonna1, colonna2, ... , colonnan ) VALUES (val1, val2, ... , valn);
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Inserimento record
INSERT INTO NomeTabella
(colonna1, colonna2, ... , colonnan ) VALUES (val1, val2, ... , valn);
INSERT costruisce una riga di dati con la struttura e i valori dati e la aggiunge in
coda alla tabella
L’elenco dei valori della proposizione VALUES deve corrispondere, per numero e per
ordine, all’elenco delle colonne
Il tipo di dato di ciascun valore deve essere compatibile con il tipo di dato della
colonna corrispondente
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Inserimento record
INSERT INTO Alunni
(Id, Cognome, Nome, Indirizzo, Classe, Citta)
VALUES (23,'Rossi', 'Mario', 'Via Roma,12', ‘5C Sia', 'Bari' );
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Inserimento record
INSERT INTO Alunni
(Id, Cognome, Nome, Indirizzo, Classe, Citta)
VALUES (23,'Rossi', 'Mario', 'Via Roma,12', ‘5C Sia', 'Bari' );
Insert Into
Fatture
( Data, Aliquota, Iva, TotaleDocumento, Imponibile)
VALUES
( ‘2014-08-21’, 22, 110.00, 610.00, 500.00);
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Inserimento record
Nella lista delle colonne e dei valori assegnati, si può omettere di riportarne una o
più.
In tale caso, ad ogni colonna mancante, viene attribuito il valore NULL.
INSERT INTO Alunni
(Id, Cognome, Nome, Indirizzo, Classe, Citta)
VALUES (23,'Rossi', 'Mario', 'Via Roma,12', ‘5CSia', 'Bari' );
INSERT INTO Alunni
(Id, Cognome, Nome, Classe, Citta)
VALUES (23,'Rossi', 'Mario’, '5CSia', 'Bari' );
Non definita la colonna Indirizzo
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Inserimento record
Se la chiave primaria è di tipo INTEGER Auto_Increment, il valore da dare alla
colonna corrispondente non deve apparire nella lista.
INSERT INTO Alunni
(Matricola, Cognome, Nome, Indirizzo, Classe, Citta)
VALUES ( ,'Rossi', 'Mario', 'Via Roma,12', ‘5CSia', 'Bari' );
Oppure si può omettere anche la colonna.
INSERT INTO Alunni
(Cognome, Nome, Indirizzo, Classe, Citta)
VALUES ('Rossi', 'Mario’, 'Via Roma,12', '5CSia', 'Bari' );
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Modifica record
UPDATE NomeTabella
SET nome colonna = valore
WHERE CondizioneDiSelezione;
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Modifica record
UPDATE Alunni
SET Classe = '5BSia'
WHERE ID = 23;
UPDATE Alunni
SET Classe = '5BSia'
WHERE Classe = ‘4BM’;
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Elimina record
DELETE FROM NomeTabella
WHERE CondizioneDiSelezione;
Prof. Giuseppe Tandoi
Linguaggio SQL
DML – Elimina record
DELETE FROM Alunni
WHERE ID = 23;
Oppure
DELETE FROM Alunni
WHERE Alunni.Classe = '5BSia';
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
L' interrogazione al database:
 consente l'estrazione dal database delle informazioni desiderate
 produce una nuova tabella attraverso l'attivazione delle operazioni relazionali
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
Le interrogazioni al database si pongono attraverso il comando
SELECT
La struttura base del comando SELECT è
SELECT colonne
FROM tabella;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
SELECT *
DELETE FROM Alunni
FROM Alunni;
WHERE ID = 23;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
SELECT *
DELETE FROM Alunni
FROM Alunni;
WHERE ID = 23;
SELECT Alunni.Id, Alunni.Cognome, Alunni.Nome, Alunni.Indirizzo,
Alunni.Classe, Alunni.Citta
FROM Alunni;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
SELECT *
DELETE FROM Alunni
FROM Alunni;
WHERE ID = 23;
SELECT Alunni.Id, Alunni.Cognome, Alunni.Nome, Alunni.Indirizzo,
Alunni.Classe, Alunni.Citta
FROM Alunni;
SELECT Id, Cognome, Nome, Indirizzo, Classe, Citta
FROM Alunni;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
La tabella prodotta dalla interrogazione è costituita da colonne con l'intestazione
equivalente al nome dei campi
Si può far mostrare una intestazione differente utilizzando la clausola AS.
SELECT colonna AS intestazionecolonna
FROM tabella;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
SELECT Id AS Matricola, Cognome, Nome AS NomeDiBattesimo,
DELETE FROM Alunni
FROM Alunni;
WHERE ID = 23;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
La tabella prodotta dalla interrogazione può anche vedere la presenza di colonne con
valori che vengono calcolati sugli attributi presenti ed ottenuti dalla esecuzioni di
espressioni aritmetiche
SELECT espressionenumerica AS intestazionecolonna
FROM Tabella;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query Language – Interrogazione database
SELECT Numero, Data, Importo As Imponibile, Importo * 0,20 AS Iva,
DELETE FROM Alunni
Importo * 1,20 AS TotaleFattura
WHERE ID = 23;
FROM Fatture;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Selezione
Si ottiene specificando la clausola WHERE
SELECT *
FROM Tabella
WHERE CondizioneDiSelezione;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Condizioni di selezione
La Condizioni di Selezione determina la selezione delle righe
E' una espressione relazionale in cui sono confrontati una colonna ed un valore.
Il confronto è espresso da uno degli operatori relazionali:
= , > , < , <> , >= , <=
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Selezione
SELECT *
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Alunni.Citta = 'Bari';
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Condizioni di selezione
Una CondizioneDiSelezione può essere costituita da più condizioni legate tra loro
dagli operatori
AND , OR
Una CondizioneDiSelezione può essere preceduta dall'operatore
NOT
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Operatori di Selezione
SELECT *
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Alunni.Citta <> 'Bari'
AND Alunni.Classe = '5BSia';
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Operatori di Selezione
SELECT *
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Alunni.Citta <> 'Bari'
AND Alunni.Classe = '5BSia';
SELECT *
FROM Alunni
WHERE NOT (Alunni.Citta <> 'Bari'
AND Alunni.Classe = '5BSia') ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Altri operatori di relazione
Le Condizioni di Selezione si possono esprimere utilizzando altri operatori o
predicati per determinare ricerche più affinate
IN
LIKE
BETWEEN
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Altri operatori di relazione
IN
L'operatore IN confronta se il valore appartiene ad uno dei valori di una lista
definita, tra parentesi dopo la clausola In.
... WHERE Colonna IN ( valore1, Valore2, ... , Valoren);
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Operatori di Selezione
SELECT *
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Alunni.Classe IN ('3BM', '4BM', '5BSia');
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Operatori di Selezione
SELECT *
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Alunni.Classe IN ('3BM', '4BM', '5BSia');
corrisponde a
SELECT *
FROM Alunni
WHERE Alunni.Classe = '3BM'
OR Alunni.Classe = '4BM'
OR Alunni.Classe = '5BSia';
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Altri operatori di relazione
BETWEEN
L'operatore BETWEEN confronta se il valore nella colonna è incluso in un
intervallo di valori, estremi compresi.
... WHERE Colonna BETWEEN Valore1 AND Valore2 ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Operatori di Selezione
SELECT *
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Alunni.Voto BETWEEN 6 AND 8;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Altri operatori di relazione
LIKE
L'operatore LIKE confronta il valore di un colonnaibuto con un modello di stringa
contenenti caratteri caratteri jolly
*
una qualunque sequenza di caratteri
?
un carattere
... WHERE Colonna LIKE MascheraDiRicerca;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Operatori di Selezione
SELECT *
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Alunni.Cognome LIKE 'BA*';
SELECT *
FROM Alunni
WHERE Alunni.Cognome LIKE 'BA??';
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Predicati ALL e DISTINCT
SELECT ALL colonna1, colonna2, ... , colonnam
FROM Tabella
WHERE condizione;
consente di ottenere tutte le righe che soddisfano la condizione.
Il predicato ALL è considerato di default.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Predicati ALL e DISTINCT
SELECT ALL *
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Classe = '5BSia';
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Predicati ALL e DISTINCT
SELECT DISTINCT colonna
FROM Tabella
WHERE condizione;
consente di ottenere nella colonna valori non ripetuti;
vale a dire che se nella colonna appare più volte uno stesso valore, sarà riportata
una sola riga in cui questo è contenuto; è opportuno utilizzarlo per conoscere quali
siano i differenti valori presenti in una colonna
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Predicati ALL e DISTINCT
SELECT DISTINCT CittaNascita
DELETE FROM Alunni
FROM Alunni;
WHERE ID = 23;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Proiezione
Si ottiene specificando l'elenco delle colonne richieste
SELECT colonna1, colonna2, ... , colonnam
FROM Tabella;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Proiezione
SELECT Alunni.Cognome, Alunni.Nome, Alunni.Classe
DELETE FROM Alunni
FROM Alunni;
WHERE ID = 23;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Proiezione
SELECT Alunni.Cognome, Alunni.Nome, Alunni.Classe
DELETE FROM Alunni
FROM Alunni;
WHERE ID = 23;
SELECT Cognome, Nome, Classe
FROM Alunni;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Selezione di proiezione
SELECT Colonna1, Colonna2, ..., Colonnam
FROM Tabella
WHERE CondizioneDiSelezione ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Selezione di proiezione
SELECT Alunni.Cognome, Alunni.Nome, Alunni.Classe
DELETE FROM Alunni
FROM Alunni
WHERE ID = 23;
WHERE Alunni.Citta = 'Bari';
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Congiunzione
SELECT
*
FROM Tabella1, Tabella2
WHERE CondizioneDiCongiunzione ;
CondizioneDiCongiunzione : CampoChiaveEsterna = CampoChiavePrimaria
Sono combinate solo le righe per le quali si possono trovare valori uguali per le
colonne che si corrispondono (equi-join).
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Congiunzione
SELECT *
DELETE FROM Alunni
FROM Alunni, Prove
WHERE ID = 23;
WHERE Prove.IDAlunno = Alunni.ID ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Congiunzione
SELECT *
DELETE FROM Alunni
FROM Alunni, Prove
WHERE ID = 23;
WHERE Prove.IDAlunno = Alunni.ID ;
La query dell'esempio produce una tabella costituita da :
tante colonne quante sono le colonne di ciascuna delle tabelle congiunte
e
dalle sole righe aventi valori uguali per le colonne poste nella condizione di
congiunzione.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Combinazione delle operazioni relazionali
SELECT
colonna1, colonna2, ... , colonnam
FROM Tabella1, Tabella2
WHERE CondizioneDiCongiunzione
AND
CondizioneDiSelezione ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Combinazione delle operazioni relazionali
Mostrare gli esiti di tutte le prove di Inglese sostenute dagli studenti della 5BSia
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Combinazione delle operazioni relazionali
Mostrare gli esiti di tutte le prove di Inglese sostenute dagli studenti della 5BSia
SELECT Alunni.Cognome, Alunni.Nome, Prove.Data, Prove.Voto
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'INGLESE' AND Alunni.Classe = '5BSia' );
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Combinazione delle operazioni relazionali
Mostrare gli esiti di tutte le prove di Inglese sostenute dagli studenti della 5BSia
SELECT Alunni.Cognome, Alunni.Nome, Prove.Data, Prove.Voto
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'INGLESE' AND Alunni.Classe = '5BSia' );
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
Funzioni predefinite che operano sui dati contenuti nelle righe selezionate
dall'interrogazione effettuando
conteggio, determinazione del massimo o del minimo, somma, media
fra i valori di una colonna.
COUNT
SUM
MIN e MAX
AVG
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT
COUNT(colonna)
FROM Tabella
WHERE CondizioneDiSelezione ;
Restituisce il numero delle righe della tabella (solo quelle selezionate) ove si
riscontra un valore non nullo nella colonna.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT COUNT(Cognome)
FROM Alunni
WHERE Classe = '5BSia';
Mostrare il numero di alunni della 5BSia
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT COUNT(Prove.Data)
FROM Alunni,Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'INGLESE' AND Alunni.Classe = '5BSia' )
Mostrare il numero delle prove (compiti e interrogazioni) sostenute dagli alunni della
5BSia in Inglese
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT
COUNT( DISTINCT ( colonna ) )
FROM Tabella
WHERE CondizioneDiSelezione ;
Conta i valori diversi non ripetutii riscontrati nella colonna.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT COUNT( DISTINCT (CittaDiResidenza) )
FROM Alunni
WHERE Classe = '5BSia';
Mostrare il numero delle città di residenza degli alunni della 5BSia
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT
COUNT(*)
FROM Tabella
WHERE CondizioneDiSelezione ;
Restituisce il numero di tutte le righe selezionate della tabella; non sono escluse
righe con valori nulli.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT COUNT(NumeroCartaDiCredito)
FROM Correntisti;
Mostrare il numero dei correntisti titolari di carta di credito
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT COUNT(NumeroCartaDiCredito)
FROM Correntisti;
Mostra il numero dei correntisti titolari di carta di credito
SELECT COUNT(*)
FROM Correntisti;
Mostra il numero di tutti i correntisti
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT
SUM(colonna)
FROM Tabella
WHERE CondizioneDiSelezione ;
Restituisce la somma di tutti i valori presenti in tutte le righe della tabella (solo quelle
selezionate) di una specifica colonna. La colonna deve contenere dati di tipo non
numerico.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT SUM(Prezzo)
FROM LibriDiTesto
WHERE Classe = '5BSia';
Mostrare il costo totale dei libri di testo adottati per la 5BSia
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT
MAX(colonna) oppure MIN(colonna)
FROM Tabella
WHERE CondizioneDiSelezione ;
Restituisce il massimo fra i valori presenti in tutte le righe della tabella (solo quelle
selezionate) di una specifica colonna. La colonna può contenere dati di tipo non
numerico.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT MIN(Voto)
FROM Prove;
Mostrare qual è il voto minimo fra tutti quelli che sono stati registrati
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT MAX(Prove.Voto)
FROM Alunni,Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'INGLESE' AND Alunni.Classe = '5BSia' );
Mostrare qual è il massimo riportato da un alunno della 5BSia in Inglese.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT
AVG(colonna)
FROM Tabella
WHERE CondizioneDiSelezione ;
Restituisce la media fra i valori presenti in tutte le righe della tabella (solo quelle
selezionate) di una specifica colonna. Ovviamente la colonna deve contenere dati di
tipo numerico.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia'
AND Alunni.Cognome = 'Martinelli' );
Mostrare qual è la media dei voti assegnati a Martinelli della 5BSia in Matematica
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia');
Mostrare qual è la media dei voti delle prove conseguiti dagli alunni della 5BSia in
matematica.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia');
Mostrare qual è la media dei voti delle prove conseguiti dagli alunni della 5BSia in
matematica.
Prof. Giuseppe Tandoi
Linguaggio SQL
Operazioni relazionali – Funzioni di aggregazione
SELECT Prove.Voto
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia');
Mostrare i voti riportati dagli alunni della 5BSia in matematica
Prof. Giuseppe Tandoi
Linguaggio SQL
Ordinamenti
L'interrogazione mostra le righe elencate come presenti nelle tabelle da cui sono
originate.
E' possibile mostrare le righe anche secondo un differente ordine basato sui valori
presenti in una colonna (o più) specificando la clausola
ORDER BY
Si impostare un ordinamento crescente (ASCending) o decrescente (DESCending)
Prof. Giuseppe Tandoi
Linguaggio SQL
Ordinamenti
SELECT
colonna1, colonna2, ..., colonnan
FROM ...
WHERE ...
ORDER BY
colonna1 [ ASC / DESC ] ,
colonna2 [ ASC / DESC ] ... ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Ordinamenti
SELECT Prove.Data, Alunni.Cognome, Alunni.Nome, Prove.Voto
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'INGLESE' AND Alunni.Classe = '5BSia' )
ORDER BY Prove.Data DESC;
Lista delle prove (interrogazioni e compiti) di inglese svolte dagli alunni della 5BSia
ordinati per data, dalla più recente alla più remota.
Prof. Giuseppe Tandoi
Linguaggio SQL
Ordinamenti
SELECT Alunni.Cognome, Alunni.Nome, Prove.Data, Prove.Voto
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'INGLESE' AND Alunni.Classe = '5BSia' )
ORDER BY 4;
Lista delle prove (interrogazioni e compiti) di inglese svolte dagli alunni della 5BSia
ordinati in base alla quarta colonna definita nella proiezione, cioè in base al voto.
Prof. Giuseppe Tandoi
Linguaggio SQL
Ordinamenti
SELECT Alunni.Cognome, Alunni.Nome, Prove.Data, Prove.Materia, Prove.Voto
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Alunni.Classe = '5BSia' )
ORDER BY Prove.Materia, Prove.Voto DESC, Alunni.Cognome;
Lista delle prove (interrogazioni e compiti) svolte dagli alunni della 5BSia ordinati
alfabeticamente per materia, in modo decrescente per voto nell'ambito delle prove di
una stessa materia ed infine per alunno.
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti
Le funzioni di aggregazione (MIN, MAX, AVG, COUNT, SUM )condensano le
informazioni di tutta una tabella (o solo delle righe selezionate) in un unico valore.
Le funzioni di aggregazione possono operare non solo su tutta la tabella ma per
gruppi di record.
Per esempio voglio che venga mostrata :
per ciascun alunno la sua media dei voti
per ciascuna materia il numero di prove che sono state sostenute
per ciascuna classe il voto più alto registrato al suo interno
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti
Cliente
NumFatt Importo
Altomare
8
1200
Altomare
15
2000
Bellomo
3
150
Bellomo
7
1250
Bellomo
14
800
Genchi
1
100
Genchi
11
900
Lorusso
2
100
Lorusso
6
1500
Lorusso
10
500
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti
Cliente
NumFatt Importo
Altomare
8
1200
Altomare
15
2000
Bellomo
3
150
Bellomo
7
1250
Altomare
3200
Bellomo
14
800
Bellomo
2200
Genchi
1
100
Genchi
1000
Genchi
11
900
Lorusso
2100
Lorusso
2
100
Lorusso
6
1500
Lorusso
10
500
Cliente
Sum(Importo)
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti
Il raggruppamento si definisce utilizzando la clausola
GROUP BY
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti
SELECT
Colonna, FunzioneDiAggregazione(colonna)
FROM ...
GROUP BY
Colonna ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti
SELECT Cliente, Sum(Importo)
FROM Fatture
GROUP BY Cliente;
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti
Lista dei voti massimi riportati da ciascun alunno in qualunque prova.
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti
Lista dei voti massimi riportati da ciascun alunno in qualunque prova.
SELECT Alunni.Cognome, Max(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
GROUP BY Alunni.Cognome;
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti – condizioni sui raggruppamenti
Lista dei voti massimi riportati da ciascun alunno della 5BSia nelle prove di
Matematica.
SELECT Alunni.Cognome, Max(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'MATEMATICA' AND Alunni.Classe = '5BSia' )
GROUP BY Alunni.Cognome;
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti – condizioni sui raggruppamenti
Lista dei voti massimi riportati da ciascun alunno della 5BSia nelle prove di
Matematica.
SELECT Alunni.Cognome, Max(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'MATEMATICA' AND Alunni.Classe = '5BSia' )
GROUP BY Alunni.Cognome;
Il raggruppamento opera sulle righe selezionate dalla clausola WHERE
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti – condizioni sui raggruppamenti
La clausola
HAVING condizione
usata insieme a GROUP BY, consente di visualizzare le sole righe prodotte dai
raggruppamenti che soddisfano la condizione.
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti – condizioni sui raggruppamenti
La clausola
HAVING condizione
usata insieme a GROUP BY, consente di visualizzare le sole righe prodotte dai
raggruppamenti che soddisfano la condizione.
Per esempio
gli alunni con una media superiore a 6
i professionisti che hanno un compenso totale superiore a 50.000 Euro
le discipline in cui gli studenti non abbiano riportato un voto superiore a 7
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti – condizioni sui raggruppamenti
SELECT
Colonna, FunzioneDiAggregazione(colonna)
FROM ...
GROUP BY
Colonna
HAVING condizione ;
La condizione si basa sul confronto tra la funzione di aggregazione e un altro
dato. Valuta per ciascun raggruppamento il risultato della funzione di aggregazione
sul raggruppamento e l'altro dato.
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti – condizioni sui raggruppamenti
Lista degli alunni che hanno riportato come loro voto più alto, un voto maggiore di 7.
In qualunque prova di qualunque disciplina
Prof. Giuseppe Tandoi
Linguaggio SQL
Raggruppamenti – condizioni sui raggruppamenti
Lista degli alunni che hanno riportato come loro voto più alto, un voto maggiore di 7.
In qualunque prova di qualunque disciplina
SELECT Alunni.Cognome, Max(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
GROUP BY Alunni.Cognome
HAVING Max(Prove.Voto) > 7;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
La sottoquery è una normale interrogazione che viene inclusa in un'altra query nella
espressione condizionale di quella che la contiene.
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
La sottoquery è una normale interrogazione che viene inclusa in un'altra query nella
espressione condizionale di quest'ultima.
ES.
SELECT ............
FROM ......
WHERE dato >, =, <, IN
;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
La sottoquery è una normale interrogazione che viene inclusa in un'altra query nella
espressione condizionale di quest'ultima.
ES.
SELECT ............
FROM ......
WHERE dato >, =, <, IN
( SELECT ........
FROM
WHERE ........) ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
La sottoquery è una normale interrogazione che viene inclusa in un'altra query nella
espressione condizionale di quest'ultima.
ES.
SELECT ............
FROM ......
Query principale
WHERE dato >, =, <, IN
( SELECT ........
FROM
SottoQuery o Query interna
WHERE ........) ;
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
La sottoquery produce un'unica colonna in una o più righe.
Quindi la sottoquery deve essere la proiezione di un'unica colonna.
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
La sottoquery produce un'unica colonna in una o più righe.
Quindi la sottoquery deve essere la proiezione di un'unica colonna.
. . . SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia') . . .
Media dei voti di tutte le prove di matematica degli alunni della 5BSia.
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
La sottoquery produce un'unica colonna in una o più righe.
Quindi la sottoquery deve essere la proiezione di un'unica colonna.
. . . SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia') . . .
Media dei voti di tutte le prove di matematica degli alunni della 5BSia.
AVG(Prove.Voto)
6,34
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
Il valore prodotto dalla esecuzione della query interna
AVG(Prove.Voto)
6,34
è utilizzato nella espressione condizionale che definisce la selezione della query
principale
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
Alunni della 5BSia che conseguito nelle prove di Matematica almeno un voto
superiore alla media di tutte le prove.
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
Alunni della 5BSia che conseguito nelle prove di Matematica almeno un voto
superiore alla media dei voti di tutte le prove.
SELECT DISTINCT Alunni.Cognome, Alunni.Nome
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND Prove.Materia = 'Matematica'
AND Prove.Voto >
(
SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia')
);
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
SELECT DISTINCT Prove.IdAlunno
FROM Prove
WHERE Prove.Materia = 'Matematica'
AND Prove.Voto >
(
SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia')
);
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
SELECT DISTINCT Prove.IdAlunno
FROM Prove
WHERE Prove.Materia = 'Matematica'
AND Prove.Voto >
(
SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia')
);
Codici degli alunni che conseguito nelle prove di Matematica almeno un voto
superiore alla media dei voti di tutte le prove di Matematica degli alunni della
5BSia.
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
SELECT DISTINCT Prove.IdAlunno
FROM Prove
WHERE Prove.Materia = 'Matematica'
AND Prove.Voto >
(
SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia')
);
Prove.IdAlunno
3
5
2
1
7
Prof. Giuseppe Tandoi
Linguaggio SQL
Query nidificate (o sottoquery)
SELECT DISTINCT Alunni.ComuneResidenza
FROM Alunni
WHERE Alunni.ID IN
(
SELECT DISTINCT Prove.IdAlunno
FROM Prove
WHERE Prove.Materia = 'Matematica'
AND Prove.Voto >
(
SELECT AVG(Prove.Voto)
FROM Alunni, Prove
WHERE Prove.IDAlunno = Alunni.ID
AND
( Prove.Materia = 'Matematica'
AND Alunni.Classe = '5BSia')
)
);
Prof. Giuseppe Tandoi
Linguaggio SQL
Unione – operazione insiemistica
L’operazione insiemistica dell’unione viene realizzata dall’operatore UNION.
UNION opera su due tabelle compatibili (due tabelle aventi lo stesso numero di
colonne e con le colonne corrispondenti che hanno gli stessi tipi di dato)
UNION prende come input due tabelle e genera una singola tabella unita dai risultati
di query
Prof. Giuseppe Tandoi
Linguaggio SQL
Unione – operazione insiemistica
Elenco dei comuni di residenza degli alunni
SELECT DISTINCT Alunni.ComuneResidenza
FROM Alunni;
Prof. Giuseppe Tandoi
Linguaggio SQL
Unione – operazione insiemistica
Elenco dei comuni di residenza degli alunni
SELECT DISTINCT Alunni.ComuneResidenza
FROM Alunni;
Elenco dei comuni di nascita degli alunni
SELECT DISTINCT Alunni.ComuneNascita
FROM Alunni;
Prof. Giuseppe Tandoi
Linguaggio SQL
Unione – operazione insiemistica
Elenco dei comuni di residenza o di nascita degli alunni
SELECT DISTINCT Alunni.ComuneResidenza
FROM Alunni
UNION
SELECT DISTINCT Alunni.ComuneNascita
FROM Alunni;
;
Prof. Giuseppe Tandoi