SELECT (Transact-SQL)

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 SQL Server 2008 R2. A sintaxe completa da instrução SELECT é complexa, mas as cláusulas principais podem ser assim resumidas:

[ WITH <common_table_expression>]

SELECT select_list [ INTO new_table ]

[ FROM table_source ] [ WHERE search_condition ]

[ GROUP BY group_by_expression ]

[ HAVING search_condition ]

[ ORDER BY order_expression [ ASC | DESC ] ]

Os operadores UNION, EXCEPT e INTERSECT podem ser usados entre consultas para combinar ou comparar os resultados em um único conjunto de resultados.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

        <SELECT statement> ::=  

    [WITH <common_table_expression> [,...n]]
    <query_expression> 
    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } 
  [ ,...n ] ] 
    [ COMPUTE 
  { { AVG | COUNT | MAX | MIN | SUM } (expression )} [ ,...n ] 
  [ BY expression [ ,...n ] ] 
    ] 
    [ <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 > ] 

Comentários

Por causa da complexidade da instrução SELECT, elementos de sintaxe detalhados e argumentos são mostrados pela cláusula:

A ordem das cláusulas na instrução SELECT é significativa. Qualquer uma das cláusulas opcionais pode ser omitida, mas quando elas são usadas devem aparecer na ordem apropriada.

As instruções SELECT só serão permitidas em funções definidas pelo usuário se as listas de seleção dessas instruções contiverem expressões que atribuam valores a variáveis que são locais a essas funções.

Um nome de quatro partes construído com a função OPENDATASOURCE como a parte do nome do servidor pode ser usado como origem de tabela onde quer que um nome de tabela possa aparecer em uma instrução SELECT.

Algumas restrições de sintaxe se aplicam a instruções SELECT que envolvem tabelas remotas. Para obter mais informações, consulte Diretrizes para uso de consultas distribuídas.

Ordem lógica de processamento da instrução SELECT

As etapas seguintes mostram a ordem lógica de processamento, ou ordem de associação, para uma instrução SELECT. Esta ordem determina quando os objetos definidos em uma etapa são disponibilizados para as cláusulas em etapas subsequentes. Por exemplo, se o processador de consulta pode associar a (acessar) as tabelas ou exibições definidas na cláusula FROM, estes objetos e suas colunas são disponibilizados para todas as etapas subsequentes.  Por outro lado, como a cláusula SELECT é a etapa 8, os aliases de coluna ou colunas derivadas definidas na cláusula não podem ser referenciados por cláusulas anteriores. Porém, eles podem ser referenciados por cláusulas subsequentes como a cláusula ORDER BY. Observe que a execução física real da instrução é determinada pelo processador de consulta e a ordem pode variar desta lista.

  1. FROM

  2. ON

  3. JOIN

  4. WHERE

  5. GROUP BY

  6. WITH CUBE ou WITH ROLLUP

  7. HAVING

  8. SELECT

  9. DISTINCT

  10. ORDER BY

  11. TOP

Permissões

A seleção de dados requer a permissão SELECT na tabela ou exibição, que pode ser herdada de um escopo superior, como a permissão SELECT no esquema ou a permissão CONTROL na tabela. Ou exige associação nas funções de banco de dados fixas db_datareader ou db_owner, ou na função de servidor fixa sysadmin. A criação de uma nova tabela usando SELECTINTO também exige as permissões CREATETABLE e ALTERSCHEMA no esquema proprietário da nova tabela.

Consulte também

Referência