AS
SQL
Tabelle di esempio
Ordini
ID NrOrdine DataOrdine IdVenditore Valore
1 1010 05/10/2018 3 € 150,00
2 1011 05/10/2018 2 € 1.111,00
3 1012 13/10/2018 4 € 1.321,00
4 1013 15/10/2018 3 € 321,00
5 1014 15/10/2018 4 € 900,00
6 1015 11/02/2018 2 € 1.888,00
7 1016 11/10/2018 3 € 120,00
8 1017 11/10/2018 3 € 970,00
Venditori
ID Nome Cognome IdFiliale
1 Paolo Rossi 1
2 Marco Bianchi 2
3 Marta Verdi 1
4 Marco Bello 3
Filiali
ID Filiale Area
1 Padova Nord
2 Milano Nord
3 Roma Centro
Una query di selezione semplice
Codice
-- This is a comment (not supported by Microsoft Access)
SELECT V.Nome, V.Cognome
FROM Venditori AS V
WHERE V.IdFiliale=1
ORDER BY V.Nome ASC;
Risultato della query
Nome Cognome
Marta Verdi
Paolo Rossi
Utilizzo di IN e BETWEEN
Codice
SELECT O.NrOrdine
FROM Ordini AS O
WHERE O.NrOrdine IN ("1010", "1011");
Risultato della query
NrOrdine
1010
1011
Codice
SELECT O.NrOrdine
FROM Ordini AS O
WHERE O.Valore BETWEEN 500 AND 1000;
Risultato della query
NrOrdine
1014
1017
Utilizzo di LIKE con % con _
Codice
SELECT O.NrOrdine
FROM Ordini AS O
WHERE O.NrOrdine LIKE "__10";
Risultato della query
NrOrdine
1010
Con l'espressione "LIKE "__10" abbiamo cercato nel campo NrOrdine una stringa di 4 caratteri che contenga "10" a partire dalla terza posizione.
Codice
SELECT V.Cognome
FROM Venditori AS V
WHERE V.Cognome LIKE "B%";
Risultato della query
Cognome
Bianchi
Bello
In questo caso invece abbiamo cercato, nella colonna Cognome, ogni stringa, di lunghezza qualsiasi, che inizi con "B".
Esempio di una query di selezione con subquery
Codice
SELECT F.Filiale, V.Cognome, Count(O.NrOrdine) AS Conteggio_ordini, Sum(O.Valore) AS Valore_totale
FROM (Venditori AS V
LEFT JOIN Ordini AS O
ON V.ID=O.IdVenditore)
INNER JOIN Filiali AS F
ON V.IdFiliale=F.ID
GROUP BY F.Filiale, V.Cognome, F.Area
HAVING F.Area="Nord"
ORDER BY Sum(O.Valore) DESC;
Alternativa
SELECT SQ.Filiale, SQ.Cognome, Count(O.NrOrdine) AS Conteggio_ordini, Sum(O.Valore) AS Valore_totale, SQ.Area
FROM Ordini AS O
RIGHT JOIN
(
SELECT V.ID, F.Filiale, V.Cognome, F.Area
FROM Venditori AS V
LEFT JOIN Filiali AS F
ON V.IdFiliale=F.ID
) AS SQ
ON O.IdVenditore=SQ.ID
GROUP BY SQ.Filiale, SQ.Cognome, SQ.Area
HAVING SQ.Area="Nord"
ORDER BY Sum(O.Valore) DESC;
Risultato della query
Filiale Cognome Conteggio_ordini Valore_totale
Milano Bianchi 2 € 2.999,00
Padova Verdi 4 € 1.561,00
Padova Rossi 0
Query Editor di Microsoft Access