Share via


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 2012. 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 argomento Convenzioni della sintassi Transact-SQL

Sintassi

<SELECT statement> ::=  
    [WITH <common_table_expression> [,...n]]
    <query_expression> 
    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } 
  [ ,...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 dettagliati sono stati raggruppati e descritti in base alla clausola:

WITH common_table_expression

HAVING

Clausola SELECT

UNION

Clausola INTO

EXCEPT e INTERSECT

FROM

ORDER BY

WHERE

Clausola FOR

GROUP BY

Clausola OPTION

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.

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 vengono resi disponibili per le clausole nei passaggi successivi. Ad esempio, se Query Processor può essere associato alle tabelle o alle viste definite nella clausola FROM, ovvero gli viene consentito l'accesso, questi oggetti e le relative colonne vengono resi disponibili in tutti i passaggi successivi. Invece, poiché la clausola SELECT si trova al passaggio 8, tramite le clausole precedenti non è possibile fare riferimento a qualsiasi alias di colonna o colonna derivata definito in tale clausola. Tuttavia, è possibile farvi riferimento tramite clausole successive, ad esempio ORDER BY. Si noti che l'esecuzione fisica effettiva dell'istruzione viene determinata da Query Processor e l'ordine potrebbe essere diverso 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 SELECT INTO richiede inoltre sia l'autorizzazione CREATE TABLE che l'autorizzazione ALTER SCHEMA per lo schema proprietario della nuova tabella.

Vedere anche

Riferimento

Esempi di istruzioni SELECT (Transact-SQL)