【问题标题】:Should I Always Fully Qualify Column Names In SQL?我应该始终完全限定 SQL 中的列名吗?
【发布时间】:2009-02-17 15:05:55
【问题描述】:

出于对使用 SQL 语句的兴趣,我是否应该始终使用完全限定的列名 (tablename.columnname),即使只使用一个表,例如

SELECT table.column1, table.column2 FROM table

【问题讨论】:

    标签: sql coding-style


    【解决方案1】:

    如果你这样做会更好 - 它不会增加任何复杂性,并且可以防止将来出现错误。

    但在定义明确的系统中,您不应该必须这样做 - 这就像编程语言中的命名空间。理想的情况是不发生冲突,但会因过度使用显式名称而使代码混乱。

    -亚当

    【讨论】:

      【解决方案2】:

      我通常遵循以下规则:

      使用单表时,不必使用表名前缀:

      SELECT col1, col2 FROM table1
      

      对于多个表,请使用完整的表名。别名可能会造成混淆,尤其是在进行多个连接时:

      SELECT table1.col1, table2.col2 FROM table1 INNER JOIN table2 on 
                  table1.id = table2.id
      

      我看到许多开发人员使用表别名,但特别是在有多个开发人员的大型项目中,这些可能会变得晦涩难懂。一些额外的按键可以使代码更加清晰。

      但是,当列具有相同名称时,如果可能需要使用列别名。在这种情况下:

          SELECT table1.col1, table2.col1 as table2_col1 FROM table1 
                  INNER JOIN table2 on 
                  table1.id = table2.id
      

      【讨论】:

      • 当您多次加入同一个表时?
      • 乔 - 好点子。在这种情况下,您肯定需要为表格设置别名。
      • 我想说,对于较长的表名(和/或您不一定拥有的表名),别名最终可能比表名本身更有用。我在看你,HP 服务台架构。
      【解决方案3】:

      我会将此作为个人喜好。只有当您开始加入包含重复列名的表时才会有所不同。

      另外,不要写出完整的表名,而是使用别名:

      SELECT t.column1, t.column2 FROM table as t

      【讨论】:

      • 当有多个表时,我总是使用别名。它让我更容易写作,没有人抱怨无法阅读。
      【解决方案4】:

      如果您只从一张表中进行选择,我看不到整体的用处。如果您从多个表中进行选择,对列名进行限定肯定会使可能不熟悉您的数据库架构的任何其他开发人员更容易阅读。

      【讨论】:

        【解决方案5】:

        如果您只查询一张表 - 我会拒绝。这样更易读。

        【讨论】:

          【解决方案6】:

          不要解决你还没有解决的问题。(至少我的团队负责人总是这么告诉我的。)我敢肯定总有一天必须添加一个 JOIN 的猴子你的陈述可以算出来。

          【讨论】:

          • 确实如此。切勿在您的任务之外进行程序更改。 +1 回到 0。现在,如果这是一个新项目,那么按照您的领导所说的做,而不是按照 stackoverflow 所说的做。
          【解决方案7】:

          我认为始终使用完全限定的列名是个好主意。如果表名太长,请使用别名。它还为您的期货添加准备查询,例如加入。

          【讨论】:

            【解决方案8】:

            我想说使用限定名称很好,它增加了代码的可读性。将它用于单个表没有多大意义,但必须用于多个表。如果表名太大建议使用别名,别名最好从表名派生。

            SELECT Dep.Name,Emp.Name
            FROM Department DEP INNER JOIN Employee Emp
            ON Dep.departmentid=Emp.DepartmentID 
            

            【讨论】:

              【解决方案9】:

              没有。

              您应该始终为表格别名,并且您应该始终使用表格aliases来限定列名。

              select
                  p.FirstName,
                  p.LastName,
                  p.SSN
              from Person p
              where p.ID = 345
              

              【讨论】:

                【解决方案10】:

                当超过 1 个表在播放时,我更喜欢使用表别名。

                【讨论】:

                • 如果您的表命名正确,为什么需要表别名?
                • 因为表名可能很长。
                • 因为我没有给他们起名字:)
                • 而且短别名更容易产生歧义。
                • 如果您的表名清晰简洁,使用表别名只会降低查询的可读性。
                【解决方案11】:

                即使是定义最明确的系统也可能会发生变化。很容易将新字段引入表中,从而导致现有查询中的歧义。

                完全符合条件可以保护您免受这种情况的影响。

                【讨论】:

                  猜你喜欢
                  • 2018-07-19
                  • 2014-10-09
                  • 1970-01-01
                  • 2016-10-05
                  • 1970-01-01
                  • 2015-01-30
                  • 2022-01-06
                  • 1970-01-01
                  • 2019-03-10
                  相关资源
                  最近更新 更多