SQL - Funzioni di gruppo



Похожие документы
Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Istruzioni DML di SQL

Operazioni sui database

Interrogazioni complesse. SQL avanzato 1

Il linguaggio SQL: viste e tabelle derivate

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

SQL/OLAP. Estensioni OLAP in SQL

CONCETTO DI ANNIDAMENTO

SQL prima 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 2011/12

Il Domino Character Il domino CHARACTER permette di definire attributi che contengono un singolo carattere o stringhe di caratteri di lunghezza

Interrogazione della base di dati

Data management a.a Il linguaggio SQL

Structured Query Language. Informatica Generale - SQL Versione 1.0, aa p.1/172

Linguaggio SQL seconda parte

Il Modello Relazionale

Interrogazioni nidificate, commenti

Introduzione ai database relazionali

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

Esercizio 1. Cognome e nome:... Matricola:...

Domini Numerici Esatti (1) I domini numerici esatti permettono di definire attributi che contenegono valori esatti interi o con parte frazionaria.

SQL IL LINGUAGGIO DI INTERROGAZIONE

Il linguaggio SQL: query innestate

Il linguaggio SQL. ing. Alfredo Cozzi 1

Basi Di Dati, 09/12/2003

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Esercitazione su SQL

Biglietti e Ritardi: schema E/R

L istruzione SELECT di SQL

SQL (STRUCTURED QUERY LANGUAGE)

Il linguaggio SQL: raggruppamenti

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

SQL. Alcune note sulla definizione dei dati

Ricorsione in SQL-99. Introduzione. Idea di base

XQuery. è lo standard adottato dal W3C per la XML. - Consente di iterare sugli elementi di un documento - Consente di ristrutturare i contenuti XML

SQL PER LA DEFINIZIONE DI BASI DI DATI

Prova Scritta di Basi di Dati

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Funzioni in C. Violetta Lonati

Capitolo 4. Soluzione: Soluzione: Create domain STRING as character varying (256) default sconosciuto not null

SQL come linguaggio di interrogazione. Basi di dati. Interrogazioni SQL. Interpretazione algebrica delle query SQL

Architettura MVC-2: i JavaBeans

UTENTE (Codice, Nome, Cognome, Indirizzo, Telefono) PRESTITO (Collocazione, CodUtente, DataPrestito, DataRest)

Tipi MULTISET: accesso

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

4 SQL : Interrogazioni nidificate

Informatica per le discipline umanistiche 2 lezione 10

IL LINGUAGGIO SQL. Caratteristiche generali. Il comando Select. Le basi di dati ed il linguaggio SQL A.Lorenzi D.Rossi - ATLAS. Pag.

Basi di Dati Corso di Laura in Informatica Umanistica

Sistemi per la gestione di database: MySQL ( )

Compito Basi di Dati. Tempo concesso: 90 minuti 08 Giugno 2006 Nome: Cognome: Matricola:

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

Corso di Laboratorio di Basi di Dati

Misure. Definizione delle misure

Data warehousing con SQL Server

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Esercitazione 28 Gennaio 2013

ESAME di INFORMATICA e ARCHIVIAZIONE

Esercitazione Simulazione Compito

OSSIF WEB. Manuale query builder

Create la tabella Dipendenti:

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

SQL: definizione schema

MAX, SUM, AVG, COUNT)

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Lezione V. Aula Multimediale - sabato 29/03/2008

Compito Basi di Dati. Tempo concesso: 90 minuti 18 Gennaio 2007 Nome: Cognome: Matricola:

1. Per ogni film in cui appaiono solo attori nati prima del 1970 restituire il titolo del film.

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Elementi di Algebra Relazionale

Gli operatori relazionali

Normalizzazione. Relazionali

Basi di dati II prova intermedia 16 Marzo 2006 Compito 1

Capitolo 13. Interrogare una base di dati

ESAME di INFORMATICA e ARCHIVIAZIONE

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

Dati relazionali e XML

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

a) Si progetti uno schema concettuale Entità-Relazioni per lo scenario più sotto descritto.

ESEMPIO: RITARDI & BIGLIETTI

Транскрипт:

una funzione di gruppo permette di estrarre informazioni da gruppi di tuple di una relazione le funzioni di gruppo si basano su due concetti: partizionamento delle tuple di una relazione in base al valore di una o più colonne della relazione le colonne da usare sono specificate nella clausola GROUP BY calcolo della funzione di gruppo per ogni gruppo ottenuto dal partizionamento una funzione di gruppo ha come argomento una colonna e si applica all'insieme di valori di questa colonna, estratti dalle tuple che appartengono allo stesso gruppo 97

le funzioni di gruppo comunemente presenti sono: MAX, MIN, SUM, AVG, COUNT (alcuni sistemi includono anche STDEV e VARIANCE) tutte le funzioni di gruppo, ad accezione di COUNT, sono applicate su insiemi di valori semplici e non su insiemi di tuple, quindi hanno come argomento un nome di colonna, ed opzionalmente il qualificatore DISTINCT 98

esempio: si vuole raggruppare gli impiegati in base al numero di dipartimento e si vuole determinare il massimo stipendio di ogni gruppo risultato Dip# 10 3000,00 20 2975,00 30 2850,00 SELECT Dip#, MAX(Stipendio) FROM Impiegati GROUP BY Dip#; MAX(Stipendio) 99

la funzione COUNT può avere tre tipi di argomenti il carattere speciale '*' - in tal caso la funzione restituisce il numero di tuple presenti in un dato gruppo esempio: COUNT(*) un nome di colonna - in tal caso la funzione restituisce il numero di valori non nulli per l attributo esempio: COUNT (Stipendio) un nome di colonna preceduto dal qualificatore DISTINCT - in tal caso la funzione restituisce il numero di valori non nulli e distinti per l attributo esempio: COUNT (DISTINCT Stipendio) 100

esempio: si vuole raggruppare gli impiegati in base al numero di dipartimento e si vuole determinare il numero di impiegati per ogni dipartimento SELECT Dip#, COUNT(*) FROM Impiegati GROUP BY Dip#; risultato Dip# COUNT(*) 10 4 20 5 30 6 101

esempio: si vuole raggruppare gli impiegati in base al numero di dipartimento e si vuole determinare il numero di mansioni distinte per ogni dipartimento SELECT Dip#, COUNT(DISTINCT Mansione) FROM Impiegati GROUP BY Dip#; risultato Dip# COUNT(DISTINCT Mansione) 10 2 20 3 30 4 102

esempio: si vuole raggruppare gli impiegati in base al numero di dipartimento e si vuole determinare il numero di premi di produzione assegnati (quindi non nulli) per ogni dipartimento SELECT Dip#, COUNT(Premio_P) FROM Impiegati GROUP BY Dip#; risultato 103 Dip# COUNT(Premio_P) 10 2 20 3 30 1

per le funzioni MIN e MAX è indifferente utilizzare o meno il qualificatore DISTINCT per SUM e AVG, se l argomento è un nome di colonna - la funzione viene applicata a tutti i valori non nulli per l attributo esempio: SUM (Stipendio) un nome di colonna preceduto dal qualificatore DISTINCT - la funzione viene applicata all insieme dei valori non nulli e distinti per l attributo esempio: SUM (DISTINCT Stipendio) 104

è possibile applicare funzioni di gruppo senza partizionamento, in tal caso le funzioni saranno applicate ad un unico gruppo contenente tutte le tuple della relazione esempio: si vuole determinare il massimo stipendio risultato SELECT MAX(Stipendio) FROM Impiegati; MAX(Stipendio) 3000,00 105

in una query contenente una clausola GROUP BY, ogni tupla della relazione risultato rappresenta un gruppo di tuple della relazione su cui la query è eseguita Si consideri la seguente query: SELECT Dip#, MAX(Stipendio) FROM Impiegati GROUP BY Dip#; nell'esempio visto i gruppi sono tre: uno per ogni valore di Dip# ad ognuno di questi gruppi è applicata la funzione MAX sulla colonna Stipendio più colonne possono essere usate per definire gruppi 106 le funzioni di gruppo possono essere usate anche in presenza di join

esempio: supponiamo di voler raggruppare gli impiegati sulla base del nome del dipartimento e della mansione per ogni gruppo si vuole determinare la somma degli stipendi, quanti impiegati appartengono ad ogni gruppo e la media degli stipendi SELECT Nome_Dip, Mansione, SUM(Stipendio) AS Somma_stipendio, COUNT(*), AVG(Stipendio) FROM Dipartimenti, Impiegati WHERE Dipartimenti.Dip#=Impiegati.Dip# GROUP BY Nome_Dip, Mansione; 107

risultato Nome_Dip Mansione SUM(Stipendio) COUNT(*) AVG(Stipendio) Edilizia Civile dirigente 3000,00 1 3000,00 Edilizia Civile ingegnere 5750,00 3 1916,66 Edilizia Stradale dirigente 2850,00 1 100,00 Edilizia Stradale ingegnere 1950,00 1 1950,00 Edilizia Stradale segretaria 800,00 1 800,00 Edilizia Stradale tecnico 3100,00 3 1033,33 Ricerche dirigente 2975,00 1 2975,00 Ricerche ingegnere 2700,00 2 1350,00 Ricerche segretaria 1800,00 2 900,00 108 le colonne della relazione risultato ottenute dall'applicazione delle funzioni di gruppo sono colonne virtuali

importante restrizione: una clausola di proiezione di una query contenente la clausola GROUP BY può solo includere: una o più colonne tra le colonne che compaiono nella clausola GROUP BY funzioni di gruppo le funzioni di gruppo possono apparire in espressioni aritmetiche es. SUM(Stipendio) + SUM(Premio_P) 109

Clausola HAVING è possibile specificare condizioni di ricerca su gruppi di tuple esempio: supponiamo di essere interessati solo ai gruppi che contengono almeno due impiegati SELECT Nome_Dip, Mansione, SUM(Stipendio), FROM Dipartimenti, Impiegati COUNT(*), AVG(Stipendio) WHERE Dipartimenti.Dip#=Impiegati.Dip# GROUP BY Nome_Dip, Mansione HAVING COUNT(*) > 2; 110

Clausola HAVING risultato Nome_Dip Mansione SUM(Stipendio) COUNT(*) AVG(Stipendio) Edilizia Civile ingegnere 5750,00 3 1916,66 Edilizia Stradale tecnico 3100,00 3 1033,33 Ricerche ingegnere 2700,00 2 1350,00 Ricerche segretaria 1800,00 2 900,00 la clausola HAVING può essere una combinazione Booleana di predicati; tali predicati tuttavia possono essere solo predicati che coinvolgono funzioni di gruppo 111

112 Un modello di "esecuzione" 1 Si calcola un unica relazione a partire dalle tabelle indicate nella clausola di FROM 1 si applica la condizione di ricerca specificata nella clausola WHERE a tutte le tuple della relazione oggetto della query la valutazione avviene tupla per tupla 2 alle tuple ottenute al passo precedente, si applica il partizionamento specificato dalla clausola GROUP BY 3 ad ogni gruppo di tuple ottenuto al passo precedente, si applica la condizione di ricerca specificata dalla clausola HAVING 4 i gruppi ottenuti al passo precedente sono i gruppi di tuple che verificano la query per tali gruppi, vengono calcolate le funzioni di gruppo specificate nella clausola di proiezione della query i valori restituiti da tali funzioni costituiscono il risultato della query come indicato nella clausola di SELECT