什么是SQL中使用表别名的利弊? 我个人尽量避免他们,因为我认为他们使代码的可读性(特别是通过大的地方/和语句读取时),但我很乐意听取任何反指向这一点。 如果是一般使用表的别名是一个好主意,和你有什么首选格式?
Answer 1:
表别名是与高度标准化的模式时务必要之恶。 例如,我不是这个建筑师DB所以忍耐一下,可以采取7联接,以得到一个干净的和完整的记录后面,其中包括一个人的姓名,地址,电话号码和所属公司。
而不是有些标准单个字符的别名,我倾向于这样上面的例子中的SQL最终看起来像有利于短字别名:
select person.FirstName
,person.LastName
,addr.StreetAddress
,addr.City
,addr.State
,addr.Zip
,phone.PhoneNumber
,company.CompanyName
from tblPeople person
left outer join tblAffiliations affl on affl.personID = person.personID
left outer join tblCompany company on company.companyID = affl.companyID
...等
Answer 2:
嗯,有一些情况下,你必须使用它们,当你需要加入到同一个表两次在一个查询等。
这也取决于无论您有跨表唯一的列名。 在我们的传统数据库中,我们对所有列的3个字母前缀,从表中的缩写形式而产生,只是因为一个古老的数据库系统,我们曾经兼容不支持表的别名那么好。
如果你有一个发生在多个表中的列名,指定表名作为列引用的部分是必须的,因而表的别名将允许更短的语法。
Answer 3:
我在这里的唯一的人谁真的恨他们?
一般来说,除非我有给我不使用他们。 我真的很讨厌阅读像
select a.id, a.region, a.firstname, a.blah, b.yadda, b.huminahumina, c.crap
from table toys as a
inner join prices as b on a.blah = b.yadda
inner join customers as c on c.crap = something else
etc
当我读到SQL,我想知道,正是我选择时,我看到了。 别名竟让我困惑了,因为我已经得到了通过列线苦干之前,我确实得到表名,这通常表示有关该别名不中的数据信息。 也许这没关系,如果你做的别名,但我通常与似乎使用别名没有很好的理由代码阅读StackOverflow上的问题。 (此外,有时,有人会在一份声明中创建一个别名,只是没有使用它,为什么?)
我认为表别名使用这么多,因为很多人都很讨厌打字。 我不认为这是一个很好的借口,虽然。 这样的借口是我们结束了可怕的变量命名,可怕的缩略语的功能,错误代码的原因......我会花时间打出来的全名。 我是一个快速的打字员,虽然如此,也许有什么用它做。 (也许在将来,当我有腕隧道,我会重新考虑我的意见别名:P)。我特别讨厌在PHP代码,在那里我相信有绝对没有理由要做跨表的别名运行 - 你只得到了键入一次吧!
我总是用柱预选赛我的发言,但我不反对打字了很多,所以我会很高兴地多次输入全名。 (当然,我不滥用MySQL的标签完成。)除非这是一个情况下,我必须使用别名(像一些在其他的答案中描述),我觉得抽象繁琐和不必要的额外层。
编辑:(过了一年之后),我负责的是使用别名(我没有写他们,我是新来的这个项目)的一些存储过程,以及他们那种痛苦。 我认识到,我不喜欢的别名的原因是因为他们是如何定义的。 你知道它一般多少是很好的做法在你的范围的顶部声明变量? 在SQL(通常在一行的开始?)别名不遵循此惯例,这也让我磨我的牙齿。 因此,我要搜索整个代码单个别名找出它是(和什么是令人沮丧的是,我必须通过逻辑阅读之前,我找到别名声明)。 如果不是因为这,我真的可能会喜欢的系统更好。
如果我写一个存储过程,别人会要处理,我把我的别名定义的注释块在文件的开头,作为一个参考。 老实说,我不明白为什么你们不无它发疯。
Answer 4:
来自使用完全合格的名称或别名微软SQL的查询优化器的好处。
我个人比较喜欢的别名,除非我有很多的表,他们往往是单个字母的。
--seems pretty readable to me ;-)
select a.Text
from Question q
inner join Answer a
on a.QuestionId = q.QuestionId
还有多久可以执行的SQL字符串的实际限制 - 别名让这个限制更容易避免。
Answer 5:
好
因为它已经被前面提到多次,这是一个很好的做法,前缀的所有列名很容易地看到哪些列属于哪个表-和别名比全表名短,使得查询更容易阅读和理解。因此。 如果您使用的当然是一个很好的混叠方案。
如果你创建或读取的应用程序,它采用外部存储的或动态生成的表名,的代码,然后没有别名真的很难第一眼就告诉一下那些“%s的” ES或其他占位符代表。 这不是一个极端的例子,例如许多Web应用程序允许自定义安装时的表名前缀。
Answer 6:
如果我写一个查询自己(通过键入到编辑器,而不是使用设计器)我总是用别名表名刚刚所以我只有一次键入完整的表名。
I really hate reading queries generated by a designer with the full table name as a prefix to every column name.Answer 7:
我想这很清楚的说明对他们的唯一事情是过度抽象。 如果你有一个好主意什么的别名是指(良好的命名帮助;“A”,“B”,“C”可以特别是当你读书迟声明几个月或几年是相当有问题的),我认为没有错有锯齿。
正如其他人所说,加入如果你使用同一个表(或视图)多次要求他们,但即使外界这种情况下,一个别名可以用来在特定的上下文来阐明一个数据源的目的。 在别名的名字,试图回答为什么要访问特定的数据,该数据是不是有什么 。
Answer 8:
我爱别名!!!! 我一直在使用他们做了一些测试,对不和已经看到了一些处理增益。 我的猜测是处理当你处理更大的数据集,比不复杂的嵌套查询的收益会更高。 如果我能考这个,我会让你知道。
Answer 9:
你需要他们,如果你要加入一个表与自身,或者如果您在子查询中再次使用该列...
Answer 10:
别名是伟大的,如果你认为我的组织表的名称,如:SchemaName.DataPointName_SubPoint_Sub-SubPoint_Sub - 子下点......我的团队采用了非常标准的一套缩写,这样的猜测被最小化。 我们不得不说ProgramInformationDataPoint缩短到PIDP,并提交给刚子。
好消息是,一旦你以这种方式去和人同意它,它使那些HAYUGE文件只是有点小,更易于管理。 至少对我来说,更少的字符来传达同样的信息,似乎走轻松一点上我的大脑。
Answer 11:
我喜欢长明确的表名(它的情况并不少见超过100个字符),因为我用很多表,如果名称不明确的,我可能会感到困惑,以什么每个表店。
所以,当我写一个查询,我倾向于使用更短的别名,查询的范围内作出感,使代码更易读。
Answer 12:
我总是用别名在我的查询,这是在我公司代码指南的一部分。 首先,你需要的别名或表名时,有与连接表中相同名称的列。 在我看来,别名提高复杂查询的可读性和让我很快地看到每列的位置。 我们甚至使用单表查询的别名,因为经验表明,单表查询鸵鸟政策保持单身表长。
Answer 13:
恕我直言,它并没有真正的短表名有意义没关系,我有机会在数据库所在的表名称可能是像VWRECOFLY或其他一些随机字符串(由公司政策规定),真正能够代表用户工作,所以在我发现别名这种情况下,确实有助于使代码更易读。 (users.username使许多更有SENCE然后VWRECOFLY.username)
Answer 14:
我总是用别名,因为得到在MSSQL,你需要随时与模式的前缀应有的性能。 所以你会看到很多的
选择Person.Name从
dbo.Person作为人
Answer 15:
编写查询时,我总是用别名。 一般来说,我尝试和缩写表名1个或2代表字母。 因此用户变得u和debtor_transactions成为DT等..
它节省了打字,还带有一定的意义。
在较短的名称使其更具可读性我也。
Answer 16:
如果不使用别名,它在你的代码中的错误只是等待发生。
SELECT Description -- actually in a
FROM
table_a a,
table_b b
WHERE
a.ID = b.ID
当你不喜欢添加一个名为说明,以表-B列的小东西会发生什么。 这是正确的,你会得到一个错误。 添加列不需要破坏任何东西。 我从来没有看到编写好的代码,无bug代码,作为一个必要的邪恶。
Answer 17:
加盟与具有相同名称的列的表时,别名是必需的。