...

Access

by user

on
Category: Documents
16

views

Report

Comments

Description

Transcript

Access
Access: query avanzate
Marco Gribaudo
[email protected]
Query su più tabelle
• Quando vi sono delle relazioni che
intercorrono tra i record di più tabelle, è
solitamente necessario porsi domande
che utilizzino campi appartenenti alle
varie tabelle.
• Per questo è possibile creare Query che
lavorino su più tabelle
contemporaneamente
Query su più tabelle (II)
• Quando si specificano più tabelle in una
Query, viene operato il prodotto
cartesiano tra i record delle tabelle.
• Ogni record della prima tabella, viene
affiancato da ogni record della seconda.
• Se la prima tabella ha m record e la
seconda ne ha n, vengono generati nxm
record!
Filtrare su campi
corrispondenti
• Se vi sono filtri sulle righe e sulle
colonne di entrambe le tabelle, vengono
prodotti record costituiti unicamente
dalle combinazioni dei record delle
tabelle filtrate.
• Uno dei filtri più comuni che si specifica
è quello di chiedere che il campo di un
record sia uguale ad un campo
dell’altro.
Filtrare su campi corrispondeni
• Inoltre i campi che si(II)
chiede essere uguali
sono solitamente la chiave interna di una
tabella con una chiave esterna dell’altra.
• Ad esempio possiamo avere:
– Un archivio delle città, ognuna con associato un
codice.
– Un archivio di indirizzi, dove al posto del nome
della città c’è solamente il codice.
– Per ottenere l’indirizzo completo, occorre
comporre le due tabelle e tenere solamente i
record dove i codici sono uguali!
Join di tabelle
• L’operazione di filtrare su chiavi uguali
viene chiamata Join.
• Siccome tale operazione è molto
comune, esistono delle tecniche che ne
ottimizzano il funzionamento.
• Tali ottimizzazioni vengono attivate
solamente se l’utente specifica in modo
diverso le operazioni di Join.
Join di tabelle (II)
• In Access le operazioni di Join si
specificano trascinando il campo di una
tabella su quello collegato di un’altra.
• I collegamenti vengono rappresentati
mediante frecce che uniscono le due
tabelle.
• Vi possono essere più tabelle, ed anche
più operazioni di Join!
Join di tabelle (III)
• Quando sono state stabilite delle relazioni
nell’apposita maschera, Access aggiunge
automaticamente il collegamento quando si
selezionano tabelle correlate.
• Access aggiunge automaticamente la
relazione anche quando una tabella ha un
campo il cui nome corrisponde al nome della
chiave primaria di un’altra.
• Le relazioni possono essere selezionate
facendovi click sopra col mouse, e cancellate
con il tasto Canc.
Tipi di Join
• Esistono 3 tipi di Join diverso:
– Join simmetrico
– Join interno (o sinistro)
– Join esterno (o destro)
• I tre tipi differiscono su come operano
quando incontrano un campo
contenente una chiave nulla.
Join simmetrico
• Nel Join simmetrico vengono
considerati solamente i record di una
tabella per cui vi siano dei record
corrispondenti (con la stessa chiave)
nell’altra.
• Se un record contiene nella sua chiave
(interna od esterna) un valore che non
ha corrispondente, questo viene
scartato.
Join interni ed esterni
• In alcuni casi, si vogliono però
considerare anche i record che non
hanno un corrispondente specifico
dall’altra parte.
• Ad esempio se si fa un elenco degli
studenti con gli esami che hanno
sostenuto, si può volere includere
anche gli studenti che non hanno
sostenuto esami.
• Con un Join simmetrico questi
Join interni ed esterni (II)
• Per questo esistono i Join interni ed
esterni.
• Un Join interno considera tutti i record
della prima tabella, a cui collega (se
possibile) quelli della seconda.
• Un Join esterno considera tutti i record
della seconda, a cui associa (se
possibile) quelli della prima.
Join interni ed esterni (III)
• Es.:
• Studenti INNER JOIN Corsi
– Tutti gli studenti (anche quelli che non
sostenuto esami), e gli esami che hanno
eventualmente sostenuto.
• Studenti OUTER JOIN Corsi
– Tutti gli esami (Anche quelli che non sono
stati sostenuti da alcuno studente), e gli
studenti che li hanno eventualmente
sostenuti.
Join interni ed esterni
• I Join interni ed esterni sono simmetrici:
• Studenti INNER JOIN Corsi =
Corsi OUTER JOIN Studenti
• Corsi INNER JOIN Studenti =
Studenti OUTER JOIN Corsi.
Query di eliminazione
• Permettono di cancellare i record dalle
tabelle.
• Sono come le Query di selezione, ma in
questo caso i record selezionati
vengono cancellati.
Query di eliminazione (II)
• La riga “elimina” determina se il campo
serve a stabilire quali record cancellare
(dove) o indica se il record di quella
tabella debba essere cancellato (da).
• La cancellazione avviene quando si
preme !, mentre andando in
visualizzazione foglio dati si possono
sapere i record che verranno eliminati.
• L’operazione di cancellazione non si
può annullare!
Query di aggiornamento
• Permettono di modificare i valori dei
record selezionati.
• Nella riga “aggiorna” si inseriscono le
espressioni che calcolano i nuovi valori
da assegnare ai campi corrispondenti.
• Le espressioni utilizzabili sono simili a
quelle viste nel caso dei campi calcolati.
Query di accodamento
• Servono per aggiungere ad una tabella,
i record selezionati da una query.
• Quando si sceglie una Query di
accodamento bisogna specificare la
tabella a cui i dati verranno aggiunti.
• Per ogni campo si selezionato nella
query si può scegliere in quale campo
della tabella destinazione dovrà essere
memorizzato, attraverso la riga
“Accoda a”.
Query di creazione tabelle
• Le Query di creazione tabella, creano
una nuova tabella contenente i risultati
della query.
• Sono identiche alle Query di selezione,
con la sola differenza che all’inizio viene
chiesto il nome della tabella che si
intende creare.
Query a campi incrociati
• Le Query a campi incrociati permettono
di creare tabelle in cui il numero di
campi risulti anche esso determinato dal
risultato di una operazione di selezione.
• Sono concettualmente simili alle Query
di selezione in cui si esegue
un’operazione di raggruppamento.
Query a campi incrociati (II)
• Nella riga “campi incrociati” si
specifica se il dato debba essere:
– Intestazione riga: utilizzato per definire le
righe della tabella in uscita.
– Intestaz. Colonna: adoperato per definire
le colonne della tabella in uscita.
– Valore: determinare i valori da mettere
all’intersezione delle righe con le colonne.
Query di unione
• Le Query di unione servono ad unire in
una unica tabella i risultati di altre Query
o di altre tabelle.
• Le Query di unione non possono essere
definite graficamente, ma solamente
attraverso il linguaggio SQL.
Query di unione (II)
• Si scrive:
Select Campo, Campo… From tabella1
Union
Select Campo, … From tabella2
• Es.:
Select * From StudentiFisica
Union
Select * From StudentiChimica
Query di unione (III)
• Tabella1, Tabella2 possono essere
tanto tabelle che Query.
• I campi di tipo “memo” non possono
rientrare in una Query di unione.
• Se si vogliono selezionare tutti i campi
si utilizza *, altrimenti si specificano i
nomi dei campi, separati da virgole.
Fly UP