这是一个有点学术性的问题,因为我正试图更好地掌握SQL。
为什么会这样:
SELECT id FROM nerds AS nerdnumber
但这不会?
SELECT nerds.id AS nerdnumber
对我来说,如果我的SELECT已经识别了表格,则不需要FROM。
答案 0 :(得分:3)
在select子句中包含表名是为了在进行连接时消除歧义。 From子句指定语句正在访问哪些表。
答案 1 :(得分:3)
因此,幕后实际发生的事情是引擎会接受您的查询并将其分解并确定要触发的实际指令以获取您的数据。
使用的语法(SELECT blah FROM ...)是开发和标准化的(大多数),这就是使用的。需要FROM的原因是......因为它是:)
COULD 查询解析器是否可以按您提议的方式更改/编写?不明白为什么不这样做,但会给解析器带来额外的复杂性。 SELECT,FROM,UPDATE,SET和所有其他关键字对于让解析器找到锚点来从中提取数据非常重要。
这就像......最快最脏的原因,你当然可以阅读关于SQL标准的开发,阅读有关查询优化和解析的内容,并阅读一些非常有趣和疯狂的内容:)
答案 2 :(得分:2)
SELECT id FROM nerds AS nerdnumber
和SELECT nerds.id AS nerdnumber
不是等效查询。第一个将表书呆子别名为nerdsnumber,第二个试图别名nerds.id作为nerdersnumber。但我看到了你的问题。
你问的可能吗?是。它应该完成吗?可能不是。使用FROM子句的原因是定义数据的来源。 select子句中的字段用于确定您从定义的数据集中使用的内容。这是一种非常容易阅读和理解的语言(因此原始的SEQL =结构化英语查询语言)。添加所需的功能将突然使得很难理解查询值的来源。如果您定义了该表,该怎么办?如果您将该表名重新定义为查询中的别名,该怎么办?
它最终只会增加歧义。
答案 3 :(得分:0)
如果写得正确,两者都会有效。
如果我正确理解您的示例,那么在第一种情况下,您为表格建立别名,在第二种情况下为字段建立别名。
所以SELECT nerds.id AS nerdfield FROM nerdstable AS nerds;