3

我用两个表在 oracle 中编写了一个 sql 连接查询。在编写查询时,我没有使用任何表别名来引用 select 子句中的列。现在这是可能的,因为所选列在两个表中具有不同的名称。

所以问题来了;无论两个表中是否有任何相似的列名,是否有必要(从性能的角度)使用表别名来选择列?

请注意:现在我的印象是“如果我们没有指定表别名来选择列,则在连接查询的情况下,oracle 将始终查找表元数据以找出哪个表具有该列。” 那么我的假设是真的吗?

谢谢,哈努曼

4

2 回答 2

4

不,你的假设不正确。

使用表别名至少有四个原因:

  • 如果别名比名称短,它允许您键入更少。
  • 如果您自连接一个表,则需要为其中一个或两个表提供别名,以便区分它们。
  • 派生表在某些数据库系统中必须有别名(我认为不是 Oracle)。
  • 别名可以更清楚地说明表在该特定查询中的作用。

使用它们没有显着的性能损失。

于 2011-10-12T05:51:36.007 回答
0

为了简单...

这失败了

select 
ID,
ID
from table1 
inner join table2  on table1.ID = table2.AnotherID

这不会失败

select 
a.ID,
b.ID
from table1 a
inner join table2 b on a.ID = b.AnotherID

第一个失败的原因是优化引擎不知道从哪个表中提取 ID 字段。使用别名 - 你给它一个关于使用哪个表的“提示”。别名只是完整表名的替代品。

您还必须小心尝试访问别名表的位置。有关这方面的更多信息,请查看 SQL 操作顺序。

于 2011-10-13T00:38:02.003 回答