2010-11-12 14 views
89

È possibile impostare alias di tabella in SQL digitando l'identificatore subito dopo il nome della tabella.Qual è lo scopo della parola chiave SQL "AS"?

SELECT * FROM table t1; 

È anche possibile utilizzare la parola chiave AS per indicare l'alias.

SELECT * FROM table AS t1; 

Qual è la differenza tra loro se del caso?

Vedo che le vecchie persone DBA tendono a scrivere istruzioni senza AS, ma la maggior parte delle nuove esercitazioni la usano.

Aggiornamento: So qual è lo scopo degli alias di tabelle e colonne. Sono curioso, qual è la ragione di avere una parola chiave separata per impostare alias mentre funziona anche senza.

+10

Da http://msdn.microsoft.com/en-us/library/ms179300.aspx * Il La clausola AS è la sintassi definita nello standard ISO per l'assegnazione di un nome a una colonna del set di risultati. Questa è la sintassi preferita da utilizzare in SQL Server 2005. * –

+3

Viene anche utilizzato per separare la dichiarazione di una procedura con il relativo script. 'CREATE PROC Test @ Param1 INT AS SELECT @ Param1' –

risposta

81

Non c'è alcuna differenza tra le due affermazioni di cui sopra. AS è solo un modo più esplicito di citare l'alias

+33

E l'esplicito è sempre buono: P – annakata

+4

In realtà, non c'è alcuna differenza in SQL, ma alcuni strumenti/librerie dipendenti possono essere dipendenti da questa piccola parola chiave. Ad esempio: JDBC 4.0. A seconda dell'uso di alias w/'AS causa' e non si riceverà un comportamento diverso - consultare questa risposta http://stackoverflow.com/a/4271250/814304. Mi piacerebbe raccomandare SEMPRE utilizzare la forma completa di semantica per evitare tali problemi. – iMysak

+0

Posso avere alias per più di una colonna? come, due colonne con singoli alias? – Keynes

3

È un modo formale di specificare un nome di correlazione per un'entità in modo che sia possibile risolverlo facilmente in un'altra parte della query.

4

L'utilizzo è più evidente se non si usa 'SELECT *' (che è una cattiva abitudine si dovrebbe uscire):

SELECT t1.colA, t2.colB, t3.colC FROM alongtablename AS t1, anotherlongtablename AS t2, yetanotherlongtablename AS t3 WHERE t1.colD = t2.colE... 
+1

So qual è lo scopo degli alias di tabella. Sono curioso, qual è la ragione di avere una parola chiave separata per impostare alias mentre funziona anche senza. –

10

La parola chiave AS deve assegnare un nome ALIAS alla tabella del database o alla colonna della tabella. Nel tuo esempio, entrambe le istruzioni sono corrette ma ci sono circostanze in cui è necessaria la clausola AS (sebbene l'operatore AS sia facoltativo), ad es.

SELECT salary * 2 AS "Double salary" FROM employee; 

In questo caso, la tabella Employee ha una colonna salary e vogliamo solo il doppio dello stipendio con un nuovo nome Double Salary.

Scusa se la mia spiegazione non è efficace.


Aggiornamento, sulla base di commento, hai ragione, la mia dichiarazione precedente non era valido. L'unica ragione per cui posso pensare è che la clausola AS esiste da molto tempo nel mondo SQL che è stata incorporata nell'RDMS al giorno d'oggi per compatibilità con le versioni precedenti.

+2

No, 'AS' non è richiesto o necessario nemmeno in questo caso. Prova 'SELECT 1 + 1" risultato "'. –

27

Chiunque abbia risposto prima di me è corretto. Lo si utilizza come un nome di scelta rapida alias per una tabella quando si hanno query lunghe o query con join. Ecco alcuni esempi.

Esempio 1

SELECT P.ProductName, 
     P.ProductGroup, 
     P.ProductRetailPrice 
FROM Products AS P 

Esempio 2

SELECT P.ProductName, 
     P.ProductRetailPrice, 
     O.Quantity 
FROM Products AS P 
LEFT OUTER JOIN Orders AS O ON O.ProductID = P.ProductID 
WHERE O.OrderID = 123456 

Esempio 3 È buona norma utilizzare la parola chiave AS, e molto negativa, ma è possibile eseguire la stessa query senza uno (e lo faccio spesso).

SELECT P.ProductName, 
     P.ProductRetailPrice, 
     O.Quantity 
FROM Products P 
LEFT OUTER JOIN Orders O ON O.ProductID = P.ProductID 
WHERE O.OrderID = 123456 

Come si può vedere, ho omesso la parola chiave AS nell'ultimo esempio. E può essere usato come alias.

Esempio 4

SELECT P.ProductName AS "Product", 
     P.ProductRetailPrice AS "Retail Price", 
     O.Quantity AS "Quantity Ordered" 
FROM Products P 
LEFT OUTER JOIN Orders O ON O.ProductID = P.ProductID 
WHERE O.OrderID = 123456 

Output dell'esempio 4

Product    Retail Price  Quantity Ordered 
Blue Raspberry Gum $10 pk/$50 Case 2 Cases 
Twizzler   $5 pk/$25 Case 10 Cases 
19

quando non si è sicuri che la sintassi di scegliere, soprattutto quando non sembra essere molto a separare le scelte, consultare un libro sull'euristica. Per quanto ne so, il libro solo euristica per SQL è 'di Joe Celko SQL Programmazione Stile':

A nome di correlazione è più spesso chiamato un alias, ma sarà formale. In SQL-92, possono disporre di un operatore opzionale AS e devono essere utilizzati per rendere chiaro che a qualcosa è stato assegnato un nuovo nome, . [P16]

In questo modo, se la tua squadra non piace la convenzione, si può incolpare Celko - Lo so che faccio;)


UPDATE 1: IIRC per lungo tempo, Oracle non supportava la parola chiave AS (nome di correlazione precedente), che potrebbe spiegare perché alcuni vecchi timer non la usano abitualmente.


AGGIORNAMENTO 2: il termine "nome di correlazione", sebbene utilizzato dallo standard SQL, non è appropriato. Il concetto sottostante è quello di un 'range variable'.


UPDATE 3: Ho appena riletto quello Celko ha scritto e ha torto: la tabella non viene rinominato! Ora penso:

Un nome di correlazione è più spesso chiamato un alias, ma io sarò formale. In SQL standard possono avere una parola chiave AS facoltativa, ma non dovrebbe essere utilizzata perché potrebbe dare l'impressione che qualcosa venga rinominato quando non lo è. In effetti, dovrebbe essere omesso per far rispettare il punto che si tratta di una variabile di intervallo.

1

Il AS in questo caso è una parola chiave opzionale definita ANSI SQL 92 per definire un <<correlation name>, comunemente noto come alias per un tavolo.

<table reference> ::= 
      <table name> [ [ AS ] <correlation name> 
       [ <left paren> <derived column list> <right paren> ] ] 
      | <derived table> [ AS ] <correlation name> 
       [ <left paren> <derived column list> <right paren> ] 
      | <joined table> 

    <derived table> ::= <table subquery> 

    <derived column list> ::= <column name list> 

    <column name list> ::= 
      <column name> [ { <comma> <column name> }... ] 


    Syntax Rules 

    1) A <correlation name> immediately contained in a <table refer- 
     ence> TR is exposed by TR. A <table name> immediately contained 
     in a <table reference> TR is exposed by TR if and only if TR 
     does not specify a <correlation name>. 

Sembra una buona pratica di non utilizzare la parola chiave AS per gli alias di tabella in quanto non è supportato da una serie di banche dati di uso comune.

+0

Hai qualche esempio di dbs che non usa la parola chiave 'as'? –

+0

Credo che Oracle sia uno di quelli che non supporta la parola chiave 'as' per gli alias di tabella. –

+0

"La parola chiave AS è facoltativa e l'alias rinomina in modo efficace l'elemento della lista di selezione per la durata della query.L'alias può essere utilizzato nella clausola order_by_clause ma non in altre clausole nella query." http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm. Anche in relazione http://stackoverflow.com/a/8451257/1359796 – HEDMON

0

Se si progetta query utilizzando l'editor di query in SQL Server 2012, ad esempio si potrebbe ottenere questo:

SELECT  e.EmployeeID, s.CompanyName, o.ShipName 
FROM   Employees AS e INNER JOIN 
         Orders AS o ON e.EmployeeID = o.EmployeeID INNER JOIN 
         Shippers AS s ON o.ShipVia = s.ShipperID 
WHERE  (s.CompanyName = 'Federal Shipping') 

rimozione Tuttavia l'AS non fa alcuna differenza come nella seguente:

SELECT  e.EmployeeID, s.CompanyName, o.ShipName 
FROM   Employees e INNER JOIN 
         Orders o ON e.EmployeeID = o.EmployeeID INNER JOIN 
         Shippers s ON o.ShipVia = s.ShipperID 
WHERE  (s.CompanyName = 'Federal Shipping') 

In questo caso l'uso di AS è superfluo ma in molti altri posti è necessario.

0

Nei primi giorni di SQL, è stato scelto come soluzione al problema di come gestire i nomi di colonne duplicate.

di prendere in prestito una query da un'altra risposta:

SELECT P.ProductName, 
     P.ProductRetailPrice, 
     O.Quantity 
    FROM Products AS P 
     INNER JOIN Orders AS O ON O.ProductID = P.ProductID 
WHERE O.OrderID = 123456 

La colonna ProductID (e forse altri) è comune a entrambe le tabelle e dal momento che la sintassi condizione di join richiede riferimento sia, la 'qualifica dot' fornisce disambiguazione .

Ovviamente, la soluzione migliore era quella di non aver mai consentito nomi di colonne duplicati in primo luogo! Fortunatamente, se si utilizza la NATURAL JOIN nuova sintassi, la necessità per le variabili gamma P e O va via:

SELECT ProductName, ProductRetailPrice, Quantity 
    FROM Products NATURAL JOIN Orders 
WHERE OrderID = 123456 
Problemi correlati