Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Načte řádky z databáze a povolí výběr jednoho nebo více řádků nebo sloupců z jedné nebo více tabulek v databázovém stroji SQL Serveru. Úplná syntaxe SELECT příkazu je složitá, ale hlavní klauzule lze shrnout následujícím způsobem:
[ S { [ XMLNAMESPACES , ] [ common_table_expression ] } ] ]
VYBERTE select_list [ DO new_table ]
[ OD table_source ] [ KDE search_condition ]
[ SKUPINA OD group_by_expression ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Operátory UNION, EXCEPT a INTERSECT lze mezi dotazy použít ke kombinování nebo porovnání výsledků do jedné sady výsledků.
Syntax
Syntaxe pro SQL Server a 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> ]
[ ; ]
Syntaxe pro Azure Synapse Analytics a paralelní datový sklad a 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
Z důvodu složitosti SELECT příkazu se pro jednotlivé klauzule zobrazují podrobné prvky syntaxe a argumenty:
- S XMLNAMESPACES
- HAVING
- S common_table_expression
- UNION
- Klauzule SELECT
- KROMĚ A INTERSECT
- Klauzule INTO
- POŘADÍ
- FROM
- Klauzule FOR
- WHERE
- Klauzule OPTION
- SKUPINA
Pořadí klauzulí v SELECT příkazu je významné. Některou z volitelných klauzulí je možné vynechat, ale pokud se použijí volitelné klauzule, musí se zobrazit v příslušném pořadí.
SELECT příkazy jsou povoleny v uživatelem definovaných funkcích pouze v případě, že výběrové seznamy těchto příkazů obsahují výrazy, které přiřazují hodnoty proměnným, které jsou místním funkcím.
Čtyřdílný název vytvořený funkcí OPENDATASOURCE jako část název serveru lze použít jako zdroj tabulky, kdykoli se název tabulky může v SELECT příkazu objevit. Pro Službu Azure SQL Database není možné zadat název čtyřdílné části.
Některá omezení syntaxe se vztahují na SELECT příkazy, které zahrnují vzdálené tabulky.
Pořadí logického zpracování příkazu SELECT
Následující kroky ukazují pořadí logického zpracování nebo pořadí vazeb pro SELECT příkaz. Toto pořadí určuje, kdy jsou objekty definované v jednom kroku zpřístupněny klauzulemi v dalších krocích. Pokud například procesor dotazů může svázat (přístup) k tabulkám nebo zobrazením definovaným v FROM klauzuli, zpřístupní se tyto objekty a jejich sloupce všem následným krokům. Naopak vzhledem k tomu, že SELECT klauzule je krok 8, není možné odkazovat na aliasy sloupců ani odvozené sloupce definované v této klauzuli. Na tyto klauzule ale můžou odkazovat následující klauzule, jako ORDER BY je klauzule. Procesor dotazů určuje skutečné fyzické spuštění příkazu a pořadí se může lišit od tohoto seznamu.
FROMONJOINWHEREGROUP BY-
WITH CUBEneboWITH ROLLUP HAVINGSELECTDISTINCTORDER BYTOP
Warning
Existují neobvyklé případy, kdy se předchozí sekvence může lišit. Předpokládejme, že máte v zobrazení clusterovaný index a zobrazení vyloučí některé řádky tabulky a seznam sloupců zobrazení SELECT používá CONVERT datový typ, který změní datový typ z varchar na int. V takovém případě CONVERT se může provést před provedením WHERE klauzule. Často existuje způsob, jak změnit zobrazení, abyste se vyhnuli odlišné sekvenci, pokud je to v případě vašeho případu důležité.
Permissions
Výběr dat vyžaduje SELECT oprávnění k tabulce nebo zobrazení, které může být zděděno z vyššího oboru, například SELECT oprávnění ke schématu nebo CONTROL oprávnění k tabulce. Nebo vyžaduje členství v db_datareader nebo db_owner pevné databázové role nebo pevné role serveru správce systému . Vytvoření nové tabulky pomocí SELECT INTO také vyžaduje CREATE TABLE oprávnění i ALTER SCHEMA oprávnění ke schématu, které vlastní novou tabulku.
Examples
Následující příklady používají databázi AdventureWorksPDW2022 .
A. Použití příkazu SELECT k načtení řádků a sloupců
Tato část ukazuje tři příklady kódu. Tento první příklad kódu vrátí všechny řádky (není zadána klauzule WHERE ) a všechny sloupce (pomocí *) z DimEmployee tabulky.
SELECT *
FROM DimEmployee
ORDER BY LastName;
Tento další příklad s použitím aliasů tabulky k dosažení stejného výsledku.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
Tento příklad vrátí všechny řádky (není WHERE zadána klauzule) a podmnožinu sloupců (FirstName, LastName) StartDatez DimEmployee tabulky v databázi AdventureWorksPDW2022 . Nadpis třetího sloupce se přejmenuje na FirstDay.
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
Tento příklad vrátí pouze řádky DimEmployee , které mají EndDate ten, který není NULL a MaritalStatus ženatý M (ženatý).
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
AND MaritalStatus = 'M'
ORDER BY LastName;
B. Použití příkazu SELECT s záhlavími sloupců a výpočty
Následující příklad vrátí všechny řádky z DimEmployee tabulky a vypočítá hrubou mzdu každého zaměstnance na základě jejich BaseRate a 40hodinového pracovního týdne.
SELECT FirstName,
LastName,
BaseRate,
BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
C. Použití FUNKCE DISTINCT s select
Následující příklad používá DISTINCT k vygenerování seznamu všech jedinečných názvů v DimEmployee tabulce.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
D. Použití FUNKCE GROUP BY
Následující příklad najde celkovou částku pro všechny prodeje každý den.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
GROUP BY Z důvodu klauzule se pro každý den vrátí jenom jeden řádek obsahující součet všech prodejů.
E. Použití GROUP BY s více skupinami
Následující příklad najde průměrnou cenu a součet internetových prodejů za každý den, seskupený podle data objednávky a klíče propagační akce.
SELECT OrderDateKey,
PromotionKey,
AVG(SalesAmount) AS AvgSales,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
F. Použití FUNKCE GROUP BY a WHERE
Následující příklad vloží výsledky do skupin po načtení pouze řádků s daty objednávky pozdější než 1. srpna 2002.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
G. Použití FUNKCE GROUP BY s výrazem
Následující příklad seskupí podle výrazu. Pokud výraz neobsahuje agregační funkce, můžete ho seskupit podle výrazu.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
H. Použití GROUP BY s ORDER BY
Následující příklad najde součet prodejů za den a objednávky podle dne.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
I. Použití klauzule HAVING
Tento dotaz používá klauzuli HAVING k omezení výsledků.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;