Predikaten ALL, DISTINCT, DISTINCTROW, TOP
Applies ToAccess för Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Anger poster som valts med SQL-frågor.

Syntax

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PROCENT]]]FROM-tabell

Ett SELECT-uttryck som innehåller dessa predikat består av följande delar:

Element

Beskrivning

ALL

Antas om du inte tar med något av predikaten. Microsoft Access-databasmotorn markerar alla poster som uppfyller villkoren i SQL-instruktionen. Följande två exempel är likvärdiga och returnerar alla poster från tabellen Anställda:

SELECT ALL *FROM EmployeesORDER BY EmployeeID;
SELECT *FROM EmployeesORDER BY EmployeeID;

DISTINCT

Utelämnar poster som innehåller dubblettdata i de markerade fälten. För att inkluderas i resultatet av frågan måste värdena för varje fält som anges i SELECT-instruktionen vara unika. Flera anställda som visas i tabellen Anställda kan till exempel ha samma efternamn. Om två poster innehåller Smith i fältet LastName returnerar följande SQL-uttryck bara en post som innehåller Smith:

SELECT DISTINCT LastNameFROM Employees;

Om du utelämnar DISTINCT returnerar den här frågan båda Smith-posterna.

Om SELECT-satsen innehåller fler än ett fält måste kombinationen av värden från alla fält vara unik för att en viss post ska tas med i resultatet.

Resultatet av en fråga som använder DISTINCT kan inte uppdateras och återspeglar inte efterföljande ändringar som gjorts av andra användare.

DISTINCTROW

Utelämnar data baserat på hela dubblettposter, inte bara dubblettfält. Du kan till exempel skapa en fråga som kopplar tabellerna Kunder och Order i fältet Kundnr. Tabellen Kunder innehåller inga dubbletter av CustomerID-fält, men tabellen Order gör det eftersom varje kund kan ha många order. Följande SQL-instruktion visar hur du kan använda DISTINCTROW för att skapa en lista över företag som har minst en order men utan information om dessa order:

SELECT DISTINCTROW CompanyNameFROM Customers INNER JOIN OrdersON Customers.CustomerID = Orders.CustomerIDORDER BY CompanyName;

Om du utelämnar DISTINCTROW skapar den här frågan flera rader för varje företag som har fler än en order.

DISTINCTROW har bara effekt när du väljer fält från vissa, men inte alla, av tabellerna som används i frågan. DISTINCTROW ignoreras om frågan bara innehåller en tabell eller om du utdatafält från alla tabeller.

TOPP n [PROCENT]

Returnerar ett visst antal poster som ligger högst upp eller längst ned i ett område som anges av en ORDER BY-sats. Anta att du vill ha namnen på de 25 bästa eleverna från klassen 1994:

SELECT TOP 25FirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage DESC;

Om du inte tar med ORDER BY-satsen returnerar frågan en godtycklig uppsättning med 25 poster från tabellen Elever som uppfyller WHERE-satsen.

Predikatet TOP väljer inte mellan lika värden. I exemplet ovan returnerar frågan 26 poster om medelvärdena för de tjugofemtjugo och tjugosju sjätte högsta betygen är desamma.

Du kan också använda det reserverade ordet PROCENT för att returnera en viss procentandel poster som hamnar högst upp eller längst ned i ett intervall som anges av en ORDER BY-sats. Anta att du i stället för de 25 bästa eleverna vill ha de 10 lägsta procenten av klassen:

SELECT TOP 10 PERCENTFirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage ASC;

ASC-predikatet anger en retur av de lägsta värdena. Värdet efter TOP måste vara ett osignerat heltal.

TOP påverkar inte om frågan kan uppdateras eller inte.

tabell

Namnet på den tabell från vilken posterna ska hämtas.

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.