ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale...

15
ESERCITAZIONI ACCESS MS Access 2000 CREARE LE TABELLE IN SQL: Studente (Matricola , Cognome, Nome) Esame (Matricola , Materia , Voto, Data) Create table STUDENTE ( matricola char(6) primary key, nome char(40) not null, cognome char(50) not null ) Create table ESAME ( matricola char(6) references STUDENTE(matricola), materia char(30) not null, voto smallint not null check(voto >= 18 and voto <= 30), data date not null, primary key(matricola, materia) ) Struttura di riferimento:

Transcript of ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale...

Page 1: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

1

ESERCITAZIONIACCESS

MS Access 2000

CREARE LE TABELLE IN SQL:

Studente (Matricola, Cognome, Nome)

Esame (Matricola, Materia, Voto, Data)

Create table STUDENTE ( matricola char(6) primary key, nome char(40) not null, cognome char(50) not null)Create table ESAME ( matricola char(6) references STUDENTE(matricola), materia char(30) not null, voto smallint not null check(voto >= 18 and voto <= 30), data date not null, primary key(matricola, materia))

Struttura di riferimento:

Page 2: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

2

CREARE LE TABELLE IN ACCESS

Gruppo di oggettivisualizzato

Comandi dicreazione guidatarelativi al gruppodi oggetti corrente

Comandi di gestione deglioggetti esistenti Crea un nuovo oggetto, in relazione al

gruppo di oggetti corrente

Apre l’oggetto scelto, mostrandone il contenuto. Se tabella mostra i dati, se querymostra il risultato dell’esecuzione della query stessa

Apre la struttura dell’oggetto scelto. Se tabella mostra i campi e la lorodefinizione, se query mostra la frase SQL o il modulo QBE (Query By Example)

Modulo interattivo di creazione delle tabelle:

Descrivere la struttura della tabella specificandoper ogni colonna (campo):

- il nome: non deve eccedere i 64 caratteri

- il tipo di dati che essa contiene: a scelta da unmenù a tendina

- la dimensione massima (in byte) prevista per idati da inserire nella colonna

Page 3: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

3

Tipi di dati per i campi:

TestoDefault. Testo o combinazioni di testo e di numeri oppure numeri che non richiedono calcoli, come ad es. n. di telefono

Fino a 255 caratteri

Memo Testo lungo o combinazioni di testo e numeri Fino a 65535 caratteri

Numerico Dati numerici utilizzati in calcoli matematici:Byte 1 byteIntero 2 byteIntero lungo 4 bytePrecisione singola 4 bytePrecisione doppia 8 byte

Data/Ora Valori data e ora per gli anni da 100 a 9999 8 byte

Valuta Dati numerici fino a 4 cifre a destra e 15 a sinistra del separatore decimale

8 byte

ContatoreNumero (intero lungo) incrementato automaticamente di un'unità ogni volta che viene aggiunto un nuovo record ad una tabella. Non è possibile aggiornare il campo contatore

4 byte

Si/No Dati che possono assumere solo 2 valori del tipo: Si/No, True/False, On/Off

1 bit

Create table ESAME ( …. voto smallint not null check(voto >= 18 and voto <= 30), …...)

Realizzazione dei controlli di campo:

Page 4: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

4

Create table ESAME ( …. primary key(matricola, materia))

Creazione delle chiavi:Selezionare i campi che devonodiventare chiave (tenendopremuto il tasto Shift o Ctrl dellatastiera per selezioni multiple) econ i campi scelti in nerettopremere il comando CHIAVE

Creazione delle tabelle mediante SQL:2. con il comandoNuovo o Crea una queryin visualizzazionestruttura arrivare adaprire il pannello “Querydi selezione” (ModuloQBE), non occorreselezionare le tabelle

1. Attivare “Query”

3. Selezionare il comando SQL per aprireun foglio di scrittura, alternativo al moduloQBE, oppure dal menù principaleselezionare “Query/SQLspecifico/Definizione dati”

Page 5: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

5

Creazione delle tabelle mediante SQL:Comando per ritornare almodulo QBE

Foglio di scrittura perinserire la creazione delletabelle direttamente in SQL:cancellare “SELECT” escrivere il comando CreateTable con gli attributinecessari per la tabella.

Foglio di scrittura perinserire la creazione delletabelle direttamente in SQL,ottenuto utilizzanto ilcomando del menùprincipale “Query/SQLspecifico/Definizione dati”

Inserire il comando “Create Table” e salvare laquery di definizione dei dati: il foglio creato verràconservato nel gruppo delle query anche se creauna tabella. La sua esecuzione (comando Apri)provoca la creazione della tabella stessa.

ATTENZIONE: il nome della query di definizionedati deve essere DIVERSO dal nome dellatabella, altrimenti la tabella non viene creata

Creazione delle tabelle mediante SQL:

Create table ESAME ( matricola char(6) references STUDENTE(matricola), materia char(30) not null, voto smallint not null check(voto >= 18 and voto <= 30), data date not null, primary key(matricola, materia)) Da inserire successivamente struttura della

tabella mediante interfaccia grafica,comando non riconosciuto da ACCESS

Page 6: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

6

Inserimento dei dati nelle tabelle: Foglio dati

Aggiunge una riga vuota alla tabella e sipredispone all’inserimento del valore nellaprima colonna

Cliccando sulla prima colonnain corrispondenza della rigamarcata con asterisco siottiene l’aggiunta di una rigavuota di cui specificare lesingole colonne

Definizione delle associazioniCreate table ESAME ( matricola char(6) references STUDENTE(matricola), …………….)

1. Dal menu principale selezionare “Strumenti/Relazioni” e con il tasto destro sulfondo del pannello selezionare “Mostra Tabella” che permette di aprire le tabelleda collegare

2. Scegliere le tabelle e conil comando “Aggiungi”creare la base per ladefinizione delle relazioni

Page 7: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

7

Definizione delle associazioni

3. Tenendo premuto il tasto sinistro del mouse trascinare il campo “matricola”della tabella “Esame” in corrispondenza del campo “matricola” della tabella“Studente”: rilasciando il tasto del mouse si apre una nuova finestra che indicache è stata creata l’associazione tra le due tabelle attraverso il campo“matricola”

4. Definire l’integrità referenzialeed eventualmente le funzioni diaggiornamento ed eliminazionecampi correlati a catena

(on update cascade e on deletecascade sono le uniche possibiliin Access)

ATTENZIONE: Access non permetteche nel grafo compaia più di uncammino tra due tabelle, in questocaso bisogna introdurre più esemplaridella stessa tabella

Definizione delle associazioni 5. Specificare il tipo di JOINda eseguire, nell’ordine siha:

1: equi-join

2: left-join

3: right-join

In questo caso è statospecificato un left-join

Page 8: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

8

Le query in ACCESS: modulo QBE (Query by Example)1. Attivare gli oggetti Query

2. Il modulo QBE viene aperto mediante ilcomando “Nuovo/VisualizzazioneStruttura” oppure direttamente con ilcomando “Crea una query invisualizzazione Struttura”

3. Viene aperta la finestra Mostra Tabelladove selezionare le tabelle su cui lavorare

4. Alla fine della selezionedelle tabelle il modulo QBE sipresenta così

Le query in ACCESS: modulo QBE (Query by Example)Dopo aver selezionato la tabella utile perla query è necessario indicare quali sonoi campi che devono comporla, scegliendodalla tabella Studente i campi desiderati,indicando invece * per selezionarli tutti

Modalità di selezione:

- con doppio click del mouse sul campo:viene trascritto nella prima cella liberadella riga individuata da “Campo” nellagriglia QBE

- trascinamento del campo scelto in unacolonna della griglia QBE

- inserimento diretto del nome del camponella griglia QBE

Griglia QBE

Riga Ordinamento: siapre un menù a tendinacon le scelte:Crescente/Decrescente/Non Ordinato

Implementa la clausolaOrder by

Riga Mostra: spuntare la casella perottenere la visualizzazione del camponel risultato della query

Page 9: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

9

Le query in ACCESS: modulo QBE (Query by Example)Quando la query è definita si procede al salvataggio,inserendo il nome nella finestra che viene aperta

Comando per l’esecuzione della query,provoca l’apertura di una tabellacontenente i dati che rispondono allaquery corrente. La freccina a destraapre il menù a tendina con le opzioni:

- Visualizzazione struttura: apre dinuovo la finestra QBE contenente laquery corrente

- Visualizzazione foglio dati: presentala tabella con i dati ottenuti dalla query

- Visualizzazione SQL: mostral’istruzione SQL associata alla query

Le query in ACCESS: modulo QBE (Query by Example)Es. 1 - Dettagliare gli studenti e tutti gli esami che hanno sostenuto

In questo caso devono essereselezionate entrambe le tabelle, nelmodulo QBE viene immediatamenteevidenziata la relazione esistente

Page 10: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

10

Le query in ACCESS: modulo QBE (Query by Example)Es. 1 - Dettagliare gli studenti e tutti gli esami che hanno sostenuto

2. nella riga“Ordinamento”della colonna”materia”specifico“Crescente”

1. nella riga“Ordinamento”della colonna“cognome”specifico“Crescente”

SELECT Studente.matricola, Studente.cognome, Studente.nome,Esame.materia, Esame.votoFROM Studente LEFT JOIN Esame ON Studente.matricola =Esame.matricolaORDER BY Studente.cognome, Esame.materia;

Le query in ACCESS: modulo QBE (Query by Example)Es. 1a - Dettagliare gli studenti che hanno sostenuto almeno unesame

2. nella riga“Ordinamento”della colonna”materia”specifico“Crescente”

1. nella riga“Ordinamento”della colonna“cognome”specifico“Crescente”

SELECT Studente.matricola, Studente.cognome, Studente.nome,Esame.materia, Esame.votoFROM Studente INNER JOIN Esame ON Studente.matricola =Esame.matricolaORDER BY Studente.cognome, Esame.materia;

INNER JOINdeve esseremodificato “amano” in SQL

Page 11: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

11

Le query in ACCESS: modulo QBE (Query by Example)Es. 1b - Dettagliare gli studenti che non hanno sostenuto alcun esame

2. nella riga“Criteri” dellacolonna”materia”specifico “IsNull”

1. nella riga“Ordinamento”della colonna“cognome”specifico“Crescente”

SELECT Studente.matricola, Studente.cognome, Studente.nome,Esame.materia, Esame.votoFROM Studente LEFT JOIN Esame ON Studente.matricola =Esame.matricolaWHERE (((Esame.materia) Is Null))ORDER BY Studente.cognome;

Le query in ACCESS: modulo QBE (Query by Example)Es. 2 - Trovare il nome e cognome degli studenti che hanno superato l’esame di Fisicaalmeno con 25. Dettagliare anche il voto preso.

Selezionando entrambe le tabelle, nelmodulo QBE viene immediatamenteevidenziata la relazione esistente

2. nella riga “Criteri”della colonna ”materia”specifico la materia sucui filtrare i dati

1. nella riga “Criteri”della colonna “voto”specifico il valore sucui filtrare i dati, conl’operatore diconfronto >=

Page 12: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

12

Le query in ACCESS: modulo QBE (Query by Example)Es. 2 - Trovare il nome e cognome degli studenti che hanno superato l’esame di Fisicaalmeno con 25. Dettagliare anche il voto preso.

Visualizzazione SQLcome creato daAccess a partire dalmodulo BQE

Visualizzazione SQL inseritodirettamente, il modulo QBEviene riempito di conseguenza epuò essere aperto con il comandoVisualizzazione Struttura

Visualizzazione Foglio Datidel risultato

Le query in ACCESS: modulo QBE (Query by Example)Es. 3 - Dettagliare gli studenti che hanno sostenuto gli esami di Fisica o di Analisi o diTIT con votazione maggiore di 24.

Quando vengonoriempiti più campi dellariga “Criteri”l’interrogazioneconsidera le condizionisu ogni riga in AND esulle diverse righe in OR

SELECT Esame.materia, Studente.cognome, Studente.nome, Esame.votoFROM Studente LEFT JOIN Esame ON Studente.matricola = Esame.matricolaWHERE (((Esame.materia)="Fisica") AND ((Esame.voto)>24)) OR(((Esame.materia)="Analisi") AND ((Esame.voto)>24)) OR(((Esame.materia)="TIT") AND ((Esame.voto)>24))ORDER BY Esame.materia, Esame.voto;

Page 13: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

13

Le query in ACCESS: modulo QBE (Query by Example)Es. 4 - Elencare tutti gli studenti il cui cognome inizia per B

L’operatore LIKE permette di confrontare lestringhe con espressioni regolari che usano icaratteri speciali * e ?

* corrisponde a % in standard SQL

? corrisponde a _ in standard SQL

Inoltre si ricorda che la concatenazione distringhe si esegue con + invece che con ilcarattere || (doppio pipe) di standard SQL

SELECT Studente.*FROM StudenteWHERE (((Studente.cognome) Like "B*"))ORDER BY Studente.cognome;

Le query in ACCESS: le funzioni di aggregazione in QBEEs. 5 - Trovare il numero di esami sostenuti per ogni data

La query in Visualizzazione SQL

La query in Visualizzazione Foglio dati

SELECT Count(*) AS n_esami, dataFROM esameGROUP BY dataORDER BY Count(*) DESC;

Page 14: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

14

Le query in ACCESS: le funzioni di aggregazione in QBEEs. 5 - Trovare il numero di esami sostenuti per ogni data

1. L’alias (AS n_esami) deve esserespecificato indicando nome_alias:

Conteggio(*) indica l’utilizzo dellafunzione di aggregazioneCOUNT(*), nella riga formulabisogna indicare “Espressione”

2. Per attivare la riga “Formula”bisogna selezionare l’icona“sommatoria” del menù principale

3. Il menù a tendina contiene lefunzioni di aggregazione disponibili

Le query in ACCESS: le funzioni di aggregazione in QBEEs. 6 - Elencare le materie in cui almeno 5 studenti hanno conseguito un votomaggiore o uguale a 25

SELECT count(*) AS n_studenti, materiaFROM EsameWHERE voto>=25GROUP BY materiaHAVING count(*)>=5;

Bisogna deselezionare l’opzione“Mostra” per il campo “voto” che servenel where ma non deve esseremostrato nella clausola Select

Page 15: ESERCITAZIONI ACCESSxoomer.virgilio.it/lucatessore/access2xp.pdf · comando del menù principale “Query/SQL specifico/Definizione dati” Inserire il comando “Create Table”

15

Le query in ACCESS: query nidificateEs. 7 - Trovare le date in cui è stato sostenuto il maggior numero di esami

SELECT count(*) AS n_esami, dataFROM esame AS eGROUP BY dataHAVING count(*) >= all (select count(*) from esame group by data);

Il passaggio da QBE a SQL è semprepossibile, mentre il passaggio inversonon è sempre possibile, in quanto illinguaggio SQL è più potente di QBE.

Quando una query SQL che fa uso diquery nidificate viene tradotta in QBE,la traduzione riporta semplicemente iltesto dell’intera query nidificatanell’opportuna cella della riga “Criteri”

Le query in ACCESS: query nidificateEs. 8 - Per ogni materia, nome e cognome degli studenti che hanno conseguito il votopiù alto

SELECT s.*, e.materia, e.votoFROM Studente AS s LEFT JOIN Esame AS e ON s.matricola = e.matricolaWHERE (((e.voto)=(select max(voto) from esame where materia = e.materia)));