Che materia stai cercando?

Anteprima

ESTRATTO DOCUMENTO

7.3 La condizione per la join (uguaglianza)

Abbiamo detto, all'inizio del paragrafo 7.2 che il risultato della join, cosi' come calcolato nella 19

non e' molto utile.

Comunemente i dati che si trovano su tabelle differenti devono essere organizzati in modo

opportuno. Un sistema molto semplice, per fare questo, consiste nella definizione di un nuovo

attributo. Con i dati del nostro esempio questo attributo potrebbe essere ottenuto da un codice

numerico avente valore di identificatore univoco tra animale e paese. Convenuto che il gatto Tom

ed il topo Jerry appartengono al paese Gb, che tutti gli altri animali appartengono al paese I, che

attualmente nessun animale si riferisce al paese Urss, introduciamo un opportuno codice che

modifica le tabelle nel modo riportato di seguito.

A

CODA ANIMALE NOME B

---- ------- ------ PAESE CODB

1 gatto tom ----- ----

1 topo jerry gb 1

2 cane pluto i 2

2 papero ciccio urss 3

2 struzzo bipbip

Tale organizzazione di dati (e analogamente sara' per RDBMS ben progettati), permette di scrivere

la query [20] il cui risultato riporta accanto ad ogni animale il giusto paese di appartenenza

La condizione specificata nella WHERE ha la funzione di escludere alcune tuple generate

dall'operazione di prodotto cartesiano. Tale condizione stabilisce l'uguaglianza tra la colonna coda

della tabella A e la colonna codb della tabella B e sfrutta un elemento di sincronizzazione

opportunamente definito.

SELECT animale, nome, paese

FROM a,b

WHERE coda = codb; [20]

ANIMALE NOME PAESE

------- ------ -----

gatto tom gb

topo jerry gb

cane pluto i

papero ciccio i

struzzo bipbip i

Per meglio chiarire le modalita' di funzionamento della [20], riportiamo il risultato della [19] sui

dati delle due tabelle dopo l'introduzione, in ciascuna di esse del codice. La costruzione della

relazione intermedia ottenuta in modo analogo a quanto fatto con il risultato della [19], e' una

tecnica che consigliamo di seguire quando non sia chiaro l'effetto di una join.

CODA ANIMALE NOME PAESE CODB

---- ------- ------- ----- ----

1 gatto tom gb 1

1 topo jerry gb 1

2 cane pluto gb 1

2 papero ciccio gb 1

2 struzzo bipbip gb 1

1 gatto tom i 2

1 topo jerry i 2

2 cane pluto i 2

2 papero ciccio i 2

2 struzzo bipbip i 2

1 gatto tom urss 3

1 topo jerry urss 3

2 cane pluto urss 3

2 papero ciccio urss 3

2 struzzo bipbip urss 3

Ritorniamo ora a considerare le tabelle delle automobili. Vogliamo ottenere un elenco che riporti

accanto ad ogni autovettura il nome della casa costruttrice. Prima di passare a scrivere il testo della

query, dobbiamo precisare che se vengono messe in relazione tabelle contenenti colonne con nomi

uguali, e questo e' il nostro caso, per evitare possibili ambiguita', dovranno essere specificati sia il

nome della tabella che quello della colonna separati dal carattere punto. Il testo della query ed il suo

risultato vengono riportati di seguito.

SELECT nome, casa

FROM modello, marche

WHERE modello.nocasa = marche.nocasa; [21]

NOME CASA

-------------------- -----------

testarossa ferrari

412 ferrari

126 fiat

panda 750 l fiat

panda 1000 s fiat

panda d diesel fiat

croma td s fiat

xyz tretre

bx 19 trd diesel citroen

cx 25 limousine citroen

cx25 trd turbods citroen

cx 25 gti turbo citroen

7.4 L’opzione (+) (solo SQL ORACLE)

Si noti ancora che il nome "de tomaso" non compare in alcuna tupla. A questo proposito si noti che

alcuni RDBMS, e questo e' il nostro caso, ammettono l'uso di una opzione che produce nella

relazione risultato, in aggiunta al risultato di cui sopra, anche i valori per cui la condizione prevista

nella WHERE non si verifica in nessuna tupla. Questa particella, il segno "+" racchiuso tra

parentesi, deve venire specificato nella condizione sull'attributo mancante di dati costituito, nel

nostro caso, dall'attributo Nocasa della relazione MODELLO.

Riportiamo, come al solito, il testo della SELECT e una parte del risultato ottenuto.

SELECT nome, casa

FROM modello, marche

WHERE modello.nocasa(+) = marche.nocasa; [22]

NOME CASA

------------------ ----------

de tomaso

testarossa ferrari

412 ferrari

126 fiat

. . . . . . .

cx25 trd turbods citroen

cx 25 gti turbo citroen

La possibilita' di scrivere una simile query, ci porta immediatamente alla successiva, che ottiene i

nomi delle case costruttrici che non producono alcun modello. Si tratta di una modifica della [22]

cui viene aggiunta una condizione suppletiva per le case aventi l'attributo Nome uguale a NULL.

Ove questo non fosse possibile, saremmo costretti a ricorrere ad una diversa scrittura, che sara'

discussa in uno dei prossimi capitoli [54].

SELECT casa

FROM modello, marche

WHERE modello.nocasa(+) = marche.nocasa

AND nome IS NULL; [23] CASA

-----------

de tomaso

7.5 La condizione per la join (non uguaglianza)

In tutti gli esempi visti finora, la condizione specificata nella WHERE era di uguaglianza; per

questo motivo alcuni autori parlano di equi-join. Non sempre pero' la condizione della join e'

costruita ricorrendo all'operatore di uguaglianza.

Nella prossima SELECT vedremo un esempio in cui il "filtro" si ottiene attraverso una condizione

diversa. Consideriamo la tabella CLASSI, e decidiamo di voler attribuire ad ogni autovettura la

classe di prezzo cui questa appartiene. Per legare le informazioni prezzo e classe dovremo effettuare

una operazione di join tra le due tabelle; la condizione di filtro alla join, si esprime in modo che il

prezzo del veicolo sia compreso tra limite inferiore e superiore di ognuna classe. Per motivi di


PAGINE

7

PESO

29.53 KB

PUBBLICATO

+1 anno fa


DETTAGLI
Esame: Informatica
Corso di laurea: Corso di laurea in economia e commercio (POMEZIA, ROMA)
SSD:
A.A.: 2013-2014

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher valeria0186 di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università La Sapienza - Uniroma1 o del prof Grande Antonio.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Informatica

Informatica - le reti e Internet
Appunto
Informatica - i fondamenti di Excel - (parte 1)
Appunto
Informatica -  le tabelle - SQL
Appunto
Informatica - i fondamenti di Excel  (parte 2)
Appunto