我应该始终在SQL中完全限定列名吗?

时间:2009-02-17 15:05:56

标签: sql coding-style

在使用SQL语句时,我不应该使用完全限定的列名(tablename.columnname),即使只使用一个表,例如。

SELECT table.column1, table.column2 FROM table

11 个答案:

答案 0 :(得分:11)

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

但是在一个定义良好的系统中,你不应该拥有 - 就像编程语言中的命名空间一样。理想情况不是存在冲突,但它可能会使用显式名称的多余使用来混淆代码。

- 亚当

答案 1 :(得分:5)

我通常遵循以下规则:

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

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

答案 2 :(得分:2)

我会将此作为个人偏好。如果您开始连接包含重复列名的表,那只会有所不同。

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

如果你只是在查询一张桌子 - 我会说不。它更具可读性。

答案 5 :(得分:0)

当多个表正在播放时,我更喜欢使用表别名。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

不解决你还没有的问题。(至少这是我的团队领导总是告诉我的。)我确定有一天必须添加JOIN的猴子你的陈述可以弄清楚。

答案 9 :(得分:0)

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

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

答案 10 :(得分:-1)

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

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