views:

193

answers:

8

I just came across a SQL statement that uses AS to alias tables, like this:

SELECT all, my, stuff
FROM someTableName AS a
INNER JOIN someOtherTableName AS b
    ON a.id = b.id

What I'm used to seeing is:

SELECT all, my, stuff
FROM someTableName a
INNER JOIN someOtherTableName b
    ON a.id = b.id

I'm assuming there's no difference and it's just syntactic sugar, but which of these is more prevalent/wide-spread? Is there any reason to prefer one over the other?

Edited to clarify:

I appreciate all the answers and all the points made, but the question was not why or why not to use table aliases. The question was purely about using the "AS" keyword for table aliasing or leaving it out.

+2  A: 

Not all databases support the AS statement as far as I know. (Oracle?) But for some reason it looks more readable.

Edit: Oracle doesn't support the 'AS' keyword over here;

ORA-00933: SQL command not properly ended
Rhapsody
If I remember correctly, Oracle doesn't support 'AS' for table aliasing, but the 'AS' keyword is obligatory for field aliases.
Will Marcouiller
I just tested it here to be sure, but I doesn't work for table aliasing indeed. (see edit)
Rhapsody
@Will Marcouiller - interesting. That's the syntax I've seen most often (AS for fields but not tables), and I assumed it was required; maybe that's why.
froadie
Yeah, I just tried it too, looks like Oracle only supports `AS` for column-aliasing.
FrustratedWithFormsDesigner
+13  A: 

It's syntactic sugar and it takes a little bit longer to type but some people find it more readable and clear. The reason I use it is that when reading a large query, it is easier to pick out the aliases by looking for the AS's.

Another reason, sometimes the full table name is long and cumbersome to type. Aliasing to something shorter can sometimes make things easier for when you don't have fancy features like autocomplete - or for when you're just feeling lazy. ;)

...And as some others have pointed out before me, it can be useful when doing self-joins.

FrustratedWithFormsDesigner
It's definitely more readable if your database supports it. Good syntactic sugar :)
Daniel Bingham
Thanks for the answer. Just wanted to point out, though - The second paragraph is more of a reason why to alias than a reason why or why not to use "AS".
froadie
@froadie: Yes, I guess I got carried away with "aliasing fever"! I think you're right, the first paragraph answers the question most directly.
FrustratedWithFormsDesigner
@FrustratedWithFormsDes: +1 from me exactly for making both points, why you use the 'as' and why you use the alias in the first point. Both points need to be remembered together!
lexu
+5  A: 

It's generally preferred. Consider what happens if you're using old 'comma notation' for joins, and you miss a comma.

Instead of:

select *
from Orders, Customers;

You end up with:

select *
from Orders Customers; --Customers is now the alias for Orders.

And whilst this isn't fixed by introducing 'as', you can more easily tell if it's intended (since I may have actually wanted to alias Orders as Customers, depending on what else I was doing to it during my query).

Rob Farley
I should mention I'm actually quite lazy about using 'as', for example this query I just wrote over at http://ask.sqlservercentral.com/questions/4908/permutations-in-t-sql
Rob Farley
A: 

Probably by using AS you can quickly see which are the tables getting used as Alias.

ydobonmai
+2  A: 

First of all, aliasing with "a" is actually often considered a Bad Thing (we officially prohibit it in our coding standard). The reason is that in a long complicated multi-table query people lose track of which alias stands for which table.

Saving 2 seconds on typing - especially in this era of intellisenseish IDEs - is kind of idiotic when weighed against readability/maintainability.

The main legit use of aliasing is to do self-joins

DVK
You meant "aliasing with "as" is actually "
ydobonmai
+1 for self-joins.
FrustratedWithFormsDesigner
@Ashish Gupta - Don't think so, sounds like he/she meant using "a" as an alias isn't very understandable. I agree, but if you alias it as something shorter *and* still recognizable, I think there's a place for it. I've often seen aliases when table names are annoyingly long.
froadie
@froadie - it's a balance. But as I said, if it is a serious 2-page-long query with 7 tables 4 of which start with "a" and a somewhat similarly named to boot, aliasing is a net loss for readability.
DVK
A: 

I think the first one is more "polite" and parser friendly

What about this:

SELECT 
     f1 = Field1
     ,f2 = Field2
FROM someTableName

and

SELECT 
         Field1 AS f1
         ,Field2 AS f2
    FROM someTableName
igor
I've never seen the = syntax. Is that supported in all query languages?
froadie
I just tried this in SQL Server and I get - "Incorrect syntax near '='."
froadie
T-SQL (SQL Server). It works
igor
I think it should work in Sybase also
igor
Indeed! Incorrect syntax?
igor
+1  A: 

Field aliases are for readability of the output. Table aliases are for readability of the query structure. Especially when your're dealing with long table names and possibly even cross-database references.

If you have duplicate table references in your query, you should always use table aliases to distinguish one table from the other. For instance, a parent-child join could look somewhat like this:

SELECT parent.Name AS ParentName,
child.Name AS ChildName
FROM MyTable AS parent
INNER JOIN MyTable as child
ON parent.ID = child.ParentID
Prutswonder
A: 

If you have a huge SQL statement with various joins, aliases make it easier to read/understand where the columns are coming from

One of our applications can't handle hyphens in column names (don't ask me why), so aliases are a perfect method for converting COLUMN-NAME to COLUMN_NAME

James.Elsey