VPF培训第二期 讲义
时间:2006年9月1日
主题:Select-Sql进阶和VFP编程初步
涉及技术:
Sql语句:双库联结操作
Sql语句:双库对比操作(分A有B无,A无B有,AB均有三种情况)
Sql语句:查重码
Sql语句:嵌套使用
VFP常用函数
VFP常用命令
几个简单的VFP程序
程序内常用的命令
自定义函数
良好编程习惯
善用外力快出成果
一、双库操作
(1)简单的双库或多库操作:使用from 表1,表2,表3 where…
应用举例:从两个或多个库中取字段,合成一个新的表
需求:从字典库i101.dbf中取出各单位行业代码,与基层表数据库i102.dbf合并
语句:sele zd14,i102.* from i101,i102 where i101.frdm=i102.frdm
结果:合并成功,但只有两库中都存在的单位才会选进来(检查三个库的记录数可以发现这一点)
扩展应用:三库操作,把行业码库中的标准行业名称也读进来
sele hym.*, zd14, i102.* from hym,i101,i102 where hym.code=zd14 and
i101.frdm=i102.frdm
(2)严格的双库操作:使用联接方式进行
分别有内联接,左联接,右联接,全联接4种方式
内 inner join …on
左 left [outer] join …on
右 right [outer] join …on
全 full [outer] join …on
A 内联接
与上面相同的需求
需求:从字典库i101.dbf中取出各单位行业代码,与基层表数据库i102.dbf合并
语句:sele zd14, i102.* from i101 inner join i102 on i101.frdm=i102.frdm
结果:合并成功,但只有两库中都存在的单位才会选进来(检查三个库的记录数可以发现这一点,这就是内联接的意思)
1
B 左联接、右联接、全联接 语句1:sele zd14, i102.* from i101 left join i102 on i101.frdm=i102.frdm 语句2:sele zd14, i102.* from i101 right join i102 on i101.frdm=i102.frdm 语句3:sele zd14, i102.* from i102 left join i101 on i101.frdm=i102.frdm 语句4:sele zd14, i102.* from i101 full join i102 on i101.frdm=i102.frdm 结果:合并成功,与内联接相比,左联接时左边库的全部记录都会进来,并且如 果左库记录找不到相应的右库记录时, 会用.null.代替, 表示没找到。 右联接类似, 全联接则是左库与右库的记录都选进来,另一库找不到就用.null.代替。 C 根据.null.找出不匹配记录(A有B无,A无B有) 在上述语句4:sele zd14, i102.* from i101 full join i102 on i101.frdm=i102.frdm 的结果基础上 Copy to ls sele * from ls where isnull(frdm) 将找出i101中有但i102中没有的记录 sele * from ls where isnull(zd14) 将找出i101中没有但i102中有的记录 二、3条Sele-sql语句审重码 例: 步0. 把i102.dbf复制成i2.dbf,再故意把几家单位改成重码 步1. sele frdm,count(*) as cnt from i2 grou by frdm orde by cnt desc into dbf ls1 步2. sele * from ls1 where cnt>1 into dbf ls2 步3. sele * from i2 inner join ls2 on i2.frdm=ls2.frdm 或 sele cnt,i2.* from i2 inner join ls2 on i2.frdm=ls2.frdm 或 sele cnt,i2.* from i2,ls2 where i2.frdm=ls2.frdm 三、
sql语句的嵌套 例1.上述步2和步3可以合并成一条嵌套语句 sele * from i2 where frdm in (sele frdm from ls2 wher cnt>1) 例2.in后面实际上是一个
列表 sele * from i101 where zd24 in ("10","20") 四、VFP
常用函数 1.字符处理类: Left() 左起取子字符串 Right() 右起取子字符串 Substr() 当中指字位置起取子字符串
2
选出中央属和省属单位
Alltrim() 去掉两端的空格 At() 在字串内查找某字符或子串的起始位置 2.数据类型转换类: val() 字符串转为数字 str() 数字转为字符串 3.iif() 条件取值 4.$符号 字符包含 “温州”$frdm 表示法人名称中包含”温州”两字 如sele * from i101 where "温州"$frmc 五、VFP常用命令
例:在库内改某记录的数据 用Brow for 命令列出符合条件的记录并直接修改 问题:在Brow状态下数据何时被保存?变动记录或字段时,以及按Ctrl+W 时。Esc仅能取消对