【发布时间】:2009-06-15 15:48:46
【问题描述】:
在
SELECT a.NAME, a.NUMBER, a.STRING, a.RDB$DB_KEY FROM ADMIN a
a 代表什么?
谢谢。
【问题讨论】:
标签: sql
在
SELECT a.NAME, a.NUMBER, a.STRING, a.RDB$DB_KEY FROM ADMIN a
a 代表什么?
谢谢。
【问题讨论】:
标签: sql
a 是表 ADMIN
的别名【讨论】:
基本概念是“范围变量”。
Chris Date 和 Hugh Darwen 认为口语术语“别名”和 SQL 标准的术语“相关名称”“不恰当”并且“严重 [歪曲] 真实情况”。
Hugh Darwen, “SQL: A Comparative Survey”:
你可能有 学习了一个不同的范围变量术语,Codd 在 他的早期论文,但直到 2003 年才被 SQL 标准采用。在 一些 SQL 文本它被称为别名,但这根本不合适, 真的,因为这意味着它是一个表名,因此 表示一个表而不是一行。 SQL 标准同样使用 不恰当的术语相关名称(它不表示相关, 不管是什么),但仅适用于名称为 明确给出(通过示例中的
AS),而不是在以下情况下 一个简单的表名兼作范围变量名。在 SQL:2003 中 范围变量被用作一个方便的单一术语来涵盖 更一般的情况。
C. J. Date, “SQL and Relational Theory: How to Write Accurate SQL Code”:
关系模型中的范围变量是“范围 over" 某个表中的一组行(或某些表中的一组元组) 关系,更准确地说)。在 SQL 中,这些变量定义为 在
FROM或JOIN,如下例:SELECT SX.SNO FROM S AS SX WHERE SX.STATUS > 15
SX这里是一个范围变量,其范围跨越表S;其他 也就是说,它的允许值是表S的行。你可以想到SELECT表达式总体评估如下。第一的, 范围变量采用其允许值之一,例如行 对于供应商SNO = ‘S1’。该行中的状态值是否更大 超过 15?如果是,则供应商编号’S1’将出现在结果中。 接下来,范围变量移动到表S的另一行,比如说 供应商行SNO = ‘S2’;再次,如果该行中的状态值 大于 15,则相关供应商编号出现在 结果。以此类推SQL 要求
SELECT表达式始终为 根据范围变量制定;如果没有这样的变量 明确指定,它假定存在隐含的 与对应表同名警告:许多 SQL 文本 将范围变量名称(或相关名称)称为 别名,并且 将它们描述为好像它们只是表格的替代名称 它们的范围超过了。但这样的描述严重歪曲 真实的事态——事实上,它暴露出严重缺乏 了解真正发生的事情 - 并且强烈反对 该帐户。
有趣的是,LINQ 可以正确识别范围变量,例如
【讨论】:
表 ADMIN 的别名。这里没有必要,因为您的查询中只有一个表。
当你有多个表,并且某些列是相同的,那么你需要区分它们。一种方法是在列名前面写表名。例如,
Select ADMIN.Name, person.name from ADMIN, person where person.id = admin.id
为缩短此时间,请为表名添加别名。
select a.Name, p.Name from ADMIN a, person p where person.id = admin.id
【讨论】:
A 是表的别名。
您可以将 a 更改为任何有效的标识符,它不依赖于底层架构。 通常它用于区分不同表中的字段,节省您每次输入完整的表名(使 SQL 更容易阅读短别名)。
您提供的示例中实际上并不需要它,
SELECT NAME, NUMBER, STRING, RDB$DB_KEY FROM AMDIN
应该也能正常工作
【讨论】:
查询使用类似这样的名称,这样您就不必编写 ADMIN.NAME、ADMIN.NUMBER 等。如果您的表上有 15 个字段并且您的表有一个类似 VPCPDEEE 的名称,它会变得非常一遍又一遍地输入相同的表名很烦人。
【讨论】:
a 是所谓的表别名。在查询部分显示:
FROM ADMIN a
通过在表名后放置“a”,您创建了一个别名,现在可以使用该别名代替表名。如果没有别名,您将需要使用表的全名来完全限定您在查询中引用的列名。
如果没有表别名,您的查询将如下所示:
SELECT ADMIN.NAME, ADMIN.NUMBER, ADMIN.STRING, ADMIN.RDB$DB_KEY FROM ADMIN
虽然您只是从单个表中选择列,但在此示例中实际上根本不需要表名(或别名)。
【讨论】:
A 是表 ADMIN 的简写符号(术语:别名)
【讨论】:
a = 管理员
等效:
SELECT ADMIN.NAME, ADMIN.NUMBER, ADMIN.STRING, ADMIN.RDB$DB_KEY FROM ADMIN
【讨论】:
a 用作 ADMIN 表的别名。
什么时候使用别名是正确的,别名应该采取什么形式可以引起sql作者的一些强烈意见。
这里有几个关于这个主题的 stackoverflow 问题。
【讨论】: