欢迎来到天天文库
浏览记录
ID:37908839
大小:75.50 KB
页数:22页
时间:2019-06-02
《VFP 中的 SQL SELECT 语句使用要点》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VFP中的SQLSELECT语句使用要点作者:康康(张初康)第一节select-SQL的工作流程再复杂的SQLSELECT命令,也是由一些基本的结构组成的。所以在看、去做一条很复杂的SQLSELECT命令时,要会把它一级一级的折分,最后折成最简单的,这样才容易理解。而这个折分过程,如果不熟悉SQLSELECT命令的工作流程,那就比较难折分了。大体来说,它是先根据联接条件(即联接条件on中的表达式),把几个的表合成一个临时表,然后根据where中的条件进行过滤,过滤出来的结果根据分组条件再把这个临时表分成一组一组,然后对分别对些组进行字段计算,最后又得出一个临时表,然后又
2、根据having中的条件对这个临时表进行再次过滤,最后输入到指定的地方,如数组、表等。它中间生成的临时表对用户来说,是完全透明的,用户是不可能使用、也不能创建,它是由系统自己创建、自己使用、自己撤除,完全不受用户控制的。我举个例子:有二个表:提货单thd、提货单明细thdmx:thd提货单号 提货日期thdbh thrq01 2000/01/0202 2000/01/1503 2000/02/01thdmx提货单号 产品编号 提货数量thdbh cpbh Thsl01 001 501 003
3、1501 005 1202 001 1302 002 1402 005 2003 002 14现在有个要求:要统计day1=2000/01/01至day2=2000/01/20这段时间内,提货数量大于10的产品有那些,它们各自的总提货量是多少。命令如下:selecpbh,sum(thsl); fromthdjointhdmx; onthd.thdbh=thdmx.thdbh.and.thsl>10.and.betw(thrq,day1,day2); groubycpbh; intocurstemp1
4、为什么把thsl>0和betw(thrq,day1,day2)这二个条件表达式放在on那里,参见on、where与having的区别。它的工作流程:首先根据on中的过滤条件,对所涉及的表进行预处理。过程如下:两个表根据thd.thdbh=thdmx.thdbh进行合并,变成一个这样的临时表:thdbh1 thrq thdbh2 Cpbh thsl01 2000/01/02 01 001 501 2000/01/02 01 003 1501 2000/01/02 01 005
5、 1201 2000/01/02 02 001 1301 2000/01/02 02 002 1401 2000/01/02 02 005 2001 2000/01/02 03 002 1402 2000/01/15 01 001 502 2000/01/15 01 003 1502 2000/01/15 01 005 1202 2000/01/15 02 001 1302
6、 2000/01/15 02 002 1402 2000/01/15 02 005 2002 2000/01/15 03 002 1403 2000/02/01 01 001 503 2000/02/01 01 003 1503 2000/02/01 01 005 1203 2000/02/01 02 001 1303 2000/02/01 02 002 1403 2000/0
7、2/01 02 005 2003 2000/02/01 03 002 14合并是按照笛卡尔积进行计算的,即二个表都有10个记录,那积就会有10*10=100个记录,这是很历害的。但因为on条件中有过滤条件,所以VFP并不会这么笨,它会把符合这个条件的记录才放到临时表中的。这样,结果就少了很多记录了。结果出来后,再根据on后来的过滤条件thsl>10.and.betw(thrq,day1,day2)进行过滤,这样thsl大于10而且提货日期是在day1至day2的记录最后才出现在这一步的临时表中。0
此文档下载收益归作者所有