SELECT (Transact-SQL)

Recupera righe dal database e consente la selezione di una o più righe o colonne da una o più tabelle in SQL Server 2008 R2. La sintassi completa dell'istruzione SELECT è complessa, ma le clausole principali sono le seguenti:

[ 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 ] ]

È possibile utilizzare gli operatori UNION, EXCEPT e INTERSECT per combinare o confrontare i risultati di più query in un unico set di risultati.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

        <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 > ] 

Osservazioni

A causa della complessità dell'istruzione SELECT, gli elementi della sintassi e gli argomenti sono stati raggruppati e descritti in base alla clausola:

L'ordine delle clausole nell'istruzione SELECT è significativo. È possibile omettere qualsiasi clausola facoltativa, ma se tali clausole vengono utilizzate, è necessario specificarle nell'ordine corretto.

Le istruzioni SELECT sono consentite in funzioni definite dall'utente solo se gli elenchi di selezione di tali istruzioni includono espressioni per l'assegnazione di valori a variabili che sono locali rispetto alle funzioni.

Un nome composto da quattro parti costruito con la funzione OPENDATASOURCE come parte del nome di server può essere utilizzato come origine di tabella in qualsiasi punto di istruzioni SELECT in cui sono consentiti i nomi di tabella.

Per le istruzioni SELECT in cui sono coinvolte tabelle remote sono previste alcune limitazioni della sintassi. Per ulteriori informazioni, vedere Linee guida per l'utilizzo di query distribuite.

Ordine di elaborazione logica dell'istruzione SELECT

Nei passaggi seguenti viene mostrato l'ordine di elaborazione logica, o ordine di associazione, per un'istruzione SELECT. Questo ordine consente di determinare il momento in cui gli oggetti definiti in un passaggio diventano disponibili per le clausole dei passaggi successivi. Ad esempio, se è possibile eseguire l'associazione (ovvero consentire l'accesso) tra Query Processor e le tabelle o le viste definite nella clausola FROM, questi oggetti e le relative colonne vengono resi disponibili in tutti i passaggi successivi.  Al contrario, poiché la clausola SELECT si trova al passaggio 8, qualsiasi colonna derivata o alias di colonna definito in tale clausola non può essere utilizzato come riferimento dalle clausole precedenti, ma dalle clausole successive come ORDER BY. Si noti che l'esecuzione fisica effettiva dell'istruzione è determinata da Query Processor e l'ordine può variare rispetto a questo elenco.

  1. FROM

  2. ON

  3. JOIN

  4. WHERE

  5. GROUP BY

  6. WITH CUBE o WITH ROLLUP

  7. HAVING

  8. SELECT

  9. DISTINCT

  10. ORDER BY

  11. TOP

Autorizzazioni

La selezione di dati richiede l'autorizzazione SELECT per la tabella o la vista che potrebbe essere ereditata da un ambito più elevato, ad esempio l'autorizzazione SELECT per lo schema o l'autorizzazione CONTROL per la tabella. In alternativa è richiesta l'appartenenza al ruolo predefinito del database db_datareader o db_owner o al ruolo predefinito del server sysadmin. La creazione di una nuova tabella tramite SELECTINTO richiede inoltre sia l'autorizzazione CREATETABLE che l'autorizzazione ALTERSCHEMA per lo schema proprietario della nuova tabella.