Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma Analítica (PDW)
Ponto de extremidade de análise SQL no Microsoft Fabric
Warehouse no Microsoft Fabric
Banco de dados SQL no Microsoft Fabric Preview
Recupera linhas do banco de dados e permite a seleção de uma ou várias linhas ou colunas de uma ou várias tabelas no Mecanismo de Banco de Dados do SQL Server. A sintaxe completa da instrução é complexa SELECT
, mas as cláusulas principais podem ser resumidas da seguinte forma:
[ COM { [ XMLNAMESPACES , ] [ common_table_expression ] } ]
SELECIONE select_list [ EM new_table ]
[ DO table_source ] [ ONDE search_condition ]
[ GRUPO POR group_by_expression ]
[ ENCOMENDAR POR order_expression [ ASC | DESC ] ]
Os operadores UNION,EXCETION e INTERSECT podem ser usados entre consultas para combinar ou comparar seus resultados em um conjunto de resultados.
Transact-SQL convenções de sintaxe
Syntax
Sintaxe do SQL Server e do Banco de Dados SQL do Azure:
<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> ]
[ ; ]
Sintaxe para o Azure Synapse Analytics e Parallel Data Warehouse e 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
Devido à complexidade da instrução, elementos de sintaxe detalhados e argumentos são mostrados SELECT
por cláusula:
- WITH XMLNAMESPACES
- HAVING
- WITH common_table_expression
- UNION
- SELECT clause
- EXCETO e INTERSEÇÃO
- INTO clause
- ORDER BY
- FROM
- FOR clause
- WHERE
- OPTION clause
- GROUP BY
A ordem das cláusulas do enunciado SELECT
é significativa. Qualquer uma das cláusulas facultativas pode ser omitida, mas quando as cláusulas facultativas são utilizadas, devem aparecer na ordem adequada.
SELECT
As instruções são permitidas em funções definidas pelo usuário somente se as listas de seleção dessas instruções contiverem expressões que atribuam valores a variáveis que são locais para as funções.
Um nome de quatro partes construído com a OPENDATASOURCE
função como a parte de nome do servidor pode ser usado como uma fonte de tabela sempre que um nome de tabela pode aparecer em uma SELECT
instrução. Um nome de quatro partes não pode ser especificado para o Banco de Dados SQL do Azure.
Algumas restrições de sintaxe se aplicam a SELECT
instruções que envolvem tabelas remotas.
Ordem lógica de processamento da instrução SELECT
As etapas a seguir mostram a ordem lógica de processamento, ou ordem de vinculação, para uma SELECT
instrução. Esta ordem determina quando os objetos definidos em uma etapa são disponibilizados para as cláusulas nas etapas subsequentes. Por exemplo, se o processador de consultas puder vincular (acessar) as tabelas ou exibições definidas na FROM
cláusula, esses objetos e suas colunas serão disponibilizados para todas as etapas subsequentes. Por outro lado, como a cláusula é a SELECT
etapa 8, quaisquer aliases de coluna ou colunas derivadas definidas nessa cláusula não podem ser referenciadas por cláusulas anteriores. No entanto, podem ser referenciados por cláusulas subsequentes, como a ORDER BY
cláusula. O processador de consultas determina a execução física real da instrução e a ordem pode variar dessa lista.
FROM
ON
JOIN
WHERE
GROUP BY
-
WITH CUBE
ouWITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Warning
Há casos incomuns em que a sequência anterior pode diferir. Suponha que você tenha um índice clusterizado em um modo de exibição e o modo de exibição exclua algumas linhas da tabela, e a lista de SELECT
colunas do modo de exibição use um CONVERT
que altera um tipo de dados de varchar para int. Nessa situação, o pode executar antes que a CONVERT
WHERE
cláusula seja executada. Muitas vezes, há uma maneira de modificar sua exibição para evitar a sequência diferente, se isso for importante no seu caso.
Permissions
A seleção de dados requer SELECT
permissão na tabela ou exibição, que pode ser herdada de um escopo mais alto, como SELECT
permissão no esquema ou CONTROL
permissão na tabela. Ou requer associação às funções de banco de dados fixas db_datareader ou db_owner ou à função de servidor fixa sysadmin . Criar uma nova tabela usando SELECT INTO
também requer a CREATE TABLE
permissão e a ALTER SCHEMA
permissão no esquema que possui a nova tabela.
Examples
Os exemplos a seguir usam o banco de dados AdventureWorksPDW2022 .
A. Use SELECT para recuperar linhas e colunas
Esta seção mostra três exemplos de código. Este primeiro exemplo de código retorna todas as linhas (nenhuma WHERE
cláusula é especificada) e todas as colunas (usando o *
) da DimEmployee
tabela.
SELECT *
FROM DimEmployee
ORDER BY LastName;
Este próximo exemplo usa aliasing de tabela para obter o mesmo resultado.
SELECT e.*
FROM DimEmployee AS e
ORDER BY LastName;
Este exemplo retorna todas as linhas (nenhuma WHERE
cláusula é especificada) e um subconjunto das colunas (FirstName
, LastName
, StartDate
) da DimEmployee
tabela no banco de dados AdventureWorksPDW2022 . O título da terceira coluna é renomeado para FirstDay
.
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
ORDER BY LastName;
Este exemplo retorna apenas as linhas que têm um EndDate
que não NULL
é e um MaritalStatus
de (casado M
).DimEmployee
SELECT FirstName,
LastName,
StartDate AS FirstDay
FROM DimEmployee
WHERE EndDate IS NOT NULL
AND MaritalStatus = 'M'
ORDER BY LastName;
B. Use SELECT com cabeçalhos de coluna e cálculos
O exemplo a seguir retorna todas as linhas da DimEmployee
tabela e calcula o salário bruto de cada funcionário com base em sua BaseRate
semana de trabalho de 40 horas.
SELECT FirstName,
LastName,
BaseRate,
BaseRate * 40 AS GrossPay
FROM DimEmployee
ORDER BY LastName;
C. Use DISTINCT com SELECT
O exemplo a seguir usa DISTINCT
para gerar uma lista de todos os títulos exclusivos na DimEmployee
tabela.
SELECT DISTINCT Title
FROM DimEmployee
ORDER BY Title;
D. Use GROUP BY
O exemplo a seguir localiza o valor total de todas as vendas em cada dia.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
Devido à GROUP BY
cláusula, apenas uma linha contendo a soma de todas as vendas é devolvida para cada dia.
E. Usar GROUP BY com vários grupos
O exemplo a seguir localiza o preço médio e a soma das vendas pela Internet para cada dia, agrupados por data do pedido e chave de promoção.
SELECT OrderDateKey,
PromotionKey,
AVG(SalesAmount) AS AvgSales,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey, PromotionKey
ORDER BY OrderDateKey;
F. Use GROUP BY e WHERE
O exemplo a seguir coloca os resultados em grupos depois de recuperar apenas as linhas com datas de ordem posteriores a 1º de agosto de 2002.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
WHERE OrderDateKey > '20020801'
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
G. Usar GROUP BY com uma expressão
O exemplo a seguir agrupa por uma expressão. Você pode agrupar por uma expressão se a expressão não incluir funções agregadas.
SELECT SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY (OrderDateKey * 10);
H. Use GROUP BY com ORDER BY
O exemplo a seguir localiza a soma de vendas por dia e pedidos por dia.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey;
I. Use a cláusula HAVING
Esta consulta usa a HAVING
cláusula para restringir os resultados.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
HAVING OrderDateKey > 20010000
ORDER BY OrderDateKey;