清华大学出版社 TSINGHUA UNIVERSITY PRESS 第3章查询与统计
第3章 查询与统计
清华大学出版社 TSINGHUA UNIVERSITY PRESS 31排序与索引 排序 USE sb SORT TO Emx on部门/D价格FOR主要设备 USE bmx LIST &&主窗口显示如下 记录号编号名称启用日期价格部门主要设备备注商标 1037-2磨床07/21/9024129212221 memo ge 2016-2车床01/15/9227132.73211 memo gen 3016-1车床03/05/906204461211Memo 4100-1微机08/12/978810.00121 memo Gen
3.1 排序与索引 排序: USE sb SORT TO bmx ON 部门/D,价格FOR 主要设备 USE bmx LIST && 主窗口显示如下 记录号 编号 名称 启用日期 价格 部门 主要设备 备注 商标 1 037-2 磨床 07/21/90 241292.12 22 .T. memo gen 2 016-2 车床 01/15/92 27132.73 21 .T. memo gen 3 016-1 车床 03/05/90 62044.61 21 .T. Memo gen 4 100-1 微机 08/12/97 8810.00 12 .T. memo Gen
清华大学出版社 7索引 UNIVERSITY PRESS 结构复合索引文件CDx,主名与表的主名相同,自动维护 表31索引功能分类表 索引类型关键字重复值说明 创建修改命令索引个数 普通索引允许 可作为一对多永久关系中的“多方” INDEX 允许多个 唯一索引允许但输出无重为与以前版本兼容而设置 复值 候选索引不允许 可用作主关键字可用于在永久关系中建 INDEX 输入重复值将禁立参照完整性 CREATE TABLE 止存盘 ALTER TABLE 主索引 仅适用数据库表可用于在永久关系中建 CREATE TABLE仅可1个 立参照完整性 ALTER TABLE 建立索引文件或增加索引标识 INDEX ONTO|TAGOF]ICOMPACT) [ASCENDING DESCENDING] [UNIQUE I CANDIDATEJ ADDITIVE 确定主控索引 SET ORDER TO数值表达式>TAG [ASCENDING DESCENDINGI
索引 结构复合索引文件 .CDX,主名与表的主名相同,自动维护 表3.1 索引功能分类表 索引类型 关键字重复值 说 明 创建修改命令 索引个数 普通索引 允许 可作为一对多永久关系中的“多方” INDEX 允许多个 唯一索引 允许,但输出无重 复值 为与以前版本兼容而设置 候选索引 不允许, 输入重复值将禁 止存盘 可用作主关键字,可用于在永久关系中建 立参照完整性 INDEX CREATE TABLE ALTER TABLE 主索引 仅适用数据库表,可用于在永久关系中建 立参照完整性 CREATE TABLE ALTER TABLE 仅可1个 建立索引文件或增加索引标识 INDEX ON TO | TAG [OF ] [FOR ] [COMPACT] [ASCENDING|DESCENDING] [UNIQUE|CANDIDATE] [ADDITIVE] 确定主控索引 SET ORDER TO [||[TAG] [ASCENDING|DESCENDING]]
例3)小以我建与一个结构复合索引文件其中包括个索引E (1)记录以价格降序排列,索引标识为普通索引型。 (2)记录以部门升序排列,部门相同时则按价格升序排列索引标识为普通索引型。 (3)记录以部门升序排列,部门相同时则按价格降序排列,索引标识为候选索引型。 USE Sb INDEⅹON价格 taG ig DESCendinG&&建立 SB. CDX,关键字价格JG为普通索引型 索引标识 LIST &&记录已按价格降序排列 INDEX ON部门+STR(价格,2) TAG brig; &&关键字为字符表达式“部门+STR(价格,2)”,索引标识BMG增入 SB. CDX IIST&&索引表达式运算后升序排列使记录按部门升序、部门相同按价格升序排列 INDEX ON VALI部门)-价格/10000 IG bmg1 CANDIDATE &&bmg1为候选索引型索引标识,索引标识增入 SB. CDX IIST&&索引表达式运算后升序排列,使记录按部门升序、部门相同按价格降序排列 SETORDER TO TAG ig&&指定 SB. CDX的索引标识JG为主控索引,JG索引序号为3 LIST &&记录按价格降序排列 SETORDER TO TAG bmjg LIST &&记录按(2)排列
[例3-3] 为SB.DBF建立一个结构复合索引文件,其中包括3个索引: (1) 记录以价格降序排列,索引标识为普通索引型。 (2) 记录以部门升序排列,部门相同时则按价格升序排列,索引标识为普通索引型。 (3) 记录以部门升序排列,部门相同时则按价格降序排列,索引标识为候选索引型。 USE sb INDEX ON 价格 TAG jg DESCENDING && 建立SB.CDX,关键字价格,JG为普通索引型 索引标识 LIST && 记录已按价格降序排列 INDEX ON 部门+STR(价格,9,2) TAG bmjg ; && 关键字为字符表达式“部门+STR(价格,9,2)”,索引标识BMJG增入SB.CDX LIST && 索引表达式运算后升序排列,使记录按部门升序、部门相同按价格升序排列 INDEX ON VAL(部门)-价格/1000000 TAG bmjg1 CANDIDATE ; && bmjg1为候选索引型索引标识,索引标识增入SB.CDX LIST && 索引表达式运算后升序排列,使记录按部门升序、部门相同按价格降序排列 SET ORDER TO TAG jg && 指定SB.CDX的索引标识JG为主控索引, JG 索引序号为3 LIST && 记录按价格降序排列 SET ORDER TO TAG bmjg LIST && 记录按(2)排列
清华大学出版社 3.,2查询命令 RSITY PRESS 顺序查询 LOCATE FOR[ UsE Sb INDEX ON编号 tAG bh SEEK038-1 &&不可写为:SEEK编号="038-1 ?RECNO O &&显示:4 INDEX ON启用日期 TAG gyre SEEK{3/5/90} ?FOUND O &&.显示.T.,表示找到该日期 INDEX ON价格 TAG jg SEEK1000.00
3.2 查询命令 顺序查询: LOCATE FOR [] [WHILE ] CONTINUE USE sb LOCATE FOR 价格 USE sb INDEX ON 编号 TAG bh SEEK "038-1" && 不可写为: SEEK 编号="038-1" ?RECNO() && 显示:4 INDEX ON 启用日期 TAG qyrq SEEK {3/5/90} ?FOUND() &&.显示.T.,表示找到该日期 INDEX ON 价格 TAG jg SEEK 1000.00
清华大学出版社 33数据工作期工作区的查询 部门代码表和增值表 BMDM. DBF ZZ. DBF 结构:bmdm(代码c(2),名称c(6)) 结构:zz(编号c(5),增值n(8,2)) 记录 记录 记录号代码名称 记录号编号 增值 办公室 1016-12510.00 212 设备科 2016-1 1000.00 321 车间 3038-1 200.00 车间 523三车间 选择工作区命令: SELECT<别名 CLOSE ALL &&关闭所有打开的表,当前工作区为1号工作区 SELECT O &&1号工作区未打开过表,选定的工作区即该区 se sb G03 &&移至3号记录,注意该记录的部门字段值为22 SELECT O &&选定2号工作区为当前工作区 USe bmdm INDEX0N代码 TaG dm SEeK sb.部 &&即SEEK22 ?sb.编号,a.名称,名称 &&显示“037-2磨床 车间”。这里“a.名称”指sb.名称,“名称”指bmdm.名称 SeLECt sb &&选定SB.DBF所在工作区为当前工作区 ?编号,名称,bmdm.名称 &&显示“037-2磨床车间” SELECT O SELECT &选定2号工作区为当前工作区
3.3 数据工作期工作区的查询 ⚫ 部门代码表和增值表 BMDM.DBF: ZZ.DBF: 结构: bmdm(代码 c(2),名称 c(6)) 结构: zz(编号c(5), 增值n(8,2)) 记录: 记录: 记录号 代码 名称 记录号 编号 增值 1 11 办公室 1 016-1 2510.00 2 12 设备科 2 016-1 1000.00 3 21 一车间 3 038-1 1200.00 4 22 二车间 5 23 三车间 选择工作区命令:SELECT | CLOSE ALL && 关闭所有打开的表,当前工作区为1号工作区 SELECT 0 && 1号工作区未打开过表,选定的工作区即该区 USE sb GO 3 && 移至3号记录,注意该记录的部门字段值为22 SELECT 0 && 选定2号工作区为当前工作区 USE bmdm INDEX ON 代码 TAG dm SEEK sb.部门 && 即SEEK 22 ?sb.编号,a.名称,名称 && 显示“037-2 磨床 二车间”。这里“a.名称”指sb.名称,“名称”指bmdm.名称 SELECT sb && 选定SB.DBF所在工作区为当前工作区 ?编号,名称,bmdm.名称 && 显示“037-2 磨床 二车间” SELECT() && 显示: 1 SELECT 2 && 选定2号工作区为当前工作区
清华大学出版社 数据亚作期窗园 SITY PRESS 打开:选定窗口菜单的数据工作期命令 建立视图文件(VUE): 文件菜单的另存为命令 CREATE VIEW ●打开视图文件: SET VIEW T0<视图文件名〉 数据工作期 当前工作期 默认(1 别名 关系 属性 浏览① 打开Q □口区 关闭c 编号 名称部门 1001微机 关系 101-1复印机 210-1轿车 一对多 工作区:1 记录:7
数据工作期窗口 ⚫ 打开:选定窗口菜单的数据工作期命令 ⚫ 建立视图文件(.VUE): • 文件菜单的另存为命令 • CREATE VIEW ⚫ 打开视图文件: SET VIEW TO
清华大学出版社 /VERSITY PRESS 表的关联 多一关系 父表 子表 索引字段 编号名称…部门 016-1车床 21 代码名称 016-2车床 21 11办公室 037-2磨床 12设备科 038-1钻床 23 21一车间 100-1微机 22 22二车间 101-1复印机… 车间 210-1轿车 …11 子表索引字段 父表 多关系 关联的多一关系与一多关系
表的关联 关联的多一关系与一多关系
清华大学出版社 Ts 多一关系 ERSITY PRESS 在数据工作期窗口建立多一关系 数据工作期 当前工作期 默认(1) 别名 系 □回区 『属性¢) 们名「编号设备名「启用日期 N一车间1016-2车床01/15/92 浏览 设备科100-1微机 08/12/97 打开包 设备科101-1复印机06/01/92 办公室21011轿车 05/08/95 闭c) 关系 对多〔 SET STRICTDATE TOO 工作区:1 记录:7 BROWSE FIELDS BMDM名称H=部门名 b编号Sb.名称H=设备名’Sb启用日期 FOR Sb启用日期>={01/01/92} 用命令序列实现 浏览结果:多一关系显示部门名 seLECT 2 use bmdm &&打开子表 INDEX0N代码TAG代码 ADDITIVE&&子表在代码字段建立索引 SELECT 1 USE sb &&打开父表 SET RELATI0NT0sb.部门 into bmdm additive&&指定在部门字段对子表设置多一关系
多一关系 在数据工作期窗口建立多一关系: SET STRICTDATE TO 0 BROWSE FIELDS BMDM.名称:H='部门名‘ ; Sb.编号, Sb.名称:H=‘设备名’,Sb.启用日期 ; FOR Sb.启用日期>={01/01/92} 用命令序列实现: 浏览结果: 多一关系显示部门名 SELECT 2 USE bmdm && 打开子表 INDEX ON 代码 TAG 代码 ADDITIVE && 子表在代码字段建立索引 SELECT 1 USE sb && 打开父表 SET RELATION TO sb.部门 INTO bmdm ADDITIVE && 指定在部门字段对子表设置多一关系
清建立关联命令 TSINGHUA UNIVERSITY PRESS SET RELATION TO IS表达式1INTO,,表达式N>INTO][ ADDITIVE 说明一多关系的命令 SET SKIP TO【表别名1>L<表别名21 多关系的命令序列示例 CLOSE ALI SELECT 2 USE bmdm &&子表1 父多子 SETORDER TO TAG代码 浏览窗口 seLECT 3 USE ZZ &&子表2 INDEX ON编号 TAG bh SelECT 1 口区 USE sb &&父表 编号价格 增值部门名 SET RELATION TO SE部门 INTO bmd 06-1162044612510.00一车间 SET RELATION TO SH编号INTO 水本*本木本本木本水末*1000.00一车间 一车间 ADDITIVE 车间 SET SKIP TO ZZ &&子表ZZ为多方 38+1525001200车间 BROWSE FIELDS编号,价格,z增值,bmdm名 1001810.00 设备科 101-11030501设备科 称H-'部门名 210-1151000 办公室
建立关联命令: SET RELATION TO [ INTO ,…, INTO ] [ADDITIVE] 说明一多关系的命令: SET SKIP TO [[,]…] 一多关系的命令序列示例: CLOSE ALL SELECT 2 USE bmdm && 子表1 SET ORDER TO TAG 代码 SELECT 3 USE zz && 子表2 INDEX ON 编号 TAG bh SELECT 1 USE sb && 父表 SET RELATION TO sb.部门 INTO bmdm SET RELATION TO sb.编号 INTO zz ADDITIVE SET SKIP TO zz && 子表ZZ为多方 BROWSE FIELDS 编号,价格,zz.增值,bmdm.名 称:H='部门名' 一父多子 浏览窗口