8

使用 - 始终是最佳实践吗?

Select E.Id,D.DeptName from Employee E join Dept D on E.DeptId=D.Id

代替 -

Select Employee.Id,Dept.DeptName from Employee join Dept on Employee.DeptId=Dept.Id

除了可读性减少查询长度之外,使用别名还有什么好处?当我咨询我们的数据库专家时,他说如果有时没有别名,查询可能会中断......我不完全理解......如果有人能分享他们的想法以及应该遵循的最佳实践,我将不胜感激...... 。非常感谢。

4

6 回答 6

19
  1. 当提到破坏事物时,您可能会混淆“需要使用表前缀”和“需要使用别名”。

    如果您不使用表前缀,则在添加连接后查询确实更有可能中断;当您的原始表和新添加的表共享同名的列时。因此,为了将来的维护,对于查询中的所有列,始终使用表前缀是一个好主意。

    但是,这个问题可以通过在列前面使用 ANY 表前缀来解决,无论是真实表名还是别名。

  2. 当您使用同一个表两次时,需要别名(而不是实际表名)。

  3. 从维护大量复杂 SQL 的大量经验来看,我必须说我的观点与你的观点 100% 相反。

    即,使用简短的(尤其是 1 个字母)表别名会导致更难阅读/维护代码。

    当您在生产紧急情况期间凌晨 2 点调试具有复杂关节的长 SQL 时,来回查看上面的 10-15 行以查看与别名“e”匹配的表要困难得多。

    这一点有2个例外

    • 当查询的业务逻辑将表用于与表名非常不同的目的时。

    • 当表名由于您无法控制的情况而过长且不合理时 - 然后别名应该仍然是可读且合乎逻辑的。例如,“ EmployeeTableIndexedByUIDSourcedFromHR”可以而且通常应该是“ Employee”的别名,但不能是“ E

  4. 此外,为了避免字符串过长,如果您使用换行符和对齐方式格式化查询,这将很有帮助:

    Select Employee.Id,Dept.DeptName from Employee join Dept on Employee.DeptId=Dept.Id

对比

SELECT  Employee.Id
       ,Dept.DeptName
FROM    Employee
JOIN    Dept
ON      Employee.DeptId=Dept.Id
于 2010-09-15T14:48:13.953 回答
5

当您两次引用同一个表时,您必须使用别名。

除此之外,我想不出任何技术原因。

于 2010-09-15T14:45:03.150 回答
4

我几乎总是这样做,因为我讨厌输入完整的表名,如果你不这样做,你最终可能会得到模棱两可的列名。只是不要使用无意义的别名,例如 t1、t2 等。

于 2010-09-15T14:48:13.820 回答
1

最易读的方法是使用完全限定名称显式;对此,您的数据库专家和我同意。

但是当你开发它们时......别名是你的朋友,放下手。

于 2010-09-15T14:45:45.127 回答
0

在大多数情况下,我更喜欢使用完全限定的表名。如果单独数据库中的两个表之间需要内部连接,我通常只使用表的别名,只是为了使其更具可读性。

Select  Employee.Name, sales.Amount
From    Employee
        Inner Join SalesDB.dbo.Sales as Sales On Employee.ID = Sales.EmployeeID

但是,我建议为您的字段使用别名,以防止下游调用应用程序所需的更改。

Select Employees.Name as [Name]
From   Employees
于 2010-09-15T18:04:46.860 回答
-1
  1. 提高可读性
  2. 提供一种在不同连接条件下连接同一个表的方法
于 2010-09-15T14:46:47.517 回答