Mysql SQL语法要求FROM作为SELECT语句的一部分

Mysql SQL语法要求FROM作为SELECT语句的一部分,mysql,sql,Mysql,Sql,这是一个有点学术性的问题,因为我正试图更好地掌握SQL 为什么这会起作用: SELECT id FROM nerds AS nerdnumber 但这不会吗 SELECT nerds.id AS nerdnumber 对我来说,如果我的SELECT已经标识了表,那么FROM应该是不必要的。在SELECT子句中包含表名是为了在执行联接时消除歧义。From子句指定语句正在访问哪些表。如果编写正确,这两个表都可以工作 如果我正确理解了您的示例,那么在第一种情况下,您为表建立别名,在第二种情况下,为

这是一个有点学术性的问题,因为我正试图更好地掌握SQL

为什么这会起作用:

SELECT id FROM nerds AS nerdnumber
但这不会吗

SELECT nerds.id AS nerdnumber

对我来说,如果我的SELECT已经标识了表,那么FROM应该是不必要的。

在SELECT子句中包含表名是为了在执行联接时消除歧义。From子句指定语句正在访问哪些表。

如果编写正确,这两个表都可以工作

如果我正确理解了您的示例,那么在第一种情况下,您为表建立别名,在第二种情况下,为字段建立别名


所以从nerdstable AS nerds中选择nerds.id作为nerdfield没有错

因此,幕后实际发生的事情是引擎接收您的查询并将其分解,并确定要触发的实际指令以获取数据

所使用的语法从。。。主要是开发和标准化的,这就是所使用的。需要发件人的原因是。。。因为它是:

是否可以更改/编写查询解析器,使其按照您建议的方式工作?不知道为什么,但会给解析器带来额外的复杂性。SELECT、FROM、UPDATE、SET和所有其他关键字对于让解析器找到锚定以便从中提取数据非常重要

这就像。。。最快最肮脏的原因是,您当然可以阅读SQL标准的发展,阅读查询优化和解析,阅读一些非常有趣和疯狂的东西:

从nerds中选择id作为nerdnumber,选择nerds.id作为nerdnumber不是等价的查询。第一个将表nerds别名为nerdsnumber,第二个尝试将nerds.id别名为nerdersnumber。但我明白你的问题

你的要求可能吗?对应该这样做吗?可能不会。使用FROM子句的原因是定义数据的来源。select子句中的字段用于确定从定义的数据集中使用的内容。这是一种非常容易阅读和理解的语言,因此是原始的SEQL=结构化英语查询语言。添加您想要的功能会突然使您很难理解查询值的来源。如果定义了该表,该怎么办?如果在查询中将该表名重新定义为别名,该怎么办


最后,它只是增加了歧义。

那么你是说整个表名点表示法实际上只在带有JOIN的语句中使用?点表示法从来都不是一个坏主意。然而我认为这并不总是值得努力的。这不仅仅是为了加入。但在联接中需要消除列的歧义。如果第一个有效,则别名将应用于表,而不是字段。不过我不确定as关键字。谢谢。丹尼尔的回答基本上是说同样的话,但我必须选择一个来接受。对不起,丹尼尔。threendib获得S/O新手奖金