Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Lekéri a sorokat az adatbázisból, és lehetővé teszi egy vagy több sor vagy oszlop kiválasztását az SQL Server adatbázismotor egy vagy több táblájából. Az utasítás teljes szintaxisa SELECT összetett, de a fő záradékok a következőképpen foglalhatók össze:
[ WITH { [ XMLNAMESPACES , ] [ common_table_expression ] } ]
VÁLASZD select_list [ BEFELÉ new_table ]
[ A table_source ] [ HOL search_condition ]
[ CSOPORTOS group_by_expression ]
[ RENDELÉS order_expression [ ASC | LEÍRÁS ] ]
Az UNION, a EXCEPT és az INTERSECT operátorok a lekérdezések között használhatók az eredmények egyetlen eredményhalmazba való összevonására vagy összehasonlítására.
Transact-SQL szintaxis konvenciók
Syntax
Az SQL Server és az Azure SQL Database szintaxisa:
<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> ]
[ ; ]
Az Azure Synapse Analytics és a párhuzamos adattárház és a Microsoft Fabric szintaxisa:
[ 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
Az utasítás összetettsége miatt záradékonként SELECT részletes szintaxiselemek és argumentumok jelennek meg:
- XMLNAMESPACE-ekkel
- HAVING
- COMMON_TABLE_EXPRESSION
- UNION
- SELECT záradék
- KIVÉVE és METSZÉS
- INTO záradék
- RENDEZÉS
- FROM
- FOR záradék
- WHERE
- OPTION záradék
- CSOPORTOS ÖSSZEÁLLÍTÁS
Az utasításban szereplő SELECT záradékok sorrendje jelentős. Az opcionális záradékok bármelyike kihagyható, de a választható záradékok használatakor a megfelelő sorrendben kell megjelenniük.
SELECT az utasítások csak akkor engedélyezettek a felhasználó által definiált függvényekben, ha az utasítások választólistái olyan kifejezéseket tartalmaznak, amelyek értékeket rendelnek a függvényekhez helyi változókhoz.
A kiszolgálónév részként a függvényrel OPENDATASOURCE létrehozott négyrészes név táblaforrásként használható, ahol egy táblanév megjeleníthető egy SELECT utasításban. Az Azure SQL Database-hez nem adható meg négyrészes név.
Bizonyos szintaxiskorlátozások távoli táblákat tartalmazó utasításokra SELECT vonatkoznak.
A SELECT utasítás logikai feldolgozási sorrendje
Az alábbi lépések egy utasítás logikai feldolgozási sorrendjét vagy kötési sorrendjét SELECT mutatják be. Ez a sorrend határozza meg, hogy az egy lépésben definiált objektumok mikor lesznek elérhetők a következő lépések záradékai számára. Ha például a lekérdezésfeldolgozó a záradékban FROM meghatározott táblákhoz vagy nézetekhez tud kapcsolódni (hozzáférni), akkor ezek az objektumok és oszlopaik minden további lépéshez elérhetővé válnak. Ezzel szemben, mivel a záradék a SELECT 8. lépés, a záradékban definiált oszlop-aliasokra vagy származtatott oszlopokra nem lehet hivatkozni az előző záradékokkal. Ezekre azonban hivatkozhatnak további záradékokkal, például a ORDER BY záradékkal. A lekérdezésfeldolgozó határozza meg az utasítás tényleges fizikai végrehajtását, és a sorrend eltérhet a listától.
FROMONJOINWHEREGROUP BY-
WITH CUBEvagyWITH ROLLUP HAVINGSELECTDISTINCTORDER BYTOP
Warning
Ritkán előfordul, hogy az előző sorozat eltérő lehet. Tegyük fel, hogy van egy fürtözött indexe egy nézetben, és a nézet kizár néhány táblázatsort, és a nézet oszloplistája SELECT olyan adattípust CONVERT használ, amely a varcharrólint értékre módosítja az adattípust. Ebben az esetben a CONVERT záradék végrehajtása előtt WHERE végrehajtható. Gyakran van mód arra, hogy módosítsa a nézetet, hogy elkerülje a különböző sorrendet, ha ez számít az Ön esetében.
Permissions
Az adatok kiválasztásához engedélyre van szükség SELECT a táblában vagy a nézetben, amely egy magasabb hatókörből örökölhető, például SELECT a sémára vagy CONTROL a tábla engedélyére. Vagy tagságot igényel a db_datareader vagy db_owner rögzített adatbázis-szerepkörökben, vagy a sysadmin rögzített kiszolgálói szerepkörben. Az új tábla létrehozásához SELECT INTO az CREATE TABLE engedély és az ALTER SCHEMA új táblát birtokló séma engedélye is szükséges.
Examples
Az alábbi példák az AdventureWorksPDW2022 adatbázist használják.
A. Sorok és oszlopok lekérése a SELECT használatával
Ez a szakasz három példakódot mutat be. Ez az első példakód az összes sort visszaadja (nincs WHERE megadva záradék), és a tábla összes oszlopát (a *használatával).DimEmployee
SELECT *
FROM DimEmployee
ORDER BY LastName;
Ez a következő példa táblaaliasítást használ ugyanahhoz az eredményhez.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
Ez a példa az WHERE adatbázis táblájának FirstName összes sorát (nincs LastName megadva záradék) és az oszlopok (StartDate, DimEmployee, ) egy részhalmazát adja vissza. A harmadik oszlopfejléc átnevezve a következőre FirstDay: .
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
Ez a példa csak azokat a sorokat adja vissza, amelyek nem DimEmployeeEndDateNULL és a (házas) sorokkal MaritalStatus rendelkeznek.M
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
AND MaritalStatus = 'M'
ORDER BY LastName;
B. A SELECT használata oszlopfejlécekkel és számításokkal
Az alábbi példa a DimEmployee táblázat összes sorát visszaadja, és kiszámítja az egyes alkalmazottak bruttó bérét a 40 órás munkahét alapján BaseRate .
SELECT FirstName,
LastName,
BaseRate,
BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
C. A DISTINCT használata a SELECT használatával
Az alábbi példa a tábla összes egyedi címének DISTINCT listáját hozza DimEmployee létre.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
D. A GROUP BY használata
Az alábbi példa az egyes napok összes értékesítésének teljes összegét keresi meg.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
A záradék miatt minden GROUP BY nap csak egy, az összes értékesítés összegét tartalmazó sort ad vissza a rendszer.
E. A GROUP BY használata több csoporttal
Az alábbi példa az egyes napok átlagos árát és internetes értékesítéseinek összegét keresi meg a rendelés dátuma és az előléptetési kulcs szerint csoportosítva.
SELECT OrderDateKey,
PromotionKey,
AVG(SalesAmount) AS AvgSales,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
F. A GROUP BY és a WHERE használata
Az alábbi példa az eredményeket csoportokba helyezi, miután csak a 2002.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
G. A GROUP BY használata kifejezéssel
Az alábbi példa egy kifejezés szerint csoportosítja a csoportokat. Ha a kifejezés nem tartalmaz összesítő függvényeket, kifejezés szerint csoportosíthat.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
H. A GROUP BY és az ORDER BY használata
Az alábbi példa az értékesítések napi összegét, a rendeléseket pedig a nap szerint határozza meg.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
I. A HAVING záradék használata
Ez a lekérdezés a HAVING záradék használatával korlátozza az eredményeket.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;