[读一本书,Alan Beaulieu的学习SQL。关于内部联接,它表明无论INNER JOIN中表的顺序如何,结果都相同,并给出如下原因:
如果您对帐户/雇员/客户查询的所有三个版本为何感到困惑,产生相同的结果,请记住,SQL是一种非过程语言,这意味着描述要检索的内容以及需要使用的数据库对象涉及,但是由数据库服务器决定如何最好地执行您的查询。使用从数据库对象收集的统计信息,服务器必须选择一个三个表中的一个作为起点(此后选定的表称为驱动表格),然后决定以何种顺序连接其余表格。因此,命令您的from子句中出现在哪些表中并不重要。
这是否意味着如果从数据库对象收集的统计信息发生变化,那么结果也会发生变化?
这是否意味着如果从数据库对象收集的统计信息发生变化,那么结果也会发生变化?
没有相同的查询将始终产生相同的结果(当然,前提是基础数据相同)。作者正在解释的是,数据库可以选择一种或多种策略来对查询进行[[处理(从一个表或另一个表开始,使用this或that的算法来连接行,依此类推)。该决定是基于许多因素做出的,其中一些因素是基于统计数据中可用的信息。
关键是SQL是一种声明性语言,而不是过程语言:您不必选择如何
数据库处理查询,而只是告诉它what您想要的结果。] >但是,无论数据库选择哪种算法,都保证结果是一致的。