Estratto del documento

HAVING

pone delle condizioni sui valori aggregati cosa che non può fare la WHERE perché può avere accesso ai dati di un singolo record e non aggregati

, (incasso-giorni

sum

Selec t cittá

From vendite

Citta

By

Group L'Milano'

(Incassagiorni) atta

And

> 100

HavinG Sum 000 ,

.

È più performante mettere nella clausola HAVING solo le condizioni , (incasso-giorni

sum

Selec t cittá

sui valori aggregati e le altre condizioni nella WHERE From vendite

# ,

t Milano

WHERE

By

Group

Le condizioni relative a valori aggregati possono essere inserite solo (Incassagiorni) > 100

HavinG Sum 000

nella HAVING .

Le condizioni che insistono su tuple singole possono essere inserite

sia nella WHERE sia nella HAVING e quando possibile è meglio

spostarle nella WHERE per ragioni di performance

operatori matematici

possibile combinare gli operatori aggregati con gli operatori matematici,

É

l’uso delle formule matematiche permette di memorizzare solamente un

insieme minimale di dati risparmiando spazio

* at)

(Cricavo-costo From

SELECT vendite

Sum where"

Nel nel from

non

e

al id-cliente

tab-ore-lavorate (importa

dipendente

SELECT SELECT Store sum

from ,

,

(

10) tab-vendite

...

(1

In store

Store From

WHERE NOT AND In

2 ,

, valo

di

pie

↳ totto 10

1 2

ID ,

,

,

& Cliente)

id

(store (in124)

Where in

not

-

, id id

Store cliente

visualizza per ogni cliente l’importo

Where

trow Importo

anche

Nelle < ALL

query =

>

- massimo

st From

LECT importo

-

---

&

operatori insiemistici

# vendite tv

tab

SELECT As

from - le

tv di

Visualizza vendite

Importo cliente

WHERE ogni

All per

. del

vendite

(delle

media

alla

importo sup . Cliente)

Singolo

(Select tab-vendite tue

(importo) from

aua as

tuid

id-cliente cliente

tv2

WHERE =

. -

C ,

ALL, ANY, IN

sono utilizzati nelle espressioni condizionali , permettono di confrontare un elemento con un insieme

valore/un attributo

un almeno uno

5 ↳

ES .

→ sintassi Elemento [operatore] ANY/ALL/IN insieme di

↳ risultato query

una

↳ 2 4

L =, =...

,

, di valori

elenco

o un (7

t r a

racchiusi risultato

>

-

producono stesso

La seconda query più efficiente perché nel primo caso la sotto-

è

query viene rieseguita per ogni record della query esterna. Le

sotto-query correlate sono inefficienti !

Nel secondo caso la sotto-query viene eseguita una sola volta

Considerazioni

Le sotto-query prendono le interrogazioni in efficienti:

• va data la preferenza a query senza annidamenti

• non sempre possibile farne a meno

è

Le query annidate evitano di dover materializzare i risultati di alcune query, tuttavia in alcuni casi può essere conveniente materializzare:

• se i dati di partenza sono stabili nel tempo

• I dataset hanno grosse dimensioni

• La computazione delle sotto-query molto onerosa

è

IN E NOT IN

rallentando la query permettere

>

- Necessario per

di lavorare

all'HavinG

le condizioni per realizzare il collegamento tra tabelle

JOIN

Permette di separare la condizione clausola WHERE in due parti le condizioni di selezione vere e proprie

Esempio

→ nel where, si indicano n-1 condizioni tabelle

3 Condizioni 3-1

n -1 2

>

- =

=

Where tab1 tab

esterna

chiare tab

chiave Chiave primaria chiave

primaria 2 AND 2

= =

.

. tab

esterna 3

.

Sintassi con chiave on per distinguere JOIN e condizioni di selezione

>

- Condizione di JOIN l'insieme di due operazioni:

è

• prodotto cartesiano, l'ordine non crea problemi

• condizioni con and non crea problemi l'ordine; se ci fosse or si

Left (outer) JOIN

Con il left JOIN si aggiungono anche i dati della tab.di sx con

nessun attributo della tabella di dx con valore "NULL" E

prietariasp p)

id

id-p

>

- a

(p =

JOIN ;

LEFT As

AUTO on

a . -

.

LEFT JOIN

un Join ma vengono aggiunti anche i dati che non partecipano normalmente al Join

É

SELECT Nella tabella risultato entrano:

FROM B

JOIN

LEFT

A • le tuple di A e di B che soddisfano la

(A KEY)

ON B

KEY A B

;

= condizione A.key = B.key

.

. • Le tuple di A che non soddisfano A.key = B.key

*

L’intersezione rappresenta i

record delle due tabelle con

chiavi in comune

Left excluding (OUTER) JOIN SELECT Restituisce solo le tuple di A che non

Visualizza tutti i proprietari che >

- B soddisfano A.key = B.key

non hanno l'auto proprietari A

Asp

From (pid-p id-p)

LEFT JOIN ON

auto a

As a = .

id-P is NULL

WHERE

RIGHT (OUTER) JOIN Nella tabella risultato entrano:

• le tuple di A e B che soddisfano la condizione

A

SELECT A B A.key = B.key

key)

(A

FROM RIGHT JOIN B

B Key

ON

A = ;

·

. • Le tuple di B che non soddisfano la condizione

A.key = B.key

FULL OUTER JOIN Nella tabella risultato entrano:

SELECT

# • le tuple di A e B che soddisfano la condizione

B

A A.key = B.key

(A

BON

OUTER Key)

ROM JOIN

FULL

A B

- KEY ;

= . • Le tuple di B che non soddisfano la

condizione A.key = B.key

• Le tuple di A che non soddisfano la

condizione A.key = B.key

I

Il FULL OUTER JOIN può essere ottenuto con un escamotage

- A

SELECT LEFTJOIN ON

B KEY

FROM KEY-B

A A .

UNION

SELEG RIGHT JOIN

FROM KEY-B

B ON KeY

A

A ,

.

UNION

permette di unire il risultato di due o più query

Le due query devono avere un output compatibile:

• stesso numero di attributi in output

• Alcuni DBMS richiedi i che i tipi degli attributi corrispondenti siano compatibili

in caso di due o più record identici, solamente uni viene visualizzato (eliminazione di duplicati)

ATTENZIONE

SELECT B B

ON A KEY

JOIN Key

LEFT

A

FROM =

. . Questa query non equivalente alla prima perché viene cambiato l’ordine degli attributi e questo può dare problemi

é

UNION A

SELECT B

ON

FROM A

JOIN Key

B RIGHT Key A

= ;

. .

distinct

SELECT query

una

da

duplicati

record

eliminare

per

Serve attrn

Select attra

attra

Distinct , ...,

,

taba

From ;

Se ci sono due o record duplicati nella tabella di output solo il primo viene visualizzato, gli altri vengono eliminati

equivalente ad usare group by

É attun

attra

Attra

SELECT , ...,

,

From tab A

.

Group by attra

attra N

ater

, , ...,

Permette di capire quali sono i possibili valori che lui assumere un attributo (il dominio dell’attributo)

I Non conviene usare DISTINCT con le funzioni di aggregazione

① where

nel

Esempio Join

Visualizzate per ogni libro il titolo,il prezzo e la descrizione del formato

LIBRI

FORMATO codice

Codice

· ·

descrizione #

· cod-formal

-

·

descrizione from

titolo formato

Select libri

prezzo

,

, ,

libri

where formato

coo-format Codice

= .

. titolo

As Select

>

- F

film regista

From as as r

,

QUERY ANNIDATE

Livelli di aggregazione

sum

- BY

GROUP

-

GRANULARITÀ l'insieme delle un'unità

ad di informazione

chiavi associate (senza f

determinate attributi

da

tab

nella output

di aggregazione)

Le chiave

chiari

↳ sono

. .

la

attributi By

usati Group 2

per

ESEMPI (importa

select sum granularità

· di data

sum(importo) store

..., - : ,

tab-vendita

From

Group By data store ;

,

A

SELECT

· Granularità id-cliente

tab-vendita di data

importo Store

From ,

: ,

; >

-

aggregazione

Nessuna

Nelle tabelle dove abbiamo dei valori numerici associati a chiavi formate da più

valori ci si può porre i problema della granularità

→ l’inverso della granularità

LIVELLO è

DI DETTAGLIO più aggrego i dati, più perdo i dettagli e più aumenta la granularità delle informazioni

fine/alto dettaglio

livello di

granularità

e >

-

dettaglio

elevata/basso

granularità livello di

2

ESEMPI

① tab-vendite

from

a

Select

② (importa

Select sum

..., vendite

tab

From -

Store

By

Group ;

(store

TAB-vendite data importa

id-cliente

,

, ,

(Store ore-lavorate

data id-dipendente

Tab-ore-lavorate , ,

, ?

degli attributi

granularità

è la

Qual

· P.S. Se la chiave primaria composta da un solo attributo difficilmente ci possono essere

Per importo: store,data, id-cliente → posso unirle con un JOIN solo se le granularità sono compatibili è

problemi di granularità.

In questo caso

Per ore_lavorate: store, data, id_dipendente Non possibile perché le funzioni di aggregazione avvengono dopo il JOIN

è

→ Prima aggregare per uniformare la granularità e poi mettere in JOIN i risultati dell'aggregazione, significa che flusso standard

non può essere usato

prima di collegare le informazioni ho bisogno di uniformare la granularità

Id_cliente e id_dipendente non sono compatibili

↓ tot-importa

(importo

data sum

store data

Select store

· -

,

, ,

, → ora i singoli record delle due tabelle aggregate possono essere messi in Join, MA NON CON UNA QUERY STANDARD

tab-vendite

From By data

Group store Perché in una query standard l’operazione di join avviene prima delle operazioni di aggregazione

;

, (store

sumcorelavorate) ore-lavorate)

Select data data tot

store

· -

, , -

,

From tab-o

Anteprima
Vedrai una selezione di 5 pagine su 18
Appunti Basi di dati completi Pag. 1 Appunti Basi di dati completi Pag. 2
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Appunti Basi di dati completi Pag. 6
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Appunti Basi di dati completi Pag. 11
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Appunti Basi di dati completi Pag. 16
1 su 18
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Elisa1967 di informazioni apprese con la frequenza delle lezioni di Basi di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Milano - Bicocca o del prof Cesarini Mirko.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community