Basi di Dati

Click here to load reader

  • date post

    17-Jan-2016
  • Category

    Documents

  • view

    27
  • download

    0

Embed Size (px)

description

Basi di Dati. SQL-92 Concetti Avanzati. versione 2.0. Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina). SQL-92 >> Sommario. Concetti Avanzati. Raggruppamenti Clausole GROUP BY e HAVING Forma Generale della SELECT Nidificazione - PowerPoint PPT Presentation

Transcript of Basi di Dati

  • Basi di DatiSQL-92 Concetti Avanzativersione 2.0Questo lavoro concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

    G. Mecca - [email protected] - Basi di Dati

  • Concetti AvanzatiRaggruppamentiClausole GROUP BY e HAVINGForma Generale della SELECTNidificazioneUso nel DML e DDLNidificazione, Viste e Potere EspressivoEsecuzione di una Query SQLSQL-92 >> Sommario

    G. Mecca - [email protected] - Basi di Dati

  • Interrogazioni con RaggruppamentiNucleo della SELECTSELECT, FROM, [WHERE]Clausola aggiuntiva[ORDER BY]Ulteriori clausole aggiuntive[GROUP BY][HAVING]SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGGROUP BYoperatore di raggruppamentoSintassiGROUP BY Semanticaraggruppamento della tabelladivisione in gruppi delle ennupleraggruppamento sulla base dei valori comuni per gli attributi di raggruppamentoSQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiStudentiEsempio: raggruppamento della tabella studenti per ciclo (GROUP BY ciclo)

    matrcognomenomecicloannorelatore111RossiMariolaurea tr. 1null222NeriPaololaurea tr.2null333RossiMarialaurea tr.1null444PincoPallalaurea tr.3FT77777BrunoPasqualelaurea sp.1FT88888PincoPietrolaurea sp.1CV

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiStudentiEsempio: raggruppamento della tabella studenti per ciclo e anno (GROUP BY ciclo, anno)

    matrcognomenomecicloannorelatore111RossiMariolaurea tr. 1null333RossiMarialaurea tr.1null222NeriPaololaurea tr.2null444PincoPallalaurea tr.3FT77777BrunoPasqualelaurea sp.1FT88888PincoPietrolaurea sp.1CV

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiStudentiEsempio: raggruppamento della tabella studenti per matricola (GROUP BY matr)una ennuplaper ogni gruppo

    matrcognomenomecicloannorelatore111RossiMariolaurea tr. 1null333RossiMarialaurea tr.1null222NeriPaololaurea tr.2null444PincoPallalaurea tr.3FT77777BrunoPasqualelaurea sp.1FT88888PincoPietrolaurea sp.1CV

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGCaratteristiche dei gruppicollezioni di ennuplevalori comuni per gli attributi di raggruppam.Operazioni interessanti sui gruppifunzioni aggregativeanalisi della distribuzione di valori tra i gruppi es: numero di studenti per ciclo o per annoOLAP (On Line Analytical Processing)SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGInterrogazioni con raggruppamentoattributi di raggruppamento (nella GROUP BY)proiezioni su attributi di raggruppamento e funzioni aggregative applicate al gruppo (nella SELECT)condizioni sui gruppi (che coinvolgono funzioni aggregative) (nella HAVING)SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGEsempio: numero di studenti per cicloSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiSELECT ciclo, count(*)FROM StudentiGROUP BY ciclo;Semantica:- viene valutata la clausola FROM viene effettuato il raggruppam. secondo la GROUP BY viene valutata la clausola SELECT per ciascun gruppo (ogni gruppo contribuisce ad UNA sola ennupla del ris.)

    ciclocount(*)laurea tr.4laurea sp.2

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGEsempio: numero di studenti per ciclo (continua)SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    count(*)42

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGVincoli sintattici sulla SELECTse c una GROUP BY, solo gli attributi di raggruppamento possono comparire nella SELECTSQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGEsempio: distribuzione per anno degli studenti della laurea triennaleSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiSELECT anno, count(*) as numstudFROM StudentiGROUP BY anno;WHERE ciclo=laurea tr.

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiII passo: GROUP BY annorisultato finale:SELECT anno,count(*) as numstudI passo: WHERE ciclo=laurea tr.

    matrcognomenomecicloannorelatore111RossiMariolaurea tr. 1null333RossiMarialaurea tr.1null222NeriPaololaurea tr.2null444PincoPallalaurea tr.3FT

    annonumstud122131

    matrcognomenomecicloannorelatore111RossiMariolaurea tr. 1null333RossiMarialaurea tr.1null222NeriPaololaurea tr.2null444PincoPallalaurea tr.3FT

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGEsempio: distribuzioni delle medie,solo per i corsi con pi di 2 esaminon possibile usare la WHEREHAVING: condizioni aggregate su gruppiSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiSELECT corso, avg(voto) as votomedioFROM EsamiHAVING count(voto)>2;GROUP BY corso

    G. Mecca - [email protected] - Basi di Dati

  • Clausole GROUP BY e HAVINGSQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamentirisultato finaleEsamiI passo:raggruppamentosecondo la GROUP BY II passo:selezione dei gruppi secondola HAVINGIII passo:proiezione e rid.secondo la SELECT

    corsovotomedioPR126ASD26

    studentecorsovotolode111PR127false88888PR130false77777PR121false111INFT24false88888INFT30true222ASD30true77777ASD20false88888ASD28false

    G. Mecca - [email protected] - Basi di Dati

  • Forma Generale della SELECTForma generale della SELECTSELECT [DISTINCT] FROM [WHERE ][GROUP BY ][HAVING ][ORDER BY ]SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Forma Generale della SELECTSe la GROUP BY mancatutte le ennuple ottenute dopo la WHERE vengono considerate un unico gruppoin questo caso le funzioni aggregative producono un unico valore e non sono ammessi attributi ordinari nella SELECTNota sulla semanticatutti i valori NULL normalmente vengono raggruppati assiemeSQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Forma Generale della SELECTUna semantica operazionaleviene valutata la clausola FROMjoin o prodotti cartesiani >> unica tabellaviene valutata la clausola WHEREselezione delle ennuple della tabella viene valutata leventuale GROUP BYraggruppamento delle ennuple della tabellaviene valutata leventuale HAVINGselezione dei gruppi della tabella >>SQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Forma Generale della SELECTUna semantica operazionale (continua)viene valutata la clausola SELECTproiezioni, espressioni e funzioni aggregativeridenominazionieventuale eliminazione di duplicati viene valutata la clausola ORDER BYordinamenti finaliSQL-92 >> Concetti Avanzati >> Interrogazioni con Raggruppamenti

    G. Mecca - [email protected] - Basi di Dati

  • Forma Generale della SELECTEsempio: medie in ordine decrescente degli studenti della laurea specialistica che hanno sostenuto almeno due esamiSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiSELECT matr, cognome, nome, avg(voto)FROM Studenti JOIN Esami ON matr=studenteHAVING count(*)>=2GROUP BY matr, cognome, nome WHERE ciclo=laurea sp.ORDER BY avg(voto) DESC;

    G. Mecca - [email protected] - Basi di Dati

  • Forma Generale della SELECTSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiStudentiEsami

    matrcognomenomeciclorelat111RossiMariolaurea tr. null333RossiMarialaurea tr.null222NeriPaololaurea tr.null444PincoPallalaurea tr.FT77777BrunoPasqualelaurea sp.FT88888PincoPietrolaurea sp.CV

    studentecorsovotolode111PR127false222ASD30true111INFT24false77777PR121false77777ASD20false88888ASD28false88888PR130false88888INFT30true

    G. Mecca - [email protected] - Basi di Dati

  • Forma Generale della SELECTSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiPasso 1: FROM Studenti JOIN Esami ON matr=studente

    matrcognomenomeciclorelatstudentecorsovotolode111RossiMariolaurea tr.null111PR127false111RossiMariolaurea tr.null111INFT24false222NeriPaololaurea tr.null222ASD30true77777BrunoPasqualelaurea sp.FT77777PR121false77777BrunoPasqualelaurea sp.FT77777ASD20false88888PincoPietrolaurea sp.VC88888ASD28false88888PincoPietrolaurea sp.VC88888PR130false88888PincoPietrolaurea sp.VC88888INFT30true

    G. Mecca - [email protected] - Basi di Dati

  • Forma Generale della SELECTSQL-92 >> Concetti Avanzati >> Interrogazioni con RaggruppamentiPasso II: WHERE ciclo=laurea sp.Passo III: GROUP BY matr, cognome, nome

    matrcognomenomeciclorelatstudentecorsovotolode77777BrunoPasqualelaurea sp.FT77777PR121false77777BrunoPasqualelaurea sp.FT77777ASD20false88888PincoPietrolaurea sp.VC88888ASD28false88888PincoPietrolaurea sp.VC88888PR130false88888PincoPietrolaurea sp.VC88888INFT30true

    matrcognomenomeciclorelatstudentecorsovotolode77777BrunoPasqualelaurea sp.FT77777PR121false7