Predicati ALL, DISTINCT, DISTINCTROW, TOP

Predicati ALL, DISTINCT, DISTINCTROW, TOP

Specifica record selezionati con query SQL.

Sintassi

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM tabella

Un'istruzione SELECT contenente questi predicati è composta dalle parti seguenti:

Parte

Descrizione

ALL

Si presuppone questo valore se non sono stati inclusi predicati. Il motore di database di Microsoft Access seleziona tutti i record che soddisfano le condizioni dell'istruzione SQL. I due esempi seguenti sono equivalenti e restituiscono tutti i record dalla tabella Employees:

SELECT ALL *
FROM Employees
ORDER BY EmployeeID;
SELECT *
FROM Employees
ORDER BY EmployeeID;

DISTINCT

Omette i record che contengono dati duplicati nei campi selezionati. Per essere inclusi nei risultati della query, i valori per ogni campo elencato nell'istruzione SELECT devono essere univoci. Ad esempio, è possibile che alcuni dipendenti elencati in una tabella Employees abbiano lo stesso cognome. Se due record contengono Milano nel campo LastName, l'istruzione SQL seguente restituisce solo un record contenente Milano:

SELECT DISTINCT LastName
FROM Employees;

Se si omette DISTINCT, la query restituisce entrambi i record Milano.

Se la clausola SELECT contiene più di un campo, la combinazione di valori di tutti i campi deve essere univoca per consentire l'inclusione di un record specifico nei risultati.

L'output di una query che usa DISTINCT non è aggiornabile e non riflette le modifiche successive apportate da altri utenti.

DISTINCTROW

Omette dati in base a interi record duplicati, non solo a campi duplicati. Ad esempio, è possibile creare una query che unisce le tabelle Customers e Orders nel campo CustomerID. La tabella Customers non contiene campi CustomerID duplicati, ma la tabella Orders include tali campi, poiché ogni cliente può avere più ordini. L'istruzione SQL seguente illustra come usare DISTINCTROW per produrre un elenco di società con almeno un ordine, ma senza dettagli sugli ordini:

SELECT DISTINCTROW CompanyName
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY CompanyName;

Se si omette DISTINCTROW, questa query produce più righe per ogni società che ha più di un ordine.

DISTINCTROW produce un effetto solo se si selezionano campi da alcune, non tutte, le tabelle usate nella query. DISTINCTROW viene ignorata se la query include solo una tabella o se i campi vengono restituiti da tutte le tabelle.

TOP n [PERCENT]

Restituisce un determinato numero di record che rientrano nella parte superiore o inferiore di un intervallo specificato da una clausola ORDER BY. Si supponga di volere ottenere i nomi dei 25 studenti migliori dell'anno scolastico 1994:

SELECT TOP 25
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage DESC;

Se non si include la clausola ORDER BY, la query restituirà un set arbitrario di 25 record dalla tabella Students che soddisfano la clausola WHERE.

Il predicato TOP non sceglie tra valori uguali. Nell'esempio precedente, se i valori relativi al venticinquesimo e ventiseiesimo voto più alto sono uguali, la query restituirà 26 record.

È anche possibile usare la parola riservata PERCENT per restituire una determinata percentuale di record, che rientrano nella parte superiore o inferiore di un intervallo specificato da una clausola ORDER BY. Si supponga che, invece dei 25 studenti migliori, si voglia ottenere il 10% degli studenti peggiori della classe:

SELECT TOP 10 PERCENT
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage ASC;

Il predicato ASC specifica la restituzione dei valori inferiori dell'intervallo. Il valore che segue TOP deve essere un numero intero senza segno.

TOP non influisce sull'aggiornabilità o meno della query.

tabella

Nome della tabella di cui vengono recuperati i record.



Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa al programma Office Insider

Queste informazioni sono risultate utili?

Grazie per i tuoi commenti e suggerimenti

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×