一条SQL的执行原理

[size=medium]问题: SELECT * FROM TABLE a WHERE a.firstname='xiaoxin' AND a.lastname='niutou' 这个SQL的执行逻辑已经原理谁知道?

     是先根据条件a.firstname='xiaoxin'扫描得到一个结果A,然后根据条件a.lastname='niutou'得到另一个结果B,最后取A和B的交集 对吗?

    还是所先得到A,然后在A的基础上根据条件B得出最终结果?

请各位软件工友不吝赐教! (希望得到权威回答)[/size]

这个问题可以结合SQL语句的理论基础来解释。参考权威书籍《数据库系统-设计,实现与管理》。
首先来理解where字句的本质

where字句术语称“行选择”,用来[color=red][size=medium]限制[/size][/color]仅检索某些行。

然后我们来理解sql语句理论中的关系运算----限制

限制又称为选择,是一个一元操作,它作用于单个关系(亦称表),得到一个新的关系(它由满足特定条件(亦称[size=medium]谓词[/size])的元组组成)。

再然后来理解刚才说到谓词

在该书中强调了一点,就是谓词,我们可以组成复杂的谓词,怎么组成复杂的谓词了,

通过逻辑运算符“与”、“或”、“非”来生成更为复杂的谓词。

最后,上面说的“选择或者限制” 与 交集有本质的区别。详细你可以看看该书中的65页的两者操作的区别。

[quote]问题: SELECT * FROM TABLE a WHERE a.firstname='xiaoxin' AND a.lastname='niutou' 这个SQL的执行逻辑已经原理谁知道? [/quote]

这个问题,我结合自己使用Oracle的经验来说说:

Oracle实际上是根据从下往上,从右到左的规则来解析这个sql的,实际上是先根据a.lastname='niutou' 先筛选出一部分数据集,然后再根据a.firstname='xiaoxin' 在之前的数据集的基础再进行筛选。

当然,现在的数据库已经提供了相应的优化器,在内部会自动对sql语句进行优化。

如果你对Oracle感兴趣,可以去搜一下“Oracle sql 优化”、“Oracle执行计划”等。

笛卡尔积, DBMS直接查到a.firstname='xiaoxin'且 a.lastname='niutou'的这一行 就返回给你了