我记得在为信息服务硕士学生开设的 DBMS 课程中学习如何做到这一点。为了节省一些输入,您可以输入:
SELECT t1.id, t2.stuff
FROM
someTable t1
INNER JOIN otherTable t2
ON t1.id=t2.id
;
但是......为什么这在存储过程等中是可以接受的?似乎它所做的只是损害了语句的可读性,同时节省了极少的时间。这样做是否有任何功能或逻辑原因?它似乎增加而不是消除歧义;我可以看到使用这种格式的唯一可接受的原因是如果您添加了一个语义上有意义的别名——例如FROM someTable idsTable
——当表名描述性不够时。
表别名是一种不好的做法,还是只是滥用有用的系统?
表别名是一种常见且有用的做法。
以下报告摘录很好地说明了上述所有要点:
我认为使用别名有助于查询的可读性,如果表名很长或彼此非常相似,以至于快速阅读它的人可能会弄错它们。你觉得这...
比这更具可读性吗?
根据您用作表别名的内容,它可以使查询更易于人们阅读和理解。
表别名(为了缩短表名)不是坏习惯。
我通常在表名很长时使用它,然后只使用有意义的别名:
如果要提高可读性,可以使用
AS
关键字:但是,当您习惯了语法时,就不需要它了。
这是一个关于“不良做法”的问题。答案似乎是关于“保存击键”。
就个人而言,我的编码速度受限于我的思维速度,而不是我的打字速度。我发现具有大量表别名的代码比使用表名本身的代码更难阅读。表别名增加了另一层间接性。
然而,大多数程序员确实使用表别名(尽管我没有)。一些“SQL 开发环境”使这很容易做到,一些教师自动教授表别名,特别是作为学习“Join”语法的一部分。
使用表别名不是坏习惯,但有时我必须通过代码并用原始表名替换别名才能了解发生了什么。
您可以使用它来显着提高查询的可读性。与其使用短别名,不如使用您的别名来描述您要加入的数据,例如
虽然使用极短的别名(如
a
ort1
)可能会使查询难以阅读,因为您需要查找别名以查找别名的含义,但命名良好的别名通常可以使查询比仅使用表更具可读性名字。我的第一份需要定期与 SQL 交互的工作涉及在移动和重命名数十个列和表之后迁移数万行遗留查询。这个过程花费了数年时间。如果没有人使用表别名(或者至少在不必要时避免使用它们),这个过程最多可能需要几天时间。
如何?
考虑以下查询。
不要想太多。我编造的,它的作用并不重要。想象一下,您被告知
transactions.first_name
并transactions.last_name
已分别移至transactions_table.firstname
和transactions_table.lastname
。同时,transactions_table
被索引transaction_datetime_id
而不是transactionid
. 当然,您可以花几分钟回溯这个新查询并分别换出transactions
fortransactions_table
、涉及c.transactionid
forc.transaction_datetime_id
和 finallyfirstname
和lastname
for 的first_name
连接last_name
。现在考虑以下查询。
现在想象一下做同样的改变。应该立即清楚您可以在查询上运行一些基于正则表达式的盲替换。
transactions.transactionsid
=>transactions_table.transaction_datetime_id
transactions.first_name
=>transactions_table.firstname
transactions.last_name
=>transactions_table.lastname
(?<![A-Za-z0-9.])transactions(?![A-Za-z0-9])
=>transactions_table
我不是第一个遇到这个问题的人,也不会是最后一个(我在后来加入的一家公司遇到的小组也经历了同样的艰苦过程)。
如果你想责怪我当时是重 SQL 的新手,那么请注意,我的前任是一个 4 年的全职 SQL 资深人士,并且是编写这些需要更新的查询的同一个人。当他离开并由我接手时,他已经进行了一年的迁移。由于不必要的表别名而浪费了大量资源。严重地。