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

Vis*_*hal 7 sql alias join nested-queries

使用是否始终是最佳做法 -

Select E.Id,D.DeptName from Employee E join Dept D on E.DeptId=D.Id
Run Code Online (Sandbox Code Playgroud)

代替 -

Select Employee.Id,Dept.DeptName from Employee join Dept on Employee.DeptId=Dept.Id
Run Code Online (Sandbox Code Playgroud)

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

DVK*_*DVK 15

  1. 在提到破坏事物时,你可能会混淆"需要使用表前缀"和"需要使用ALIAS".

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

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

  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

VS

SELECT  Employee.Id
       ,Dept.DeptName
FROM    Employee
JOIN    Dept
ON      Employee.DeptId=Dept.Id
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,`E`和`D`并不是那么糟糕,比任意的`a`和`b`更好 (3认同)
  • @ck-对于这样简单的示例查询来说还不错。作为一项策略,这很不好,因为在一个具有5个表联接和数十行长的查询中,那些可能完全不了解1000个表名的人将读取查询。 (2认同)

cjk*_*cjk 5

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

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