Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric (wersja zapoznawcza)
Pobiera wiersze z bazy danych i umożliwia wybór jednego lub wielu wierszy lub kolumn z jednej lub wielu tabel w a aparatu bazy danych programu SQL Server. Pełna składnia SELECT
instrukcji jest złożona, ale główne klauzule można podsumować w następujący sposób:
[ Z { [ XMLNAMESPACES , ] [ common_table_expression ] } ]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ GDZIE search_condition ]
[ GRUPUJ WEDŁUG group_by_expression ]
[ POSIADANIE search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Operatory UNION, EXCEPT i INTERSECT mogą służyć między zapytaniami w celu łączenia lub porównywania wyników z jednym zestawem wyników.
Transact-SQL konwencje składni
Syntax
Składnia dla programu SQL Server i usługi 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> ]
[ ; ]
Składnia dla usług Azure Synapse Analytics i Parallel Data Warehouse i 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
Ze względu na złożoność SELECT
instrukcji, szczegółowe elementy składni i argumenty są wyświetlane na klauzulę:
- WITH XMLNAMESPACES
- HAVING
- WITH common_table_expression
- UNION
- SELECT clause
- WYJĄTEK i PRZECIĘCIE
- INTO clause
- ORDER BY
- FROM
- FOR clause
- WHERE
- OPTION clause
- GROUP BY
Kolejność klauzul w instrukcji SELECT
jest znacząca. Można pominąć jedną z klauzul opcjonalnych, ale gdy są używane klauzule opcjonalne, muszą one być wyświetlane w odpowiedniej kolejności.
SELECT
instrukcje są dozwolone w funkcjach zdefiniowanych przez użytkownika tylko wtedy, gdy listy select tych instrukcji zawierają wyrażenia, które przypisują wartości do zmiennych lokalnych do funkcji.
Czteroczęściowa nazwa skonstruowana z funkcją OPENDATASOURCE
jako część nazwa-serwera może być używana jako źródło tabeli, gdzie niezależnie od nazwy tabeli może być wyświetlana SELECT
w instrukcji . Nie można określić nazwy czteroczęściowej dla usługi Azure SQL Database.
Niektóre ograniczenia składni dotyczą SELECT
instrukcji obejmujących tabele zdalne.
Kolejność przetwarzania logicznego instrukcji SELECT
Poniższe kroki pokazują kolejność przetwarzania logicznego lub kolejność powiązania dla instrukcji SELECT
. Ta kolejność określa, kiedy obiekty zdefiniowane w jednym kroku są udostępniane klauzulom w kolejnych krokach. Jeśli na przykład procesor zapytań może powiązać (uzyskać dostęp) do tabel lub widoków zdefiniowanych w FROM
klauzuli, te obiekty i ich kolumny są udostępniane wszystkim kolejnym krokom. Z drugiej strony, ponieważ klauzula SELECT
jest krokiem 8, nie można odwoływać się do wszystkich aliasów kolumn lub kolumn pochodnych zdefiniowanych w tej klauzuli przez powyższe klauzule. Można jednak odwoływać się do nich przy użyciu kolejnych klauzul, takich jak klauzula ORDER BY
. Procesor zapytań określa rzeczywiste fizyczne wykonanie instrukcji, a kolejność może się różnić od tej listy.
FROM
ON
JOIN
WHERE
GROUP BY
-
WITH CUBE
lubWITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Warning
Istnieją rzadkie przypadki, w których poprzednia sekwencja może się różnić. Załóżmy, że masz indeks klastrowany w widoku, a widok wyklucza niektóre wiersze tabeli, a lista kolumn widoku SELECT
używa elementu , który zmienia CONVERT
typ danych z varchar na int. W takiej sytuacji CONVERT
parametr może zostać wykonany przed wykonaniem klauzuli WHERE
. Często istnieje sposób modyfikowania widoku, aby uniknąć innej sekwencji, jeśli ma to znaczenie w Twoim przypadku.
Permissions
Wybranie danych wymaga SELECT
uprawnień do tabeli lub widoku, które mogą być dziedziczone z wyższego zakresu, takiego jak SELECT
uprawnienie do schematu lub CONTROL
uprawnienia w tabeli. Lub wymaga członkostwa w db_datareader lub db_owner stałych ról bazy danych lub stałej roli serwera sysadmin . Utworzenie nowej tabeli przy użyciu SELECT INTO
również wymaga CREATE TABLE
uprawnień oraz ALTER SCHEMA
uprawnienia do schematu, który jest właścicielem nowej tabeli.
Examples
W poniższych przykładach użyto bazy danych AdventureWorksPDW2022 .
A. Użyj polecenia SELECT, aby pobrać wiersze i kolumny
W tej sekcji przedstawiono trzy przykłady kodu. Ten pierwszy przykład kodu zwraca wszystkie wiersze (nie WHERE
określono klauzuli) i wszystkie kolumny (przy użyciu *
elementu ) z DimEmployee
tabeli.
SELECT *
FROM DimEmployee
ORDER BY LastName;
W następnym przykładzie użyjemy aliasu tabeli, aby uzyskać ten sam wynik.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
Ten przykład zwraca wszystkie wiersze (nie WHERE
określono klauzuli) i podzbiór kolumn (FirstName
, LastName
, StartDate
) z DimEmployee
tabeli w bazie danych AdventureWorksPDW2022 . Nazwa trzeciego nagłówka kolumny została zmieniona na FirstDay
.
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
W tym przykładzie zwracane są tylko wiersze, dla DimEmployee
których element ma EndDate
wartość nie NULL
i wartość MaritalStatus
M
(żonaty).
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
AND MaritalStatus = 'M'
ORDER BY LastName;
B. Używanie funkcji SELECT z nagłówkami i obliczeniami kolumn
Poniższy przykład zwraca wszystkie wiersze z DimEmployee
tabeli i oblicza wynagrodzenie brutto dla każdego pracownika na podstawie ich BaseRate
i 40-godzinnego tygodnia roboczego.
SELECT FirstName,
LastName,
BaseRate,
BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
C. Używanie funkcji DISTINCT z funkcją SELECT
W poniższym przykładzie użyto DISTINCT
metody do wygenerowania listy wszystkich unikatowych tytułów w DimEmployee
tabeli.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
D. Używanie funkcji GROUP BY
Poniższy przykład znajduje łączną kwotę dla wszystkich sprzedaży każdego dnia.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
Ze względu na klauzulę GROUP BY
zwracany jest tylko jeden wiersz zawierający sumę wszystkich sprzedaży każdego dnia.
E. Używanie funkcji GROUP BY z wieloma grupami
W poniższym przykładzie znajduje się średnia cena i suma sprzedaży internetowej dla każdego dnia, pogrupowana według daty zamówienia i klucza promocji.
SELECT OrderDateKey,
PromotionKey,
AVG(SalesAmount) AS AvgSales,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
F. Używanie funkcji GROUP BY i WHERE
Poniższy przykład umieszcza wyniki w grupach po pobraniu tylko wierszy z datami zamówienia później niż 1 sierpnia 2002 r.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
G. Używanie funkcji GROUP BY z wyrażeniem
Poniższe przykładowe grupy według wyrażenia. Możesz grupować według wyrażenia, jeśli wyrażenie nie zawiera funkcji agregujących.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
H. Używanie funkcji GROUP BY z usługą ORDER BY
W poniższym przykładzie znajduje się suma sprzedaży dziennie i zamówienia według dnia.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
I. Używanie klauzuli HAVING
To zapytanie używa klauzuli , HAVING
aby ograniczyć wyniki.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;