SELECT Clause (Transact-SQL)
Specifica le colonne che devono essere restituite dalla query.
Convenzioni della sintassi Transact-SQL
Sintassi
SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ]
<select_list>
<select_list> ::=
{
| { table_name | view_name | table_alias }.*
| {
[ { table_name | view_name | table_alias }. ]
{ column_name | $IDENTITY | $ROWGUID }
| udt_column_name [ { . | :: } { { property_name | field_name }
| method_name ( argument [ ,...n] ) } ]
| expression
[ [ AS ] column_alias ]
}
| column_alias = expression
} [ ,...n ]
Argomenti
- ALL
Specifica che nel set di risultati possono essere visualizzate righe duplicate. Il valore predefinito è ALL.
- DISTINCT
Specifica che nel set di risultati devono essere visualizzate solo righe univoche. I valori Null vengono considerati valori uguali.
TOP expression [ PERCENT ] [ WITH TIES ]
Indica che dal set di risultati della query verrà restituito solamente un primo set specificato o una prima percentuale di righe specificata. expression può specificare un numero o una percentuale delle righe.La clausola TOP può essere utilizzata nelle istruzioni SELECT, INSERT, UPDATE e DELETE. Le parentesi che delimitano expression nella clausola TOP sono necessarie nelle istruzioni INSERT, UPDATE e DELETE. L'utilizzo di TOP expression senza parentesi nelle istruzioni SELECT è supportato per compatibilità con le versioni precedenti, ma non è tuttavia consigliato. Per ulteriori informazioni, vedere TOP (Transact-SQL).
- < select_list >
Colonne che si desidera selezionare per il set di risultati. Tale elenco è una serie di espressioni separate da virgola Il numero massimo di espressioni che è possibile specificare nell'elenco selezionato è 4096.
- *
Specifica che devono essere restituite tutte le colonne di tutte le tabelle e viste elencate nella clausola FROM. Le colonne vengono restituite in base alla tabella o vista, a seconda di quanto specificato nella clausola FROM, nello stesso ordine in cui sono visualizzate nella tabella o vista.
- table_ name| view_ name| table_ alias.*
Limita l'ambito dell'argomento * alla tabella o vista specificata.
- column_ name
Nome della colonna da restituire. Qualificare l'argomento column_name in modo da impedire riferimenti ambigui, come nel caso di due tabelle della clausola FROM che includono colonne con nomi duplicati. Ad esempio, entrambe le tabelle SalesOrderHeader e SalesOrderDetail nel database AdventureWorks hanno una colonna ModifiedDate. Se le due tabelle sono unite in join in una query, la data modificata delle voci SalesOrderDetail può essere specificata nell'elenco di selezione come SalesOrderDetail.ModifiedDate.
- expression
Costante, funzione o qualsiasi combinazione di nomi di colonna, costanti e funzioni concatenati da uno o più operatori oppure da una subquery.
$IDENTITY
Restituisce la colonna Identity. Per ulteriori informazioni, vedere IDENTITY (proprietà) (Transact-SQL), ALTER TABLE (Transact-SQL) e CREATE TABLE (Transact-SQL).Se più tabelle della clausola FROM includono una colonna con la proprietà IDENTITY, è necessario qualificare la funzione $IDENTITY con il nome della tabella, ad esempio T1.$IDENTITY.
$ROWGUID
Restituisce la colonna GUID della riga.Se più tabelle della clausola FROM includono la proprietà ROWGUIDCOL, è necessario qualificare $ROWGUID con il nome della tabella, ad esempio T1.$ROWGUID.
udt_column_name
Nome di colonna CLR (Common Language Runtime) definito dall'utente da restituire.[!NOTA] SQL Server Management Studio restituisce i valori dei tipi definiti dall'utente in una rappresentazione binaria. Per restituire i valori dei tipi definiti dall'utente in formato XML o stringa, utilizzare CAST o CONVERT.
- { . | :: }
Specifica un metodo, una proprietà o un campo CLR definito dall'utente. Utilizzare . per metodi, proprietà o campi (non statici) di un'istanza. Utilizzare :: per metodi, proprietà o campi statici. Per richiamare un metodo, una proprietà o un campo CLR definito dall'utente, è necessario disporre dell'autorizzazione EXECUTE per il tipo.
- property_name
Proprietà pubblica di udt_column_name.
- field_name
Membro dei dati pubblici di udt_column_name.
method_name
Metodo pubblico di udt_column_name che accetta uno o più argomenti. method_name non può essere un metodo mutatore.Nell'esempio seguente vengono selezionati i valori per la colonna
Location
, definita come tipopoint
, dalla tabellaCities
, richiamando un metodo del tipoDistance
:CREATE TABLE Cities ( Name varchar(20), State varchar(20), Location point ); GO DECLARE @p point (32, 23), @distance float GO SELECT Location.Distance (@p) FROM Cities;
column_ alias
Nome alternativo per la colonna specificata nel set di risultati della query. Per una colonna denominata quantity, ad esempio, è possibile specificare come alias Quantity, Quantity to Date o Qty.Gli alias vengono utilizzati inoltre come nomi dei risultati di espressioni, ad esempio:
USE AdventureWorks
;GO
SELECT AVG(UnitPrice) AS 'Average Price'
FROM Sales.SalesOrderDetail;
È possibile utilizzare column_alias in una clausola ORDER BY, ma non in una clausola WHERE, GROUP BY o HAVING. Se l'espressione della query fa parte di un'istruzione DECLARE CURSOR, non è possibile includere l'argomento column_alias nella clausola FOR UPDATE.
Osservazioni
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.
La clausola OPTION non è consentita nelle viste.
È possibile accedere a una variabile table, nell'ambito corrispondente, come a una normale tabella. La variabile può essere pertanto utilizzata come origine di tabella in un'istruzione SELECT.
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 che coinvolgono tabelle remote sono previste alcune limitazioni della sintassi. Per ulteriori informazioni, vedere Linee guida per l'utilizzo di query distribuite.
La lunghezza dei dati restituiti per colonne di tipo text o ntext incluse nell'elenco di selezione viene impostata sul valore più basso tra i seguenti: dimensioni reali della colonna text, impostazione predefinita della sessione TEXTSIZE e limite dell'applicazione specificato a livello di codice. Per modificare la lunghezza del testo restituito per una sessione, utilizzare l'istruzione SET. Per impostazione predefinita il limite della lunghezza dei dati di testo restituiti con un'istruzione SELECT è pari a 4.000 byte.
In Motore di database di SQL Server 2005 viene generata l'eccezione 511 ed eseguito il rollback dell'istruzione in fase di esecuzione se si verifica una delle condizioni seguenti:
- L'istruzione SELECT produce una riga di risultati o una tabella di lavoro intermedia di dimensioni superiori a 8.060 byte.
- L'istruzione DELETE, INSERT o UPDATE tenta di eseguire un'azione in una riga di dimensioni superiori a 8.060 byte.
Se non si assegna un nome a una colonna creata con un'istruzione SELECT INTO o CREATE VIEW, viene generato un errore.
Selezione di colonne Identity
Quando viene selezionata una colonna Identity esistente in una nuova tabella, la nuova colonna eredita la proprietà IDENTITY, a meno che non si verifichi una delle seguenti condizioni:
- L'istruzione SELECT include un join, una clausola GROUP BY o una funzione di aggregazione.
- Più istruzioni SELECT sono unite in join tramite l'operatore UNION.
- La colonna Identity è inclusa più di una volta nell'elenco di selezione.
- La colonna Identity fa parte di un'espressione.
Se una di queste condizioni risulta vera, la colonna viene creata come colonna NOT NULL, anziché ereditare la proprietà IDENTITY. Alla nuova tabella vengono applicate tutte le regole e le restrizioni delle colonne Identity.
Outer join vecchio stile
Le versioni precedenti di SQL Server supportano la definizione di outer join che utilizzano gli operatori *= e =* nella clausola WHERE. SQL Server versione 7.0 supporta lo standard SQL-92, che prevede l'utilizzo di operatori di join nella clausola FROM. Quando il livello di compatibilità del database è impostato su 90, gli operatori di outer join (*= e =*) non sono supportati.
Ordine di elaborazione di clausole WHERE, GROUP BY e HAVING
I processi seguenti illustrano l'ordine di elaborazione di un'istruzione SELECT con una clausola WHERE, una clausola GROUP BY e una clausola HAVING:
- La clausola FROM restituisce un set di risultati iniziale.
- La clausola WHERE esclude le righe che non soddisfano le condizioni di ricerca della clausola stessa.
- La clausola GROUP BY unisce le righe selezionate in un gruppo per ogni valore univoco della stessa clausola GROUP BY.
- Le funzioni di aggregazione specificate nell'elenco di selezione calcolano i valori di riepilogo per ogni gruppo.
- La clausola HAVING esclude inoltre righe che non soddisfano i criteri di ricerca della clausola stessa.
Autorizzazioni
Sono richieste l'appartenenza al ruolo predefinito del server sysadmin, ai ruoli predefiniti del database db_owner e db_datareader e la proprietà della tabella. I membri dei ruoli sysadmin, db_owner e db_securityadmin e il proprietario della tabella possono trasferire le autorizzazioni ad altri utenti.
Se viene utilizzata la clausola INTO per creare una tabella permanente, l'utente deve disporre dell'autorizzazione per l'istruzione CREATE TABLE nel database di destinazione.
Vedere anche
Riferimento
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DELETE (Transact-SQL)
EXECUTE (Transact-SQL)
Espressioni (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
table (Transact-SQL)
UNION (Transact-SQL)
UPDATE (Transact-SQL)
EXCEPT e INTERSECT (Transact-SQL)
WHERE (Transact-SQL)
Altre risorse
Query di ricerca full-text
Nozioni fondamentali sui join
Nozioni fondamentali sulle subquery
Utilizzo di variabili e parametri (Motore di database)
Utilizzo degli identificatori come nomi di oggetti