代码之家  ›  专栏  ›  技术社区  ›  Nick Allen

我是否应该总是完全限定SQL中的列名?

  •  11
  • Nick Allen  · 技术社区  · 15 年前

    在使用SQL语句时,出于兴趣,我应该始终使用完全限定的列名(table name.column name),即使只使用一个表,例如。

    SELECT table.column1, table.column2 FROM table
    
    11 回复  |  直到 7 年前
        1
  •  11
  •   Adam Davis    15 年前

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

    但在一个定义明确的系统中,你不应该 就像编程语言中的名称空间。理想情况是不存在冲突,但它可能会使代码混乱,使用多余的显式名称。

    -亚当

        2
  •  5
  •   jonstjohn    15 年前

    我通常遵循以下规则:

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

    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
    
        3
  •  2
  •   Richard    15 年前

    我认为这是个人喜好。只有当您开始联接包含重复列名的表时,才会有所不同。

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

    从表中选择t.column1和t.column2作为t

        4
  •  1
  •   TheTXI    15 年前

    如果您只从一个表中选择,我看不到整体的有用性。如果您从多个表中进行选择,那么对列名称进行限定无疑会使其他可能不熟悉您的数据库模式的开发人员更容易阅读。

        5
  •  1
  •   Rockcoder    15 年前

    如果您只查询一个表,我会说不,这样更易读。

        6
  •  0
  •   Lennart Koopmann    15 年前

    我认为最好始终使用完全限定的列名。如果表名太长,请使用别名。它还可以为将来添加的查询(例如联接)做准备。

        7
  •  0
  •   user65266    15 年前

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

    SELECT Dep.Name,Emp.Name
    FROM Department DEP INNER JOIN Employee Emp
    ON Dep.departmentid=Emp.DepartmentID 
    
        8
  •  0
  •   dotjoe    15 年前

    当有一张以上的桌子在玩时,我更喜欢使用表别名。

        9
  •  0
  •   Robert Gowland    15 年前

    不要解决你还没有解决的问题。 (至少我的团队负责人总是这么告诉我。)我相信有一天必须在你的声明中添加一个join的猴子能够解决这个问题。

        10
  •  0
  •   Brett Postin    7 年前

    即使是定义最完善的系统也会发生变化。可以很容易地将新字段引入到表中,从而导致现有查询中存在歧义。

    完全限定它们可以保护您不受这种情况的影响。

        11
  •  -1
  •   yfeldblum    15 年前

    不。

    你应该永远 别名 表,并且您应该总是用表限定列名 别名 .

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