Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql联接或嵌套查询中使用别名是否始终是一种好的做法?_Sql_Join_Alias_Nested Queries - Fatal编程技术网

在sql联接或嵌套查询中使用别名是否始终是一种好的做法?

在sql联接或嵌套查询中使用别名是否始终是一种好的做法?,sql,join,alias,nested-queries,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 除了可读性和缩短查询长度之外,使用别名还有什么好处?当我咨询我们的数据库专家时,他说如果有时没有别名,查询可能会中断,,这我不完全理解……如果有人能分享他

使用它是否始终是最佳实践-

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

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

如果您两次引用同一个表,您必须使用别名


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

最可读的方式是使用完全限定的名称显式显示;关于这一点,你的DB专家和我都同意

但是当你开发它们的时候。。。化名是你的朋友,不用说

  • 增加可读性
  • 提供在不同联接条件下联接同一表的方法

  • 我几乎总是这样做,因为我讨厌键入完整的表名,如果不这样做,可能会导致列名不明确。只是不要使用毫无意义的别名,如t1、t2等

  • 当提到破坏性的东西时,您可能会混淆“需要使用表前缀”和“需要使用别名”

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

    但是,通过在列前面使用任何表前缀(无论是实际表名还是别名)可以解决此问题

  • 当您两次使用同一个表时,需要使用别名(与实际表名相反)

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

    也就是说,使用短表别名(尤其是1个字母)会使代码更难读取/维护

    在生产紧急情况下,当您在凌晨2点调试一个带有复杂接头的长SQL时,来回查看上面的10-15行,查看哪个表与别名“e”匹配要困难得多

    这一点有两个例外

    • 当查询的业务逻辑将表用于与表名截然不同的目的时

    • 如果由于您无法控制的情况,表名过长且不合理,那么别名仍然应该是可读且符合逻辑的。例如,“
      EmployeeTableIndexedByIdSourcedFromHR
      ”可以而且通常应该是别名“
      Employee
      ”,但不能是别名“
      E

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

    从Employee.DeptId=Dept.Id上的Employee join Dept中选择Employee.Id、Dept.DeptName

  • vs


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

    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
    

    在这种情况下,
    E
    D
    没有那么糟糕,比任意的
    a
    b
    @ck要好-对于像这样简单的示例查询来说也没那么糟糕。作为一种策略,这是不好的,因为在一个有5个表连接和数十行长的查询中,查询将被那些可能不知道所有1000个表名的人读取。大多数点为+1,尽管(像ck)我认为短别名在简单的查询中是非常可读的。关键是别名应该易于理解。
    Select Employees.Name as [Name]
    From   Employees