Predikaten ALL, DISTINCT, DISTINCTROW, TOP

Predikaten ALL, DISTINCT, DISTINCTROW, TOP

Anger poster som markerats av Structured Query Language (SQL)-frågor.

Syntax

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

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

Element

Beskrivning

ALL

Antas om du inte anger ett predikat. Microsoft Jet-databasmotorn väljer ut alla poster som uppfyller villkoren i SQL-sträng/SQL-uttryck. Följande två exempel är ekvivalenta och returnerar alla poster från tabellen Anställda:

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

DISTINCT

Utelämnar poster som har identiska fält. För att en viss post ska vara med i en frågas resultatmängd måste värdena för varje fält i SELECT-kommandot vara unika. Det kan till exempel finnas flera anställda i tabellen Employees som har samma efternamn. Om två poster innehåller Andersson i fältet LastName returnerar följande SQL-kommando bara en post med namnet Andersson:

SELECT DISTINCT LastName
FROM Employees;

Om du utelämnar DISTINCT returnerar frågan båda posterna.

Om SELECT-satsen innehåller mer än ett fält, måste kombinationen av värdena från alla fälten vara unika för att en given post ska finnas med i resultatmängden.

Resultatet av en fråga som använder DISTINCT går inte att uppdatera, och ändringar som gjorts senare av andra användare påverkar inte resultatmängden.

DISTINCTROW

Utelämnar data baserat på fullständiga dubblettposter, inte på identiska enskilda fält. Du kan till exempel skapa en fråga som sammankopplar tabellerna Kunder och Order med fältet Kundnr. Tabellen Kunder innehåller inga dubbletter av fältet Kundnr, men tabellen Order gör det eftersom en kund kan ha gjort flera beställningar. Följande SQL-kommando visar hur du kan använda DISTINCTROW för att skapa en lista över företag som har minst en order, men utan mer detaljerad information om varje order:

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

Om du utelämnar DISTINCTROW ger denna fråga flera rader för varje företag som har fler än en order.

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

TOP n [PERCENT]

Returnerar ett visst antal poster som kommer först eller sist i en sekvens som ordnats av en ORDER BY-sats. Anta att du vill visa de 25 bästa studenterna som tog examen 1994:

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

Om du inte använder satsen ORDER BY kommer frågan att returnera 25 slumpmässigt valda poster från tabellen Studenter som uppfyller WHERE-villkoret.

Predikatet TOP skiljer inte mellan identiska värden. Om det 25:e och 26:e högsta medelbetyget i det föregående exemplet är lika, returneras 26 poster.

Du kan också använda det reserverade ordet PERCENT för att returnera en viss andel av de poster som kommer först eller sist i sekvens som ordnats av en ORDER BY-sats. Anta att du i stället för de 25 bästa eleverna vill visa de 10 sämsta procenten:

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

Predikatet ASC anger att de lägsta värdena ska returneras. Värdet som följer TOP måste vara ett positivt Integer-datatyp.

TOP påverkar inte om frågan går att uppdatera eller inte.

tabell

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



Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Office Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×