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 attraverso 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 char(20), NOME char(20) ) ; Prof. Giuseppe Tandoi Linguaggio SQL Regole generali – definizione identificatori Gli identificatori, cioè i nomi di Tabelle o di Attributi - 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 attributo è costituita dalla abituale notazione : NomeTabella . NomeAttributo 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 attraverso 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 BOOLEAN Valore logico CHARACTER(n) Stringa di lunghezza (n) True, false N da 1 a 15000 DATE Data nella forma mm/gg/aa TIME Ora nella forma hh:mm INTEGER(p) Numero intero di precisione P P da 1 a 45 SMALLINT Numero intero (16 bit) Da -32768 a +32767 INTEGER Numero intero (32 bit) Da -2147483648 a +2147483647 DECIMAL(p,s) Numero decimale di p cifre di cui s decimali REAL Numero reale con mantissa di precisione 7 FLOAT Numero reale con mantissa di precisione 15 FLOAT(p) Numero reale con mantissa di precisione p Prof. Giuseppe Tandoi Linguaggio SQL DDL – definizione nuove tabelle CREATE TABLE NomeTabella ( nome attr1 tipo, nome attr2 tipo, ... nome attrn tipo) ; Prof. Giuseppe Tandoi Linguaggio SQL DDL – definizione nuove tabelle CREATE TABLE Alunni ( Id SMALLINT , Cognome CHAR(20), Nome CHAR(20), Indirizzo CHAR(40), Classe CHAR(10) ); 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 attributo ALTER TABLE NomeTabella ADD nome attr1 tipo; Rimozione attributo ALTER TABLE NomeTabella DROP nome attr ; Prof. Giuseppe Tandoi Linguaggio SQL DDL – modifica struttura tabella Aggiunta attributo ALTER TABLE Alunni ADD ContattoMSN Char(50); Rimozione attributo ALTER TABLE Alunni DROP Classe; Prof. Giuseppe Tandoi Linguaggio SQL DDL – definizione nuove tabelle - clausole CREATE TABLE NomeTabella ( nome attr1 tipo PRIMARY KEY, nome attr2 tipo UNIQUE, nome attr3 tipo NOT NULL, nome attr4 tipo AUTO_INCREMENT, ... nome attrn tipo DEFAULT valore) ; Prof. Giuseppe Tandoi Linguaggio SQL DDL – definizione nuove tabelle - clausole PRIMARY KEY dichiara quell'attributo come chiave primaria della tabella UNIQUE rende inammissibili valori uguali NOT NULL obbliga ad indicare un valore DEFAULT determina il valore (costante) da attribuire al momento della creazione del record in assenza di indicazione AUTO_INCREMENT per attributi di tipo numerico; assegna automaticamente il valore incrementando un contatore ad ogni inserimento di record Prof. Giuseppe Tandoi Linguaggio SQL DDL – definizione nuove tabelle - clausole CREATE TABLE Alunni ( Id SMALLINT PRIMARY KEY, Cognome CHAR(20) NOT Null, Nome CHAR(20) NOT Null, Indirizzo CHAR(40), Classe CHAR(10) NOT Null, Citta CHAR(30) DEFAULT 'Bari' ); Prof. Giuseppe Tandoi Linguaggio SQL Manipolazione dei dati - DML DML : Data Manipulation Language Sottoinsieme di istruzioni di SQL che consentono di * inserire nuovi record * modificare il contenuto dei campi dei record * cancellare record Prof. Giuseppe Tandoi Linguaggio SQL DML – Inserimento record INSERT INTO NomeTabella (nome attr1, nome attr2, ... , nome attrn ) VALUES (val1, val2, ... , valn); Prof. Giuseppe Tandoi Linguaggio SQL DML – Inserimento record INSERT INTO Alunni (Id, Cognome, Nome, Indirizzo, Classe, Citta) VALUES (23,'Rossi', 'Mario','Via Roma,12', '', 'Bari' ); Prof. Giuseppe Tandoi Linguaggio SQL DML – Modifica record UPDATE NomeTabella SET nome attr = valore WHERE CondizioneDiSelezione; Prof. Giuseppe Tandoi Linguaggio SQL DML – Modifica record UPDATE Alunni SET Classe = '5BM' WHERE ID = 23; 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; DELETE FROM Alunni WHERE Alunni.Classe = '5BM'; 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 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 = '5BM'; 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 = '5BM'; SELECT * FROM Alunni WHERE NOT (Alunni.Citta <> 'Bari' AND Alunni.Classe = '5BM') ; 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', '5BM'); 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', '5BM'); corrisponde a SELECT * FROM Alunni WHERE Alunni.Classe = '3BM' OR Alunni.Classe = '4BM' OR Alunni.Classe = '5BM'; 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 attributo 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 = '5BM'; 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. E' opportuno utilizzarlo per conoscere quali sono 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 degli attributi richiesti 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 gli attributi 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 ; La query dell'esempio produce una tabella costituita da tante colonne quanti sono gli attributi delle tabelle congiunte e dalle sole righe aventi valori uguali per gli attributi messi 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 5BM Prof. Giuseppe Tandoi Linguaggio SQL Operazioni relazionali – Combinazione delle operazioni relazionali Mostrare gli esiti di tutte le prove di Inglese sostenute dagli studenti della 5BM SELECT Alunni.Cognome, Alunni.Nome, Prove.Data, Prove.Voto FROM Alunni, Prove WHERE Prove.IDAlunno = Alunni.ID AND ( Prove.Materia = 'INGLESE' AND Alunni.Classe = '5BM' ); 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 = '5BM'; Mostrare il numero di alunni della 5BM 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 = '5BM' ) Mostrare il numero delle prove (compiti e interrogazioni) sostenute dagli alunni della 5BM 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 = '5BM'; Mostrare il numero delle città di residenza degli alunni della 5BM 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 = '5BM'; Mostrare il costo totale dei libri di testo adottati per la 5BM 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 = '5BM' ); Mostrare qual'è il massimo riportato da un alunno della 5BM 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 = '5BM' AND Alunni.Cognome = 'Martinelli' ); Mostrare qual'è la media dei voti assegnati a Martinelli della 5BM 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 = '5BM'); Mostrare qual'è la media dei voti delle prove conseguiti dagli alunni della 5bm 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 = '5BM'); Mostrare qual è la media dei voti delle prove conseguiti dagli alunni della 5bm 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 = '5BM'); Mostrare i voti riportati dagli alunni della 5 bm 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 = '5BM' ) ORDER BY Prove.Data DESC; Lista delle prove (interrogazioni e compiti) di inglese svolte dagli alunni della 5BM 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 = '5BM' ) ORDER BY 4; Lista delle prove (interrogazioni e compiti) di inglese svolte dagli alunni della 5BM 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 = '5BM' ) ORDER BY Prove.Materia, Prove.Voto DESC, Alunni.Cognome; Lista delle prove (interrogazioni e compiti) svolte dagli alunni della 5BM 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 5BM 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 = '5BM' ) GROUP BY Alunni.Cognome; Prof. Giuseppe Tandoi Linguaggio SQL Raggruppamenti – condizioni sui raggruppamenti Lista dei voti massimi riportati da ciascun alunno della 5BM 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 = '5BM' ) 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 ............ Query principale FROM ...... 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 = '5BM') . . . Media dei voti di tutte le prove di matematica degli alunni della 5BM. 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 = '5BM') . . . Media dei voti di tutte le prove di matematica degli alunni della 5BM. 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 5BM 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 5BM 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 = '5BM') ); 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 = '5BM') ); 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 = '5BM') ); Codici degli alunni della 5BM che conseguito nelle prove di Matematica almeno un voto superiore alla media dei voti di tutte le prove. 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 = '5BM') ); 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 = '5BM') ) ); Prof. Giuseppe Tandoi