Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Documenti analoghi
E possibile ordinare le righe del risultato di una interrogazione attraverso la clausola order by, a chiusura di una interrogazione.

Interrogazioni su più tabelle. Interrogazioni su più tabelle. Clausola where. Interrogazioni su più tabelle

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Operatori aggregati: COUNT

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - Funzioni Aggregate e GROUP BY

Interpretazione delle query nidificate

SQL. SQL: una visione panoramica. SQL: "storia" Definizione dei dati

Corso sul linguaggio SQL

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Il linguaggio SQL - Interrogazioni -

SQL /10/2016 Basi di dati - SQL 1

Trasparenze rielaborate da Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999 Capitolo 4: SQL-2, seconda parte.

SQL. Argomenti della lezione. Join esplicito. Interrogazioni complesse in SQL join esplicito outer join operatori aggregati interrogazioni nidificate

Basi di dati - Laboratorio

SQL Esempi. 24/10-7/11/2016 Basi di dati - SQL 1

Linguaggio SQL. studenti matricola nome cognome citta anno 11 marco bini bologna laura sicuro rimini 1984 esami codice

SQL Esempi /10/2017 Basi di dati - SQL 1

SQL - Structured Query Language

Operatori aggregati. Gli operatori di aggregazione NON sono rappresentabili in Algebra Relazionale. conteggio, minimo, massimo, media, somma

IL LINGUAGGIO SQL LE BASI

Interrogazioni in SQL SQL. Interrogazioni in SQL. Sintassi. Significato dell interrogazione. Notazione

SQL e algebra relazionale

SQL - Sottointerrogazioni correlate

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - (SELECT FROM WHERE ORDER BY)

Corso di. Basi di Dati I. 8. Esercitazioni in SQL: Interrogazioni nidificate

Tabelle esempio: Impiegato/Dipartimento

Linguaggio SQL seconda parte

Structured Query Language

Interrogazioni in SQL SQL. Interrogazioni in SQL. Cenni sull implementazione

Interrogazioni complesse. SQL avanzato 1

4.SQL QUERY. Fare una query significa fare delle ricerche sul nostro database.

Figlio Maria. Luigi. Olga Filippo Andrea Aldo Figlio Franco Olga Filippo Andrea Aldo

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

Idoneita Informatica. Sistemi per la gestione di basi di Dati

Queries su più tabelle

Monday, January 24, 2011 SQL

BASE DI DATI. Concetti trattati: Funzioni aggregate Raggruppamenti Nidificazione Viste. Informatica Umanistica Università di Pisa

SQl come DML. Angelo Chianese,, Vincenzo Moscato, Antonio Picariello,, Lucio Sansone

Corso di Basi di Dati

Lezione 7 SQL (II) Basi di dati bis Docente Mauro Minenna Pag.1

QL (Query Language) Alice Pavarani

<Nome Tabella>.<attributo>

Docente: Alberto Belussi e Carlo Combi. Lezione 4

Basi di dati. SQL: concetti base

Corso di Basi di Dati

Laboratorio di Basi di dati/web/mm e Basi di dati per Bioinformatica

Basi di Dati: Corso di laboratorio

Operatori aggregati. Un operatore aggregato è una funzione che si applica ad un insieme di tuple di una tabella

SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Principi di Progettazione del Software a.a Il linguaggio SQL. Il Linguaggio SQL

Operatori derivati dagli insiemi. Algebra Relazionale. Unione. Operatori derivati dagli insiemi

Laboratorio di Basi di dati

Basi di Dati: Corso di laboratorio

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Elementi di Informatica LB Basi di Dati. Anno accademico 2007/2008 Prof. Stefano Contadini

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

SQL: "storia" 31/05/2006 2

Il linguaggio SQL: raggruppamenti

Il linguaggio SQL: le viste

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. Raggruppamento. Raggruppamento

SQL [2] Concetti avanzati di SQL. Esempi di interrogazioni

Informatica CL Fisioterapisti. Informatica Medica Sistemi per la gestione di basi di Dati

Corso di Basi di Dati A.A. 2013/2014

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

3 SQL : Interrogazioni

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Esercizi di Informatica Documentale

SQL. SQL: "storia. Sviluppato nella metà degli anni settanta (1974) presso il laboratorio di ricerca IBM di S.Josè. Dal 1983 ca. "standard di fatto"

BASE DI DATI. Concetti trattati: Funzioni aggregate Raggruppamenti Nidificazione Viste. Informatica Umanistica Università di Pisa

Corso di Basi di Dati A.A. 2015/2016

Il linguaggio SQL: raggruppamenti

SQL. Domini. Domini elementari (predefiniti) Domini definiti dall utente (semplici, ma riutilizzabili)

E. Giunchiglia Basi di dati 1 (trasparenze basate su Atzeni, Ceri, Paraboschi, Torlone: Basi di dati, Capitolo 4) SQL SQL. Definizione dei dati in SQL

Sistemi di Elaborazione delle Informazioni

Laboratorio di. Docenti: Alberto Belussi e Carlo Combi

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

Parte IV Il linguaggio SQL

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini. CREATE TABLE, esempio

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

SQL - Structured Query Language

Linguaggi per basi di dati e SQL

Linguaggi per basi di dati. Linguaggi per basi di dati e SQL. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

Aggiornamenti e Interrogazioni

Operatori derivati dagli insiemi. Algebra Relazionale. Unione. Operatori derivati dagli insiemi

Basi di Dati. Esercitazione 1: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

SQL: le funzioni di aggregazione

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

Interrogazioni semplici

Progettazione di Sistemi Informatici

SQL terza parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2010/11

Corso sul linguaggio SQL

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Transcript:

Operatori aggregati In algebra relazionale le espressioni vengono valutate sulle singole tuple in successione. Talvolta però possono essere necessarie informazioni derivabili dall esame di tutte le tuple o di più tuple contemporaneamente. Operatori aggregati count, sum, max, min, avg Sintassi count (< * [distinct all] ListaAttributi >) <sum max min avg>([distinct all] AttrEspr) SQL prevede una serie di operatori aggregati count, sum, max, min, avg Determinare il numero degli impiegati che si chiamano Rossi select count(*) where nome= Rossi Interrogazioni con raggruppamento Gli operatori aggregati vengono applicati a tutte le righe che vengono prodotte come risultato dell interrogazione. Può essere necessario applicare l operatore separatamente ad uno o più sottoinsiemi delle righe. SQL non ammette che nella stessa target list compaiano funzioni aggregate ed espressioni a livello di riga, come il nome di un attributo. Come si potrebbe associare un singolo risultato, calcolato su tutte le righe, a un attributo che può assumere più valori, anche un valore diverso in ogni riga? Interrogazioni con raggruppamento L operatore group by specifica come suddividere le tabelle in sottoinsiemi omogenei per valore su cui valutare separatamente l operatore aggregato. Es. select Dipart, sum(stipendio) group by Dipart (calcola una somma per ogni valore assunto da Dipart) 1

Interrogazioni con raggruppamento Un interrogazione scorretta: select nome, max(reddito) from persone Di chi sarebbe il nome? La target list deve essere omogenea Un interrogazione corretta: select min(eta), avg(reddito) from persone Restituisce due valori singoli, entrambi calcolati su tutte le tuple della tabella persone Operatori aggregati e raggruppamenti Il numero di figli di ciascun padre select padre, count(*) AS NumFigli from paternita group by Padre paternita Padre Sergio Luigi Luigi Franco Franco Figlio Franco Olga Filippo Andrea Aldo Padre NumFigli Sergio 1 Luigi 2 Franco 2 Interrogazioni con raggruppamento In ogni interrogazione che usa group by, la target list può essere composta solo da un sottoinsieme degli attributi usati nella clausola group by Es. di interrogazione scorretta select Ufficio group by Dipart Poiché deve venire prodotta una sola riga per ogni valore di Dipart, e, a parità di tale valore, possono aversi diversi valori di Ufficio, il risultato dell interrogazione è indeterminato. In alcuni casi (ad es., se per l attributo non compreso nella clausola group by esiste una dipendenza funzionale dagli attributi su cui si raggruppa) la query potrebbe fornire un risultato corretto, ma per semplicità SQL lo vieta comunque. Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre = p.nome group by padre corretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre = p.nome group by padre, p.reddito 2

Condizioni sui gruppi Può essere anche necessario restringere i gruppi attraverso l applicazione di condizioni. Se le condizioni sono verificabili a livello delle singole righe, basta utilizzare la clausola where, altrimenti si aggiunge una condizione alla group by attraverso l estensione having select Dipart, sum(stipendio)as SommaStipendi from Impiegati group by Dipart having sum(stipendio) > 100 Se non si specifica group by e si usa having da solo la condizione è applicata all insieme di tutte le righe. Se la condizione non è verificata, il risultato sarà vuoto. Condizioni sui gruppi I padri i cui figli hanno un reddito medio maggiore di 25 select padre, avg(f.reddito) from persone f join paternita on figlio=nome group by padre having avg(f.reddito) > 25 Where o having? I padri i cui figli sotto i 30 anni hanno un reddito medio maggiore di 20 select padre, avg(f.reddito) from persone f join paternita on figlio = nome where eta < 30 group by padre having avg(f.reddito) > 25 Select La sintassi di select cui siamo arrivati dopo le estensioni viste è quindi: SelectSQL ::= select ListaAttributiOEspressioni from ListaTabelle [ where CondizioniSemplici ] [group by ListaAttributiDiRaggruppamento] [ having CondizioniAggregate] [ order by ListaAttributiDiOrdinamento] 3

Interrogazioni di tipo insiemistico SQL fornisce anche gli operatori di tipo insiemistico union, intersect, except (minus) con la seguente sintassi: SelectSQL {< union intersect except >[all]} SelectSQL intersect e except potrebbero anche essere derivati attraverso opportune query gli operatori insiemistici eseguono per default una eliminazione dei duplicati; all specifica di non farla gli schemi su cui si opera non devono essere identici ma avere uguale numero di attributi, con domini compatibili. La corrispondenza è per posizione. Interrogazioni di tipo insiemistico Estrarre nomi e cognomi degli impiegati union select Cognome Estrarre i cognomi degli impiegati che sono anche nomi intersect select Cognome E possibile anche realizzare clausole where in cui il confronto non avviene fra predicati semplici o fra valori, ma fra valori e insiemi di valori, appartenenti allo stesso dominio, che sono risultato di un altra interrogazione. Sorge il problema del confronto fra un valore e un insieme di valori. SQL offre 2 possibilità di estendere gli operatori di confronto al caso del confronto valore/insieme (risultato query): all specifica che il risultato del confronto è vero se è vero per tutte le righe del risultato dell interrogazione. any specifica che il risultato del confronto è vero se è vero per una qualunque riga del risultato dell interrogazione. where Dipart = any ( from Dipartimento where Città= Firenze ) Il risultato è una tabella che comprende tutte le righe di IMPIEGATO per cui il valore Dipart è uguale ad almeno uno dei valori di Nome in DIPARTIMENTO, limitatamente alle tuple per cui Città= Firenze, cioè l elenco degli impiegati che lavorano in dipartimenti con sede a Firenze. Lo stesso risultato si poteva ottenere con un join, ma così, specialmente per interrogazioni complesse, è più leggibile. 4

Nome e reddito del padre di Franco, Reddito from Persone, Paternita where Nome = Padre and Figlio = 'Franco', Reddito from Persone where Nome = (select Padre from Paternita where Figlio = 'Franco') L uso delle interrogazioni nidificate può anche eliminare la necessità degli alias. Es. select I1.Nome I1, Impiegato I2 where I1.Nome = I2. Nome and I1.Dipart = Produz and I2.Dipart <> Produz equivale a where Nome = any ( where Dipart= Produz ) and Dipart <> Produz Non tutte le interrogazioni nidificate corrispondono però ad un join from Dipartimento where Nome <> all ( select Dipart where Cognome= Rossi ) La condizione è verificata per le righe che NON contengono un certo valore, quindi non è esprimibile mediante un join, che richiede una corrispondenza fra valori. Però è equivalente a : P Nome (DIPARTIMENTO) - P Dipart (s Cognome= Rossi (IMPIEGATO))) e quindi le due query potevano essere unite da except NB: =any e <>all si possono anche scrivere in e not in Un altra equivalenza può essere evidenziata con operatori aggregati. select Dipart where Stipendio = (select max(stipendio) ) equivale a select Dipart where Stipendio >= all ( select Stipendio ) 5

Massimo e nidificazione La persona (o le persone) con il reddito massimo from persone where reddito =(select max(reddito) from persone) Interpretazione delle query nidificate Per analizzare il risultato di una interrogazione nidificata si può supporre di valutare prima il risultato dell interrogazione nidificata e poi quella della interrogazione che la contiene. Questo migliora anche l efficienza, in quanto l interrogazione nidificata viene eseguita una sola volta. Talvolta però esiste un riferimento tramite variabile (passaggio di binding) fra l interrogazione nidificata e quella che la contiene. In questo caso bisogna usare la definizione procedurale di query, che calcola il prodotto cartesiano fra le tabelle e poi verifica la condizione where separatamente per ogni riga. Quindi per ogni riga della query esterna si valuta prima la query nidificata per poi calcolare il predicato a livello di riga sulla query esterna. Le variabili SQL sono utilizzabili solo nella query in cui sono definite o nell ambito di una query nidificata al suo interno. Se due query sono allo stesso livello non possono condividere variabili. exists è un operatore logico applicabile a query nidificate. Restituisce vero se la query dà un risultato non nullo, falso se è nullo. E utilizzabile in modo significativo solo se esiste un passaggio di binding fra interrogazione esterna e interrogazione nidificata. Le persone che hanno almeno un figlio from Persone where exists ( from Paternita where Padre = Nome) or exists ( from Maternita where Madre = Nome) 6

exists from Persona P where exists ( from Persona P1 where P1.Nome = P.Nome and P1.Cognome = P.Cognome and P1.Cfiscale <> P.CFiscale) In questo caso non è possibile eseguire prima la query nidificata, in quanto è indeterminata se non si risolve il riferimento. Quindi per ogni riga dell interrogazione esterna dovrà essere valutata l interrogazione nidificata. Costruttore di tuple Quando esiste un uguaglianza fra un insieme di attributi è possibile sintetizzare la query inserendo gli attributi all interno di una parentesi tonda. Es. Select * from Persona P where (Nome, Cognome) in (, Cognome from Persona Q where P.CFiscale <> Q.CFiscale) 7