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.La sintassi completa dell'istruzione SELECT è complessa, ma le clausole principali sono le seguenti:
[ WITH { [ XMLNAMESPACES ,] [ <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.
Si applica a: SQL Server (da SQL Server 2008 alla versione corrente), Database SQL di Azure. |
Convenzioni della sintassi Transact-SQL
Sintassi
<SELECT statement> ::=
[ WITH { [ XMLNAMESPACES ,] [ <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 > ]
Note
A causa della complessità dell'istruzione SELECT, gli elementi della sintassi e gli argomenti dettagliati 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.Non è possibile specificare un nome in quattro parti per il Database SQL di Azure.
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.
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE o WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
Torna all'inizio
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, le autorizzazioni CREATETABLE e ALTERSCHEMA per lo schema proprietario della nuova tabella.