这两个SELECT语句之间有什么区别吗?

时间:2010-01-24 11:41:30

标签: sql

我的一位朋友告诉我关于声明2 的信息,但到目前为止我使用了声明1

  • 这两个SELECT语句之间有什么区别吗?

  • 如果是,那是什么?

声明1:

 SELECT Col1 FROM Table1;

声明2:

SELECT Table1.Col1 FROM Table1;

3 个答案:

答案 0 :(得分:8)

完全没有区别。

但是当你有:

Select Table1.Col1 from Table1 INNER JOIN Table2 ON (Table1.id = Table2.ref_id);

第二个陈述可能是一个更好的主意,因为它将消除Col1的任何歧义。在这种情况下,Col1可以是Table1或Table2中的字段。

实际上,如果Table2有一个名为Col1的字段,则需要使用第二个语句。

答案 1 :(得分:2)

只要您使用单个表格,就没有任何区别。结果中的字段名称将取自表的字段名称,因此表名在结果中不可见。

如果您使用多个表,则可能需要指定要使用的字段:

select Table1.Col1, Table2.Col1
from Table1
inner join Table2 on Table2.Col2 = Table1.Col2

您还可以为表名使用别名,以便于阅读:

select a.Col1, b.Col1
from Table1 as a
inner join Table2 as b on b.Col2 = a.Col2

甚至没有as关键字:

select a.Col1, b.Col1
from Table1 a
inner join Table2 b on b.Col2 = a.Col2

您还可以使用别名在输出字段中添加不同的名称:

select Table1.Col1 as Table1Col1, Table2.Col1 as Table2Col1
from Table1
inner join Table2 on Table2.Col2 = Table1.Col2

或者:

select Table1Col1 = Table1.Col1, Table2Col1 = Table2.Col1
from Table1
inner join Table2 on Table2.Col2 = Table1.Col2

答案 2 :(得分:1)

引用单个表时没有区别。当您连接两个或多个可能共享列名的表时,第二个示例的语法变得很重要,例如UserId。在这种情况下,您必须指定table_name.column名称以告诉sql处理器您想要哪个列。因此,在您的陈述2中,指定表格是多余的。