[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字句的本质
然后我们来理解sql语句理论中的关系运算----限制
再然后来理解刚才说到谓词
在该书中强调了一点,就是谓词,我们可以组成复杂的谓词,怎么组成复杂的谓词了,
最后,上面说的“选择或者限制” 与 交集有本质的区别。详细你可以看看该书中的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'的这一行 就返回给你了