Access Come creare query
Creare query QBE e SQL
Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 19 Febbraio 2023
Categoria: Microsoft Office Access Come creare query

L’oggetto query di Microsoft Access serve per interrogare il database, il termine deriva infatti dall’inglese to query che significa interrogare. Le query non sono utilizzate solo per estrarre informazioni specifiche da un database, ma anche per selezionare, ordinare, filtrare o calcolare i dati presenti in una o più tabelle nonché per creare nuove tabelle, aggregare dati da più tabelle o modificare i dati esistenti.
Una query Access si può costruire tramite un’interfaccia grafica (detta Query By Example o QBE) che ne consente l’uso anche ai principianti oppure utilizzando il linguaggio SQL (Structured Query Language) per ottenere query creabili sia con QBE che senza. Excel simula le query di Access attraverso le funzioni di database.
Il risultato di una query si chiama recordset. Curiosi? Se lo siete, leggete Access Come creare query.
Sommario Access: come creare query
- Tipi di query Access
- Operatori per query Access
- SQL
- Clausole SQL
- Query pass-throught e query di definizione dati
- Promemoria SQL
- Esempi query SQL
- Esempi query QBE
Tipi di query Access
È possibile creare query in molti modi diversi.
Cliccando la scheda Crea e poi l’icona Creazione guidata Query si hanno quattro tipi di creazione:
- query semplice
- di dettaglio è il default
- di riepilogo appare solo se è possibile fare delle funzioni di riepilogo: somma, media, min, max, conteggio
- query a campi incrociati raggruppa i dati creando un foglio più compatto e una funzione di riepilogo
- query ricerca duplicati trova doppioni in una singola tabella o query
- query ricerca dati non corrispondenti trova i record di una tabella non collegati a record di un’altra tabella
Cliccando invece Struttura query si hanno otto tipi di creazione:
- query di creazione tabella crea una tabella da una query
- query di accodamento aggiunge record a una tabella esistente
- query di aggiornamento è come Trova e Sostituisci, ma accetta più criteri permettendo modifiche in larga scala; modifica i dati in una tabella esistente
- query a campi incrociati è quella di Creazione guidata query
- query di eliminazione elimina i record di una tabella a seconda dei criteri inseriti
- SQL
- query di unione: unisce il risultato di due query
- query pass-through: invia comandi direttamente sulle tabelle nel server di database ODBC
- query definizione dati: contiene istruzioni Data Definition Language per creare o modificare oggetti del database
Dalla Struttura della Query (prima icona a sinistra) è possibile vedere l’SQL.
Esistono anche:
- query con parametri o parametrizzata richiede all'utente, tramite una finestra, l'immissione di uno o più valori
- query con criteri multipli su più tabelle in relazione
Operatori per query Access
Operatori di confronto
- = Uguaglianza
=Rossi o =”Rossi” o =10 - > Maggiore di
>10 - < Minore di
<01/01/2020 - >= Maggiore o uguale a
>=A o >=”A” o >=10 - <= Minore o uguale a
<=31/12/2020 o #<=31/12/2020# - <> Diverso da
<>Access o <>”Access” o <>10
È assimilabile a Not - Between Tra due valori (estremi inclusi)
Between 10 and 20
equivale a >=10 and <=20 - In All’interno di un insieme di valori
In [Access, Excel, Word] o
In [“Access”,”Excel”,”Word”] - Is Null Il campo è vuoto
Is Null - Is Not Null Il campo non è vuoto
Is Not Null - Like Corrisponde a
Like Ac* o Like “Ac*” significa i record che iniziano per Ac
È assimilabile al simbolo di uguaglianza =
Operatori logici
- And Entrambe le espressioni sono vere
>=1 And <=10 - Or È vera una o l’altra delle espressioni o entrambe
Rm Or Mi o
“Rm” Or “Mi” - Not L’espressione non è vera
Not Like Ac* significa i record che non iniziano con Ac
Operatori universali
- ? Un carattere qualsiasi
A? A seguito da un carattere - * Un numero qualsiasi di caratteri
A* A seguito da un numero qualsiasi di caratteri - # Una qualsiasi singola cifra
1#3 trova 103, 113, 123
p[a-f]### inizia per p seguita da una lettera tra a e f più 3 cifre - [!0-9]*
Qualsiasi cifra non inclusa nell’intervallo
[0-9]*
Qualsiasi cifra inclusa nell’intervallo
[!a-z]*
Qualsiasi carattere non incluso nell’intervallo
[a-z]*
Qualsiasi carattere incluso nell’intervallo
b[!ae]llotrova bollo e bullo, ma esclude ballo e bello
P[e-h]sa* trova Pesa, Pfsa, Pgsa, Phsa (è necessario specificare l'intervallo in ordine crescente) - Vero, Sì, True, On, -1 o 1
- Falso, No, False, Off, 0
Operatori matematici e di stringa
- ^ Elevamento a potenza
- * Moltiplicazione
- / Divisione
- \ Divisione intera, arrotonda all’intero i 2 numeri, li divide e tronca il risultato per dare un intero
- Mod Modulo (resto di divisione)
- + Somma
- - Sottrazione
- & Concatenazione di stringhe
NomeCampo: [campo1] & " " & [campo2] (da mettere in una nuova colonna)
Operatori con Date()
- Date() Data corrente
- <=Date() Data corrente e tutte le date precedenti
- >=Date Data corrente e tutte le date successive
- <=Date()-10 Date precedenti 10 giorni prima della corrente
- Between Date() and Date()+10 Date negli ultimi 10 giorni
- Between Date() and Date()-10 Date nei prossimi 10 giorni
- Between Date() -20 and Date()-10 Date tra 10 e 20 giorni fa
- >DateAdd(“m”,1,Date()) Date oltre 1 mese dalla corrente
SQL
Per recuperare dati da Access, ma anche da altri database, è possibile usare un linguaggio di programmazione relativamente semplice chiamato SQL (Structured Query Language), letto siquel. In realtà, anche se non ce ne accorgiamo, per ogni query è tale linguaggio che viene eseguito in background.
Un po’ come quando si decide di registrare una macro Excel e l’applicativo scrive per noi il codice VBA.
Con l’SQL è possibile creare query più efficaci e modificare in maniera più facile query che non restituiscono i risultati desiderati.
Dove si scrive il codice SQL? Creando una Query in Visualizzazione struttura, andando su Progettazione e poi su Definizione dati.
Per vedere l'SQL di una Query si va su Home, Visualizza, Visualizzazione SQL.
Operatori SQL più comuni
- di confronto: =, LIKE (esprime somiglianza tra 2 valori), <, >, <=, >=, <>, BETWEEN (Recupera un valore compreso tra 2 valori)
- aritmetici: +, -, *, /
- logici: AND, OR
Clausole SQL più comuni
- SELECT Elenca i campi con i dati di interesse. Obbligatoria
- FROM Elenca le tabelle con i campi elencati da SELECT. Obbligatoria
- WHERE Specifica i criteri di campo che ogni record deve soddisfare per essere incluso nei risultati
- ORDER BY Specifica il tipo di ordinamento dei risultati
- GROUP BY In un'istruzione SQL con funzioni di aggregazione, elenca i campi non riepilogati da SELECT
- HAVING In un'istruzione SQL con funzioni di aggregazione, specifica le condizioni da applicare ai campi riepilogati da SELECT
In generale, un'istruzione SQL si presenta così:
SELECT Campo1
FROM Tabella1
WHERE Criterio1;
Ogni istruzione SELECT termina con un punto e virgola che può trovarsi alla fine dell'ultima clausola o da sola al termine dell'istruzione SQL stessa.
Ad esempio per ottenere tutti i Cognomi delle persone che si chiamano Sara si può scrivere un codice del genere:
SELECT Cognome
FROM Contatti
WHERE Nome = 'Sara';
Clausola SELECT
Una clausola SELECT permette di selezionare i campi specificandone i nomi (ma anche espressioni o un’altra istruzione SELECT) per usarne i dati in una query.
Ad esempio per sapere i numeri di telefono dei clienti contenuti in un campo denominato TelefonoClienti, la clausola SELECT sarà:
SELECT [TelefonoClienti]
L'uso delle parentesi quadre è obbligatorio solo se il nome contiene spazi o caratteri speciali.
Selezionare tutti i campi
Per includere tutti i campi di un'origine dati, è possibile elencarli nella clausola SELECT o usare il carattere jolly *. Ciò garantisce che la query sia aggiornata se vengono aggiunti nuovi campi all'origine dati.
Ad esempio per selezionare tutti i campi della tabella Ordini ma solo il campo E-mail della tabella Contatti, si avrà:
SELECT Ordini.*, Contatti.[E-mail]
Selezionare valori distinti
Per visualizzare solo dati univoci, usare la parola chiave DISTINCT all'interno di SELECT.
Ad esempio se per alcuni clienti è usato lo stesso numero di telefono, ma si vuole che ogni numero di telefono venga visualizzato una sola volta, si avrà:
SELECT DISTINCT [TelefonoClienti]
Usare nomi sostitutivi per campi o espressioni tramite la parola chiave AS
Per qualsiasi campo in visualizzazione Foglio dati è possibile modificare l'etichetta mostrata tramite la parola chiave AS e un alias di campo (nome assegnato a un campo in una query per rendere più leggibili i risultati) nella SELECT.
Ad esempio per selezionare i dati del campo TestoClntTel è possibile migliorare la leggibilità dei risultati usando l’alias Telefono Clienti come segue:
SELECT [TestoClntTel] AS [Telefono Clienti]
Selezionare usando un'espressione
Ad esempio per ottenere l'anno di nascita dei clienti dal campo DataNascita si userà qualcosa di simile a:
SELECT DatePart("yyyy",[DataNascita]) AS [Anno di nascita] dove DatePart è una funzione
Clausola FROM
La clausola FROM specifica le tabelle o le query contenenti i dati usati da SELECT.
Ad esempio per conoscere il numero di telefono di un cliente specifico presente nella tabella TClienti, la clausola FROM sarà:
FROM TClienti
L'uso delle parentesi quadre è obbligatorio solo se il nome contiene spazi o caratteri speciali.
Usare nomi sostitutivi per le origini dati
È anche possibile usare un alias di tabella nella clausola FROM. Ad esempio per selezionare i dati di due campi, entrambi denominati ID, uno dei quali appartiene alla tabella TClienti e l'altro alla tabella TOrdini, si userà:
SELECT [TClienti].[ID], [TOrdini].[ID]
Con gli alias si avrà:
FROM [TClienti] AS [C], [TOrdini] AS [O]
Gli alias di tabella possono essere poi usati nella SELECT:
SELECT [C].[ID], [O].[ID]
Clausola WHERE
Sintassi: WHERE Campo = Criterio
Ad esempio per sapere il numero di telefono di un cliente di cui si conosce il Cognome, Rossi:
WHERE [Cognome]='Rossi'
Vediamo altri esempi per limitare i risultati con i criteri:
>20 AND <30 applicabile a qualsiasi campo di tipo numerico (include solo i record il cui campo contiene un valore maggiore di 20 e minore di 30)
DateDiff ("aaaa", [DataNascita], Date()) > 10 applicabile a un campo Data/Ora. Include solo i record in cui il numero di anni tra la data di nascita e la data corrente è maggiore di 10
Is Null applicabile a qualsiasi tipo di campo per visualizzare i record in cui il valore del campo è Null
Clausola ORDER BY
Per ordinare i risultati prima in base al valore del campo Società in ordine decrescente e, se per alcuni record (ad esempio le E-mail) il valore di Società è lo stesso, ordinare l’indirizzo di posta elettronica in ordine crescente, si avrà:
ORDER BY Società DESC, [E-mail]
Access ordina i valori in ordine crescente (A-Z, dal più piccolo al più grande), per l’ordinamento decrescente si usa DESC.
Altri esempi:
SELECT Cognome, Nome
FROM Impiegati
ORDER BY Cognome;
SELECT Cognome, Nome
FROM Impiegati
ORDER BY Cognome ASC;
Funzioni di aggregazione SQL
Per riepilogare i dati si usano le funzioni di aggregazione:
- Avg
- Count
- Primo, Ultimo
- Min, Max
- StDev, StDevP
- Sum
- Var, VarP
Ad esempio per contare gli indirizzi di posta elettronica si usa:
SELECT COUNT([E-mail]), Società
Le funzioni di aggregazione utilizzabili dipendono dal tipo di dati a disposizione.
Clausola GROUP BY
Quando si usano funzioni di aggregazione, a volte bisogna creare un elenco di tutti i campi a cui una funzione di aggregazione non viene applicata.
La clausola GROUP BY segue immediatamente WHERE o FROM, se WHERE non è presente.
SELECT ElencoCampi
FROM tabella
WHERE criteri
[GROUP BY ElencoCampiGruppo]
Ad esempio:
GROUP BY Società
Clausola HAVING
La clausola HAVING funziona in modo analogo a WHERE ma viene usata per dati di aggregazione.
SELECT ElencoCampi
FROM Tabella
WHERE CriteriSelezione
GROUP BY ElencoCampiGruppo
[HAVING CriteriGruppo]
Se ad esempio si vuole che la query restituisca righe solo se alla Società sono associati più indirizzi E-mail, si avrà:
HAVING COUNT([E-mail])>1
Oppure
SELECT CategoriaID,
Sum(ProdottiInStock)
FROM Prodotti
GROUP BY CategoriaID
HAVING Sum(ProdottiInStock) > 100 And Like "C*";
Operatore UNION
Consente di combinare due istruzioni SELECT in una sola se vengono rispettati dei vincoli, le SELECT combinate devono infatti avere lo stesso numero di campi di output, nello stesso ordine e con tipi di dati uguali o compatibili. Quando la query viene eseguita, i dati di ogni set di campi corrispondenti vengono combinati in un unico campo di output. Il risultato della query avrà quindi lo stesso numero di campi di ognuna delle istruzioni SELECT.
Quando si usa l'operatore UNION, è possibile, attraverso la parola chiave ALL, anche specificare se i risultati della query devono includere righe duplicate.
Ecco un esempio:
SELECT Campo1
FROM Tabella1
UNION [ALL]
SELECT CampoA
FROM TabellaA;
Si supponga di avere due tabelle: TProdotti e TServizi. In entrambe sono presenti i campi Nome, Prezzo, Garanzia. Anche se TProdotti contiene informazioni sul prezzo e TServizi sulla garanzia, le informazioni sono essenzialmente le stesse, ovvero specificano se un prodotto viene fornito con una promessa di qualità. Con la seguente query di unione è possibile combinare i tre campi delle due tabelle:
SELECT Nome, Prezzo, Garanzia
FROM TProdotti
UNION ALL
SELECT Nome, Prezzo, Garanzia
FROM TServizi;
Oppure
SELECT [Prodotti ID], [Data Ordine], [Nome Compagnia], [Transazione], [Quantita]
FROM [Ordini]
UNION
SELECT [Prodotti ID], [Data Creazione], [Nome Compagnia], [Transazione], [Quantita]
FROM [Acquisti]
ORDER BY [Data Ordine] DESC;
Query pass-throught e query di definizione dati
Entrambe queste tipo di query vengono fatte in SQL.
Le query pass-throught servono per lavorare con le tabelle dei server, mentre le query di definizione dati non recuperano dati, ma creano, modificano, eliminano oggetti di database; possono essere rischiose poiché le azioni non sono accompagnate da finestre di dialogo di conferma.
Facciamo un esempio.
- Creo una query Visualizzazione Struttura
- Chiudo finestra MostraTabella
- Clicco icona Definizione dati
- Scrivo l’SQL
Ad esempio
Prima query
CREATE TABLE Anagrafica
(
CONTATORE AutoIncrement,
NOME Text (15) NOT NULL,
COGNOME Text,
ETÀ Integer,
STIPENDIO Currency,
DIPLOMATO Bit
)
Seconda query
INSERT INTO Anagrafica
VALUES (1,"Sara", "Moretti", 40, 1000, 0);
- Eseguo con !
- Salvo
Veloce promemoria query SQL
CREATE – Creazione tabella
CREATE TABLE NomeTabella (NomeCampo1 TipoCampo1 [NOT] NULL, …)
CREATE TABLE Docenti (ID AutoIncrement, Nome Text (255), Cognome Text (255), LuogoNascita Text (255)
Oppure (notare il campo Luogo Nascita messo tra parentesi quadre)
CREATE TABLE [Docenti] ([ID] AutoIncrement, [Nome] Text (255), [Cognome] Text (255), [Luogo Nascita] Text (255)
ALTER – Modifica tabella
ALTER TABLE NomeTabella ADD/MODIFY/DROP COLUMN NomeCampo1 TipoCampo1, …
- ADD COLUMN aggiunge un campo
- MODIFY COLUMN modifica un campo con un diverso tipo
- DROP COLUMN elimina un campo (quest’ultimo non necessita del parametro tipo_campo).
DROP – Cancellazione tabella
DROP TABLE NomeTabella
INSERT – Inserimento dati in tabella
INSERT INTO NomeTabella (NomeCampo1, …) VALUES (ValoreCampo1, …)
INSERT INTO Docenti (Nome, Cognome, LuogoNascita) VALUES (‘Mario’, ‘Rossi’, ‘Roma’)
Se sono di tipo testo o memo i valori vanno tra gli apici
SELECT – Interrogazione tabella
SELECT NomeCampo1 …/* FROM NomeTabella
L’asterisco sta per tutti i campi.
SELECT * FROM Docenti
Questa query estrae tutti i campi della tabella docenti
SELECT Nome, Cognome FROM Docenti
Questa query estrae i campi Nome e Cognome della tabella docenti
SELECT Nome, Cognome FROM Docenti WHERE ID = 1
Questa query filtra i dati restituendo nome e cognome dal record della tabella Docenti con ID = 1
SELECT Nome FROM Docenti WHERE ID = 1 AND Cognome LIKE ‘R*’
Questa query filtra i dati restituendo il nome della tabella Docenti con ID = 1 e Cognome che inizia con R.
SELECT * FROM Docenti WHERE ID BETWEEN 20 AND 40
Questa query filtra i dati restituendo tutti i dati della tabella Docenti con ID tra 20 e 40
UNION unisce i risultati di due tabelle in un unico risultato
SELECT * FROM Docenti UNION SELECT * FROM Città
DISTINCT permette di estrarre solo una volta il dato che può comparire più volte uguale
SELECT DISTINCT Nome FROM Docenti WHERE Nome = ‘Mario’
UPDATE – Aggiornamento tabella
UPDATE NomeTabella SET NomeCampo = ‘valore’ WHERE CampoCondizione = ‘ValoreCondizione
DELETE – Cancellazione dati da tabella
DELETE * FROM NomeTabella WHERE CampoCondizione = ValoreCondizione
JOIN – Relazioni tra più tabelle
JOIN permette di creare relazioni tra tabelle, ma è possibile farlo anche con SELECT…FROM…WHERE.
Segnalando che per indicare un campo contenuto in una tabella si usa NomeTabella.NomeCampo, ecco i due casi:
SELECT Docenti.Nome, Docenti.Cognome, Docenti.LuogoNascita, Città.Regione, Città.CodicePostale FROM Docenti, Città WHERE Docenti.LuogoNascita = Città.Città
Quanto sopra SELEZIONA il campo Nome e il campo Cognome dalla tabella Docenti, il campo LuogoNascita dalla tabella Docenti, il campo Regione dalla tabella Città, il campo CodicePostale dalla tabella Città DALLE tabelle Docenti e Città DOVE il campo LuogoNascita della tabella Docenti è uguale al campo Città della tabella Città.
La stessa procedura con JOIN:
SELECT Docenti.Nome, Docenti.Cognome, Docenti.LuogoNascita, Città.Regione, Città.CodicePostale FROM Docenti INNER JOIN Città ON Docenti.LuogoNascita = Città.Città
Funzioni di aggregazione
Utili per effettuare calcoli, vediamone alcune:
- AVG() Restituisce la media
- COUNT() Restituisce il numero di record trovati
- MAX() Restituisce il valore massimo
- MIN() Restituisce il valore minimo
- SUM() Restituisce la somma
Funzioni di gestione stringhe
LEFT() ;e RIGHT() definiscono sottostringhe a partire, rispettivamente, dalla sinistra e dalla destra di una stringa.
SELECT LEFT/RIGHT(NomeCampo, length) FROM NomeTabella WHERE …
SELECT LEFT(Nome, 3) FROM Docenti WHERE ID = 1
Se al campo Nome del record con ID = 1 c’è scritto Andrea allora verranno prese solo le prime tre lettere, And.
LEN() calcola la lunghezza di una stringa.
SELECT LEN(NomeCampo) FROM NomeTabella WHERE …
TOP() estrae i primi N dati da una tabella.
SELECT TOP NomeCampo FROM NomeTabella
Gli Alias
Variabili che conterranno valori appena calcolati.
SELECT OPERAZIONI(parametri) AS NomeAlias FROM NomeTabella
GROUP BY e HAVING
GROUP BY è simile ad ORDER BY ma non ordina i dati in funzione di un campo bensì li raggruppa in funzione del campo specificato.
SELECT COUNT(*) AS quanti FROM Docenti GROUP BY ID
HAVING è simile a WHERE ma effettua operazioni utilizzando come clausole condizionali funzioni di aggregazione.
SELECT COUNT(*) AS quanti FROM Docenti HAVING MAX(Età) < 30
Metto in quanti la quantità di docenti con età inferiore a 30 anni.
Sarebbe uguale scrivere:
SELECT COUNT(*) AS quanti FROM Docenti WHERE Età < 30
Esempi query SQL

- Numero di alunni che hanno preso almeno 12 nella ‘Seconda prova’
SELECT Count(Distinct KsAlunno) from Esiti, Prove
WHERE IdProva=KsProva And
DescProva='Seconda prova' And Voto>=12; - Quante volte è stata valutata almeno 12 una simulazione di Seconda prova
SELECT Count(*) From Esiti, Prove
WHERE IdProva=KsProva And
DescProva='Seconda prova' And Voto>=12; - Quanti alunni per ogni fascia di età (quanti quattordicenni, quindicenni ecc.)
Fascia
NumeroAlunni
16
2
17
2
18
1
Group By Eta; - Nomi degli alunni più vecchi
Select NomeAlu From Alunni
Where Eta = (Select Max(Eta) From Alunni); - Elenco degli alunni che hanno preso in Italiano più della media Select Distinct NomeAlu From Alunni, Esiti, Prove
Where IdAlunno=KsAlunno And IdProva=KsProva And
DescProva=’Italiano' And Voto > (Select Avg(Voto)
From Alunni, Esiti, Prove
Where
IdAlunno=KsAlunno And IdProva=KsProva And
DescProva=’Italiano’);
Esempi query QBE
Crea una query di selezione semplice in:
- Creazione guidata (salva come QEtà) per presentare tutte le auto di 5 anni ordinati in senso discendente per Auto posseduta, i cui nomi dei proprietari terminano in a e siano donne nate negli anni ‘80 tra il 20 e il 29 di ogni mese (per quest’ultimo criterio usa solo *, e numeri):
*a
F
Like "2*/*/198*" - Creazione guidata per presentare tutti i dati riguardanti Marco e Sara nati dal 1° gennaio 1981 al 23 dicembre 1999, che non possiedono il Fax, ma hanno la mail:
Marco or Sara
oppure
Criteri: Marco, Oppure: Sara
>=#01/01/1981# And <=#23/12/1999#
“”
*oppure Is Not Null - Visualizzazione Struttura per presentare tutte le persone che si chiamano Marco con un Età auto compresa tra 0 e 5 anni, esterni all’intervallo di nascita 01/01/1968 – 31/12/1970, visualizzando solo i 2 valori più alti delle EtaAuto in senso decrescente:
CriteriNome: Marco
CriteriEta: >=0 and <=5
not between 01/01/1968 and 31/12/1970
In Ordinamento del campo per cui voglio visualizzare i primi valori selezionare Decrescente, Scheda Progettazione/Restituisci/Immetto il valore - Visualizzazione Struttura per presentare tutte le persone che si chiamano Sara o nate prima del 05/03/1972, escludendo i maschi, la cui iniziale del nome del comune ricada nell’intervallo m-r
CriteriNome: Sara
OppureDataNascita: <05/03/1972
<>M
Like "[m-r]*" - Creazione guidata per trovare le auto acquistate con un costo superiore alla media e quelle dei comuni che iniziano per R e la cui seconda lettera va da “i” a “m”
CriteriCostoAuto: >DAvg("[CostoAuto]";"TAutosalone")
Oppure: Like "r[i-m]*" - Creazione guidata per trovare le auto vendute all’Autosalone negli ultimi 30 giorni da persone il cui nome inizia per M ed è di almeno 5 caratteri
>=Date( )- 30
Len([Nome])>=Val(5) and M* - Creazione guidata con:
- un nuovo campo “Nominativo” per unire il Nome e il Cognome ordinato in senso crescente
Nominativo: [nome] & " " & [cognome] - un campo “Acquistabile” che con una condizione dia “Sì” se il costo dell’auto è inferiore a €40.000, altrimenti dia “No”;
Acquistabile: IIf([CostoAuto]<40000;"Sì";"No") - un campo “UniproVariazione” che mostri il prezzo dell’auto aumentato dell’1% se è stata di un unico proprietario, altrimenti dia la scritta Invariato
UniproVariazione: IIf([UnicoProprietario]=-1;[CostoAuto]*1,01;"Invariato") Posso usare anche Vero anziché -1 - un campo “Richiesta mail” che faccia comparire la scritta: Richiedi mail se essa non è ancora stata fornita
Richiesta mail: IIf(IsNull([Email]);"Richiedi") - Tre campi che calcolino
costo dell’auto aumentato del 15%
Costo +15%:[CostoAuto]*1,15
sconto del costo auto del 10%
Sconto 10%:[CostoAuto]*0,1 - differenza tra CostoAuto e Sconto CostoScontato10%:[CostoAuto]-[Sconto]
- un campo EtaProprietario che calcoli in automatico l’età arrotondata per difetto e calcolando l’anno bisestile utilizzando il campo DataNascitab
Età proprietario:Int((Now()-[DataNascita])/365,25) - Trasforma una query semplice a tua scelta, in una tabella dal nome TdaQ tramite la query di creazione tabella
Struttura query/Icona Creazione tabella/do il nome TdaQ/Ok/! - Chiudi TdaQ e, tramite una query di aggiornamento, sconcatena Nominativo in 2 campi: Nome e Cognome
Query in Visualizzazione Struttura/scelgo TdaQ/porto Nome e Cognome/clicco Query di aggiornamento
In "Aggiorna" sotto il campo "Nome": Left([Nominativo];InStr([Nominativo];" ")-1)
In "Aggiorna" sotto il campo "Cognome": Mid([Nominativo];InStr([Nominativo];" ")+1)
Lancio la query da ! e apro TdaQ (non è necessario salvare la query)
- Creazione guidata una query con parametri chiamata Q1Parametro che estragga Nome e Cognome dei proprietari delle AutoPossedute con un CostoAuto maggiore di un valore deciso di volta in volta
Nei criteri di CostoAuto mettere:
>[Immetti il valore oltre il quale mostrare i costi delle auto] - Creazione guidata una query con 2 parametri (Q2Parametri) che estragga Nome e Cognome dei proprietari delle AutoPossedute con un CostoAuto compreso tra 2 valori, decisi di volta in volta, nel comune di una città anch’essa decisa di volta in volta, ma segnalalo nella finestra parametrica
Nei criteri di CostoAuto mettere:
Between [Immetti il costo minimo auto min 30000] And [Immetti il costo massimo auto max 50000]
Nei criteri di PR mettere:
[Inserisci un comune del Lazio Abruzzo Molise] - Crea una nuova tabella dal nome TAltreQuery con 3 campi: Filiali, Prodotti e Fatturato;
poiché si suppone che le filiali della stessa zona non possano vendere gli stessi prodotti (ad es. le filiali Anagnina non possono vendere entrambe monitor) per garantire l'univocità dei campi Filiali e Prodotti immetti una chiave primaria multicampo sui suddetti 2 campi selezionando entrambi e impostando la chiave primaria
Inserisci 20 record: Filiali (8 record diversi), Prodotti (3 record diversi), almeno 2 Fatturati inferiori a €1.000 - Crea una query a campi incrociati chiamata QCampiIncrociati per ottenere 10 filiali in riga e 5 prodotti in colonna e come ultima, una colonna valorizzata e intestata Fatturato totale. Salva e chiudi la query
Crea Creazione guidata query query a campi incrociati Filiali per riga e Prodotti per colonna Somma - Nella tabella togli la chiave multicampo e duplica l'ultimo record (non necessariamente anche per Fatturato) e fai una ricerca dei duplicati su Filiali e Prodotti per vedere se nella tabella hai inserito per errore una stessa filiale che ha venduto lo stesso prodotto; si desiderano anche visualizzare i fatturati specifici anziché il numero di duplicati. Salva la query come QDuplicati
Crea Creazione guidata query query ricerca duplicati porto Filiali e Prodotti Avanti porto Fatturato (per visualizzare i fatturati specifici) - Duplica per struttura e dati TAltreQuery e nominala CopiaAltreQueryDaAccodare
- Accoda la copia all’originale, ma solo per i fatturati da 1000 euro in su; verifica (è possibile non salvare la query)
Creo Query in Visualizzazione Struttura Aggiungo Tabella con dati da accodare (CopiaAltreQueryDaAccodare) Porto in griglia i 3 campi da accodare Criteri Fatturato >=1000 Scheda Progettazione Accodamento Scelgo Tabella alla quale accodare i dati (TAltreQuery) Ok Esegui (se non lo fa verifica l'attivazione macro e/o chiudi e riapri il db) - Creazione guidatacon criteri multipli cioè su più tabelle in relazione immettendo il campo NomeCognome da Insegnante e MOS da Materie, chiamala QMos, per estrarre tutti gli insegnanti che fanno il MOS, senza visualizzare il campo MOS
is not null se uso Testo, Vero se uso Sì/No - Aldo Abate e Bruno Borini hanno conseguito le certificazioni ECDL, MOS e IC3 e divengono insegnanti, quindi, tramite una query di aggiornamento modificare i record opportunamente
Crea Struttura query Aggiungo TMaterie (Tabella con i dati da aggiornare) porto i campi da aggiornare: NomeCognome, ECDL, MOS, IC3 Query di aggiornamento
In Criteri e/o Oppure scegliere i 2 nominativi
In Aggiorna a mettere Vero sui campi ECDL, MOS, IC3 per trasformarli da no a sì/Esegui (vedo l’aggiornamento da TMaterie) - Aldo Abate va a lavorare per la concorrenza, lo elimino quindi da TInsegnanti
Crea Struttura query Aggiungo TInsegnanti (T con i dati da aggiornare) Dall’* porto tutti i campi, porto anche NomeCognome Query di eliminazione (compaiono Da e Dove)
In Criteri e/o Oppure del campo NomeCognome scrivo il nominativo da cancellare Esegui (vedo la cancellazione da TInsegnante)
Se Access Come creare query ti è piaciuto, condividilo! Ma potrebbe interessarti leggere anche: Access: come utilizzare le macro