De gesorteerde resultaten beperken
De TOP-component is een door Microsoft eigen uitbreiding van de SELECT-component. MET TOP kunt u opgeven hoeveel rijen moeten worden geretourneerd, hetzij als een positief geheel getal of als percentage van alle in aanmerking komende rijen. Het aantal rijen kan worden opgegeven als een constante of als een expressie. TOP wordt meestal gebruikt met een ORDER BY, maar kan worden gebruikt met niet-geordende gegevens.
De TOP-component gebruiken
De vereenvoudigde syntaxis van de TOP-component, die wordt gebruikt met ORDER BY, is als volgt:
SELECT TOP (N) <column_list>
FROM <table_source>
WHERE <search_condition>
ORDER BY <order list> [ASC|DESC];
Als u bijvoorbeeld alleen de tien duurste producten wilt ophalen uit de tabel Production.Product , gebruikt u de volgende query:
SELECT TOP 10 Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
De resultaten kunnen er ongeveer als volgt uitzien:
Naam
ListPrice
Road-150 Rood, 62
3578.27
Road-150 Rood, 44
3578.27
Road-150 Rood, 48
3578.27
Road-150 Rood, 52
3578.27
Road-150 Rood, 56
3578.27
Berg-100 zilver, 38
3399.99
Berg-100 zilver, 42
3399.99
Berg-100 zilver, 44
3399.99
Berg-100 zilver, 48
3399.99
Berg-100 zwart, 38
3374.99
De OPERATOR TOP is afhankelijk van een ORDER BY-component om zinvolle prioriteit te bieden aan de geselecteerde rijen. TOP kan worden gebruikt zonder ORDER BY, maar in dat geval is er geen manier om te voorspellen welke rijen worden geretourneerd. In dit voorbeeld kunnen 10 orders worden geretourneerd als er geen ORDER BY-component is.
WITH TIES gebruiken
Naast het opgeven van een vast aantal rijen dat moet worden geretourneerd, accepteert het trefwoord TOP ook de optie WITH TIES, waarmee rijen met waarden worden opgehaald die kunnen worden gevonden in de geselecteerde bovenste N rijen.
In het vorige voorbeeld retourneerde de query de eerste 10 producten in aflopende volgorde van de prijs. Als u echter de optie WITH TIES toevoegt aan de TOP-component, ziet u dat meer rijen in aanmerking komen voor opname in de tien duurste producten:
SELECT TOP 10 WITH TIES Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
Deze gewijzigde query retourneert de volgende resultaten:
Naam
ListPrice
Road-150 Rood, 62
3578.27
Road-150 Rood, 44
3578.27
Road-150 Rood, 48
3578.27
Road-150 Rood, 52
3578.27
Road-150 Rood, 56
3578.27
Berg-100 zilver, 38
3399.99
Berg-100 zilver, 42
3399.99
Berg-100 zilver, 44
3399.99
Berg-100 zilver, 48
3399.99
Berg-100 zwart, 38
3374.99
Mountain-100 Black, 42
3374.99
Mountain-100 Black, 44
3374.99
Mountain-100 Black, 48
3374.99
De beslissing om WITH TIES op te nemen, is afhankelijk van uw kennis van de brongegevens, het potentieel voor unieke waarden en de vereisten van de query die u schrijft.
Percent gebruiken
Als u een percentage van de in aanmerking komende rijen wilt retourneren, gebruikt u de optie PERCENT met TOP in plaats van een vast getal.
SELECT TOP 10 PERCENT Name, ListPrice
FROM SalesLT.Product
ORDER BY ListPrice DESC;
Het PERCENTAGE kan ook worden gebruikt met de optie WITH TIES.
Notitie
Voor het aantal rijen wordt TOP (N) PERCENT naar boven afgerond op het dichtstbijzijnde gehele getal.
De optie TOP wordt door veel SQL Server-professionals gebruikt als methode voor het ophalen van slechts een bepaald bereik van rijen. Houd echter rekening met de volgende feiten wanneer u TOP gebruikt:
- TOP is eigendom van T-SQL.
- TOP biedt geen ondersteuning voor het overslaan van rijen.
- Omdat TOP afhankelijk is van een ORDER BY-component, kunt u de ene sorteervolgorde niet gebruiken om de rijen vast te stellen die zijn gefilterd op TOP en een andere om de uitvoervolgorde te bepalen.