SQL执行顺序

粗略的写一下,关注两个重点。
SQL的执行顺序:

(1)  FROM   检查对象是否存在

(2) ON   检查连接条件,字段是否存在

(3) JOIN  连接类型

(4) WHERE    过滤条件

(5) GROUP BY    分组

(6) WITH {CUBE | ROLLUP}      

(7) HAVING   过滤分组

(10) ORDER BY   排序


其中要注意,JOIN要先于WHERE条件执行。

如:

select a.name,b.class,c.fund from 

a,b,cc where a.id=b.id and a.lx=cc.lx(+) and   cc.rp=1  ;

这里先执行连接a.id=b.id and a.lx=cc.lx(+),执行完毕后再执行where过滤cc.rp=1 


select a.name,b.class,c.fund from 

a,b,(select rp,lx from  cc where cc.rp=1) c where a.id=b.id and a.lx=c.lx(+)   ;

这里先执行(select rp,lx from  cc where cc.rp=1),cc.rp=1的数据,然后再与a、b连接,再执行where中的过滤条件。

两种写法,结果是不一样的(十有八九都是一样的,第二种结果往往会多一些)。原因在于,第一种写法中,左连接后进行了过滤,其结果相当于没有进行左连接;第二中写法中,先过滤再后左连接,得到行数是的a 、b连接后的结果的行数。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24478467/viewspace-737462/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24478467/viewspace-737462/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值