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.