| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 786 人关注过本帖
标题:select 使用经验 (5)
只看楼主 加入收藏
jjjlan
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2004-11-24
收藏
 问题点数:0 回复次数:0 
select 使用经验 (5)

各位看到有什么不同吗?

on是把先把recdbf中不是2000年的记录过滤掉,剩下的就是2000年的了,再用tempyf去和它们进行外联接,其结果可用

sele tempyf.*,recdbf.日期 ;

from tempyf left join recdbf ;

ON tempyf.yf = MONTH(recdbf.日期).AND.YEAR(日期) = ?yy;

 GROUP BY tempyf.yf

来查看,这个中间结果出来后,再用isnull把空值的记录变成01,然后由sum去统计,结果就出来了

where呢,

1、它是先把tempyf外联接recdbf,

相当于sele tempyf.*,recdbf.* from tempyf left join recdbf on tempyf.yf=mont(recdbf.日期)

2、然后把不是2000的记录过滤掉,这里要注意的是,如果某个月没有记录的话,那在第一个步骤后日期那里是null值,这当然不是2000的记录,所以就给这个条件给过滤出去了,所以下一步的sum之后就只剩下那有记录的那个月了,象46月等几个月。就没有

3、然后进行sum(……)

再看having

1、第一步和where一样,

2、第二步不同,它是先sum(),这里的sum可不管你是1999年还是2000的,先累加起来再说,这时,19992000年的2月份都有“重大”这个记录,sum的结果是2,这里用第三个步骤去分辨这个2之中那个是1999年的,那个是2000的,这当然分不清啦,所以也错了。

3、根据步骤2来把2000的过滤出来。

所以onwherehaving这三个都可以加条件的子句中,on是最先执行,where次之,having最后。但有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的。但因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的。根据上面的分析,可以知道where也应该比having快点的,因为它过滤数据后才进行sum,所以having是最慢的。但也不是说having没用,因为有时在步骤3还没出来都不知道那个记录才符合要求时,就要用having了。

快速排名次】   考试排名次,一般有个要求,就是如果有两个人并列第一,那跟着的就不是第二名,而是第三名,即第二名跳空了。所以我想出以下这个方法。   面对大数据量的排名次,若用scan...endscan或do while这种方法,时间会非常长。1048576个记录中花了十多分钟才排了四十多万条记录。而我这种方法只需九十多秒(硬件:PII300(100*3),128M PC100,5.1G,VFP5.0),方法如下: 1。数据库dele:rec_id c(7) 升序;name c(10);fs n(4,1) 降序;rec_orde n(7),文件大小为29M,索引文件16M

2。建一个视图dele1

SELECT Dele.fs, Dele.rec_orde;

FROM dele;

ORDER BY Dele.fs DESC

3。根据视图dele1建立视图dele2

SELECT DISTINCT Dele1.fs, MIN(Dele1.rec_orde) AS rec_orde;

FROM dele1;

GROUP BY Dele1.fs

4。根据视图dele2和数据库dele建立视图dele3

SELECT Dele.rec_id, Dele.rec_orde, Dele2.rec_orde, Dele.fs;

FROM dele INNER JOIN dele2 Dele2 ;

ON Dele.fs = Dele2.fs;

ORDER BY Dele2.rec_orde

准备工作做好,现在可以排序了:

以上视图是事先做好的,不算入运行时间。

use dele1

repl rec_orde with recn() all

sele 0

use dele3

repl rec_orde_a with rec_orde_b all

brow

这就是你想要的!

搜索更多相关主题的帖子: Roman Times select 
2005-06-18 13:41
快速回复:select 使用经验 (5)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036987 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved