Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Haalt rijen op uit de database en maakt het mogelijk om een of meer rijen of kolommen te selecteren uit een of meer tabellen in de SQL Server Database Engine. De volledige syntaxis van de SELECT instructie is complex, maar de belangrijkste componenten kunnen als volgt worden samengevat:
[ WITH { [ XMLNAMESPACES , ] [ common_table_expression ] } ]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ ORDER BY order_expression [ ASC | DESC ] ]
De operators UNION, EXCEPT en INTERSECT kunnen worden gebruikt tussen query's om hun resultaten te combineren of te vergelijken in één resultatenset.
              
              
              Transact-SQL syntaxis-conventies
Syntax
Syntaxis voor SQL Server en Azure SQL Database:
<SELECT statement> ::=
    [ WITH { [ XMLNAMESPACES , ] [ <common_table_expression> [ , ...n ] ] } ]
    <query_expression>
    [ ORDER BY <order_by_expression> ]
    [ <FOR Clause> ]
    [ OPTION ( <query_hint> [ , ...n ] ) ]
<query_expression> ::=
    { <query_specification> | ( <query_expression> ) }
    [  { UNION [ ALL ] | EXCEPT | INTERSECT }
        <query_specification> | ( <query_expression> ) [ ...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
    [ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
    <select_list>
    [ INTO new_table ]
    [ FROM { <table_source> } [ , ...n ] ]
    [ WHERE <search_condition> ]
    [ <GROUP BY> ]
    [ HAVING <search_condition> ]
[ ; ]
Syntaxis voor Azure Synapse Analytics en Parallel Data Warehouse en Microsoft Fabric:
[ WITH <common_table_expression> [ , ...n ] ]
SELECT <select_criteria>
[ ; ]
<select_criteria> ::=
    [ TOP ( top_expression ) ]
    [ ALL | DISTINCT ]
    { * | column_name | expression } [ , ...n ]
    [ FROM { table_source } [ , ...n ] ]
    [ WHERE <search_condition> ]
    [ GROUP BY <group_by_clause> ]
    [ HAVING <search_condition> ]
    [ ORDER BY <order_by_expression> ]
    [ OPTION ( <query_option> [ , ...n ] ) ]
Remarks
Vanwege de complexiteit van de SELECT instructie worden gedetailleerde syntaxiselementen en argumenten per component weergegeven:
- WITH XMLNAMESPACES
- HAVING
- WITH common_table_expression
- UNION
- SELECT clause
- BEHALVE en INTERSECT
- INTO clause
- ORDER BY
- FROM
- FOR clause
- WHERE
- OPTION clause
- GROUP BY
De volgorde van de componenten in de SELECT instructie is belangrijk. Een van de optionele componenten kan worden weggelaten, maar wanneer de optionele componenten worden gebruikt, moeten ze in de juiste volgorde worden weergegeven.
              SELECT instructies zijn alleen toegestaan in door de gebruiker gedefinieerde functies als de selectielijsten van deze instructies expressies bevatten die waarden toewijzen aan variabelen die lokaal zijn voor de functies.
Een vierdelige naam die is samengesteld met de OPENDATASOURCE functie als het servernaamonderdeel kan worden gebruikt als een tabelbron, waar een tabelnaam ook in een SELECT instructie kan worden weergegeven. Een vierdelige naam kan niet worden opgegeven voor Azure SQL Database.
Sommige syntaxisbeperkingen zijn van toepassing op SELECT instructies die betrekking hebben op externe tabellen.
Volgorde van logische verwerking van de SELECT-instructie
In de volgende stappen ziet u de logische verwerkingsvolgorde of bindingsvolgorde voor een SELECT instructie. Deze volgorde bepaalt wanneer de objecten die in één stap zijn gedefinieerd, beschikbaar worden gesteld aan de componenten in de volgende stappen. Als de queryprocessor bijvoorbeeld kan binden aan (access) de tabellen of weergaven die in de FROM component zijn gedefinieerd, worden deze objecten en de bijbehorende kolommen beschikbaar gesteld voor alle volgende stappen. Daarentegen, omdat de SELECT component stap 8 is, kunnen eventuele kolomaliassen of afgeleide kolommen die in die component zijn gedefinieerd, niet worden verwezen door voorgaande componenten. Er kan echter naar worden verwezen door volgende componenten, zoals de ORDER BY component. De queryprocessor bepaalt de werkelijke fysieke uitvoering van de instructie en de volgorde kan afwijken van deze lijst.
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- 
              WITH CUBEofWITH ROLLUP
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
Warning
Er zijn ongebruikelijke gevallen waarin de vorige reeks kan verschillen. Stel dat u een geclusterde index in een weergave hebt en dat de weergave enkele tabelrijen uitsluit en de kolomlijst van SELECT de weergave een CONVERT gegevenstype wijzigt van varchar in int. In deze situatie kan de CONVERT component worden uitgevoerd voordat de WHERE component wordt uitgevoerd. Vaak is er een manier om uw weergave te wijzigen om de verschillende volgorde te voorkomen, als dit in uw geval van belang is.
Permissions
Voor het selecteren van gegevens is een machtiging vereist SELECT voor de tabel of weergave, die kan worden overgenomen van een hoger bereik, zoals SELECT machtigingen voor het schema of CONTROL de machtiging voor de tabel. Of vereist lidmaatschap van de db_datareader of db_owner vaste databaserollen of de vaste serverfunctie sysadmin . Voor het maken van een nieuwe tabel is SELECT INTO ook zowel de CREATE TABLE machtiging als de ALTER SCHEMA machtiging vereist voor het schema dat eigenaar is van de nieuwe tabel.
Examples
In de volgende voorbeelden wordt de database AdventureWorksPDW2022 gebruikt.
A. SELECT gebruiken om rijen en kolommen op te halen
In deze sectie ziet u drie codevoorbeelden. Dit eerste codevoorbeeld retourneert alle rijen (geen WHERE component is opgegeven) en alle kolommen (met behulp van de *) uit de DimEmployee tabel.
SELECT *
FROM DimEmployee
ORDER BY LastName;
In dit volgende voorbeeld wordt tabelalias gebruikt om hetzelfde resultaat te bereiken.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
In dit voorbeeld worden alle rijen (geen WHERE component opgegeven) en een subset van de kolommen (FirstName, LastName, StartDate) uit de DimEmployee tabel in de database AdventureWorksPDW2022 geretourneerd. De naam van de derde kolomkop wordt gewijzigd in FirstDay.
SELECT FirstName,
       LastName,
       StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
In dit voorbeeld worden alleen de rijen DimEmployee geretourneerd waarvoor een EndDate niet NULL en een MaritalStatus van M (getrouwd) is.
SELECT FirstName,
       LastName,
       StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
      AND MaritalStatus = 'M'
ORDER BY LastName;
B. SELECT gebruiken met kolomkoppen en berekeningen
In het volgende voorbeeld worden alle rijen uit de DimEmployee tabel geretourneerd en wordt de brutoloon voor elke werknemer berekend op basis van hun BaseRate en een werkweek van 40 uur.
SELECT FirstName,
       LastName,
       BaseRate,
       BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
C. DISTINCT gebruiken met SELECT
In het volgende voorbeeld wordt een DISTINCT lijst met alle unieke titels in de DimEmployee tabel gegenereerd.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
D. GROUP BY gebruiken
In het volgende voorbeeld wordt het totale bedrag voor alle verkopen per dag gevonden.
SELECT OrderDateKey,
       SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
Vanwege de GROUP BY component wordt slechts één rij met de som van alle verkopen voor elke dag geretourneerd.
E. GROUP BY gebruiken met meerdere groepen
In het volgende voorbeeld vindt u de gemiddelde prijs en de som van de internetverkopen voor elke dag, gegroepeerd op orderdatum en de promotiesleutel.
SELECT OrderDateKey,
       PromotionKey,
       AVG(SalesAmount) AS AvgSales,
       SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
F. GROUP BY en WHERE gebruiken
In het volgende voorbeeld worden de resultaten in groepen geplaatst na het ophalen van alleen de rijen met orderdatums later dan 1 augustus 2002.
SELECT OrderDateKey,
       SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
G. GROUP BY gebruiken met een expressie
In het volgende voorbeeld wordt gegroepeerd op een expressie. U kunt groeperen op een expressie als de expressie geen statistische functies bevat.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
H. GROUP BY gebruiken met ORDER BY
In het volgende voorbeeld wordt de som van de verkoop per dag en orders per dag gevonden.
SELECT OrderDateKey,
       SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
I. De HAVING-component gebruiken
Deze query maakt gebruik van de HAVING component om de resultaten te beperken.
SELECT OrderDateKey,
       SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;