sql连接查询中表别名的重要性是什么?

发布于 2024-12-09 09:26:30 字数 281 浏览 0 评论 0原文

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

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

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

谢谢, 哈努曼特

I wrote a sql join query in oracle with two table.
While writing query I did not use any table alias to refer column in select clause.
Now this was possible because the selected columns were having different names in both the tables.

So the question follows; is it necessary (from performance point of view) to use a table alias to select column regardless there is any similar column name in both the tables?

Please note: Right now I am under impression that "In case of join query when we do not specify table alias to select column oracle will always lookup the table metadata to find out which table has this column." So is my assumption true?

Thanks,
hanumant

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月牙弯弯 2024-12-16 09:26:30

不,你的假设不正确。

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

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

使用它们不会造成明显的性能损失。

No, your assumption is not true.

There are at least four reasons to use table aliases:

  • If the alias is shorter than the name it allows you to type less.
  • If you self-join a table you are required to give an alias to one or both of the tables to allow you to distinguish between them.
  • Derived tables must have an alias in some database systems (not Oracle though, I think).
  • The alias can make it clearer what the role of the table is in that particularly query.

There is no significant performance penalty from using them.

浮云落日 2024-12-16 09:26:30

为了简单起见...

这会失败

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 操作顺序。

To make it simple...

This fails

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

This doesn't fail

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

The reason the first one fails is because the Optimization Engine does not know which table to pull the ID field from. With the alias - you give it a "hint" as to which table to use. The alias is just a substitute for the full table name.

You also have to be careful where you try to access the aliased tables. For more information on this check out the SQL order of operations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文