因为我是在书上看到的,所以不多说直接贴图看吧!
好,最终的问题就是下面这张图中的sql语句的写法,请注意!!
我想问的问题就是里面那个:
select min(a)-1 from g as c where c.a > a.a )
这句是什么时候执行的?
而且像这种把子查询直接放到一个要输出的列的位置上,那么他的执行顺序是怎么样的??
好,最终的问题就是下面这张图中的sql语句的写法,请注意!!
我想问的问题就是里面那个:
select min(a)-1 from g as c where c.a > a.a )
这句是什么时候执行的?
而且像这种把子查询直接放到一个要输出的列的位置上,那么他的执行顺序是怎么样的??
这个结果虽然不是太好,但是前两条结果已经出来了。现在问题不在这里所以就不讨论了,问题是:
( select min(a)-1 from g as c where c.a > a.a )as end_range
这条语句放在那个位置的时候它的执行顺序,就是他是什么时候执行??
就这条语句
FROM->WHERE->SELECT 列表
从这个里面可以看出:
( select min(a)-1 from g as c where c.a > a.a )as end_range
是在第二步中执行的是吧?
然后它每次是要取出 min(a) ,而且他是要执行9行查询,那么这条语句是怎么执行的?因为第一步查询的时候从a表中选择了9行数据出来,那么这步的话就是首先从a表中拿出一条数据然后和g表中的每一行进行比对,但是这里又使用了min这个函数,那么这句:min(a) 他是怎么取的值呢?取最小的?但是从g表中取最小的每次都是1啊!!
这个怎么解释啊??
是从 满足WHERE not exists.... 条件记录集中取值,条件是满足c.a > a.a 你可以先运行 WHERE not exists....,不运行子查询,看看结果是什么
A+1为START_RANGE,A为3,在子查询中,
c.a >3的记录为100 101 103-106,MIN为100,-1为99( select min(a)-1 from g as c where c.a > a.a )as end_range