Che materia stai cercando?

Anteprima

ESTRATTO DOCUMENTO

ANIMALE NOME PAESE

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

gatto tom gb

topo jerry gb

cane pluto gb

papero ciccio gb

struzzo bipbip gb

gatto tom i

topo jerry i

cane pluto i

papero ciccio i

struzzo bipbip i

gatto tom urss

topo jerry urss

cane pluto urss

papero ciccio urss

struzzo bipbip urss

Per chiarire sul risultato della query notiamo che fissata una tupla della relazione B, questa e' stata

associata a tutte le tuple della relazione A, e cosi' via per tutte le tuple della relazione B. Le colonne

invece sono banalmente la somma delle colonne di A con quelle di B. Questo risultato e' detto

"combinazione lineare".

In generale possiamo dire che l'operazione di join ottiene una relazione il cui grado e' pari alla

somma degli attributi di ogni tabella mentre la cardinalita' e' pari al prodotto delle cardinalita' di

ogni tabella.

E' interessante notare, anche se dal punto di vista del risultato non cambia alcunche', cosa avviene

se eseguiamo la query:

SELECT *

FROM b, a; [19]

PAESE ANIMALE NOME

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

gb gatto tom

i gatto tom

urss gatto tom

gb topo jerry

i topo jerry

urss topo jerry

gb cane pluto

i cane pluto

urss cane pluto

gb papero ciccio

i papero ciccio

urss papero ciccio

gb struzzo bipbip

i struzzo bipbip

urss struzzo bipbip

Il risultato solo apparentemente e' molto diverso; in realta' le due relazioni sono del tutto identiche

(e' cambiato solo l'ordine con cui si presentano le righe e le colonne ma questo dal punto di vista

relazionale e' ininfluente).

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


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