何时使用SQL表别名

Ros*_*ini 31 sql database table-alias

我很想知道人们如何使用表别名.我工作的其他开发人员总是使用表别名,并且总是使用a,b,c等的别名.

这是一个例子:

SELECT a.TripNum, b.SegmentNum, b.StopNum, b.ArrivalTime
FROM Trip a, Segment b
WHERE a.TripNum = b.TripNum
Run Code Online (Sandbox Code Playgroud)

我不同意他们的看法,认为表别名应该更加谨慎使用.

我认为在查询中包含两次相同的表时应该使用它们,或者当表名很长并且在查询中使用较短的名称时,将使查询更容易阅读.

我也认为别名应该是一个描述性的名称,而不仅仅是一个字母.在上面的例子中,如果我觉得我需要使用1个字母的表别名,我会使用t表示Trip表,而s表示段表.

Wal*_*tty 22

使用表别名有两个原因.

首先是化妆品.这些语句更容易编写,并且在使用表别名时也可能更容易阅读.

第二个是更实质性的.如果表在FROM子句中出现多次,则需要表别名以使它们保持不同.在表包含引用同一表的主键的外键的情况下,自联接很常见.

两个示例:employees表,其中包含引用supervisor的employeeID的supervisorID列.

第二个是零件爆炸.通常,这是在一个包含三列的单独表中实现的:ComponentPartID,AssemblyPartID和Quantity.在这种情况下,不会有任何自连接,但在此表和两个对零件表的不同引用之间通常会有三向连接.

进入是一个很好的习惯.

  • 从可读性的角度来看,我同意a和b是毫无价值的别名.并且给出的示例可以在没有别名的情况下编写. (2认同)

Bol*_*ait 20

我用它们来节省打字.但是,我总是使用类似于函数的字母.所以,在你的例子中,我会输入:

SELECT t.TripNum, s.SegmentNum, s.StopNum, s.ArrivalTime 
FROM Trip t, Segment s 
WHERE t.TripNum = s.TripNum
Run Code Online (Sandbox Code Playgroud)

这对我来说更容易阅读.

  • @steven今天数据库的状态,今天,你关注的是什么?当我将到达时间添加到Trip表时,明天呢?你的代码中断了.那是什么. (3认同)
  • 我不喜欢这个的唯一原因是,如果我的桌子上有多个以同一个字母开头的东西呢?现在我切换到别名的2,3,4个字符......它在哪里结束?JMHO. (2认同)

mat*_*uma 6

作为一般规则,我总是使用它们,因为在我的存储过程中通常会有多个连接.使用CodeSmith等代码生成工具让它自动为您生成别名时,它也变得更加容易.

我试图远离像a和b这样的单个字母,因为我可能有多个以字母a或b开头的表格.我使用更长的方法,引用的外键与别名表的串联,例如CustomerContact ...这将是加入Contact表时Customer表的别名.

我不介意更长名称的另一个原因是由于我的大多数存储过程都是通过代码CodeSmith生成的.我不介意手动输入的几个,我可能要自己建.

使用当前的例子,我会做类似的事情:

SELECT TripNum, TripSegment.SegmentNum, TripSegment.StopNum, TripSegment.ArrivalTime 
FROM Trip, Segment TripSegment 
WHERE TripNum = TripSegment.TripNum
Run Code Online (Sandbox Code Playgroud)


Ada*_*ess 0

我觉得你应该尽可能多地使用它们,但我确实同意 t 和 s 比 a 和 b 更好地代表实体。

与其他一切一样,这可以归结为偏好。我喜欢当每个开发人员以相同的方式使用别名时,您可以依赖遵循相同约定的存储过程。

去说服你的同事与你达成共识,否则这一切都是毫无价值的。另一种方法是您可以将 Zebra 表作为第一个表,并将其别名为 a。那会很可爱。