在sql连接或嵌套查询中使用别名总是一个好习惯吗?

时间:2010-09-15 14:42:41

标签: sql join alias nested-queries

使用 -

始终是最佳做法
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

除查询的可读性减少长度外,使用别名有什么好处?当我咨询我们的数据库专家时,他说查询可能会破坏如果有时候没有别名 ...我完全不明白...如果有人愿意,我会很感激分享他们的想法以及要遵循的最佳实践......非常感谢。

6 个答案:

答案 0 :(得分:13)

  1. 在提到破坏事物时,您可能会混淆“需要使用表格前缀”和“需要使用ALIAS”。

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

    但是,通过在列前面使用任何表前缀来解决此问题,无论是真实的表名还是别名。

  2. 当您使用同一个表两次时,别名需要(与实际的表名相对)。

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

    即,使用短 - 特别是1个字母 - 表别名会使HARDER读取/维护代码。

    当你在生产紧急情况下早上2点调试一个带有复杂关节的长篇SQL时,在上面查看10-15行,看看哪个表匹配别名“e”就更难了。

    这一点有两个例外

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

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

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

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

  5. VS

    SELECT  Employee.Id
           ,Dept.DeptName
    FROM    Employee
    JOIN    Dept
    ON      Employee.DeptId=Dept.Id
    

答案 1 :(得分:4)

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

除此之外,没有任何我能想到的技术原因。

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

  1. 提高可读性
  2. 提供在不同连接条件下连接同一个表的方法

答案 5 :(得分: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