第 3章 查询与统计
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
索引结构复合索引文件,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-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 查询命令顺序查询,
LOCATE FOR <条件 > [<范围 >] [WHILE <条件 >]
CONTINUE
USE sb
LOCATE FOR 价格 <15000 AND NOT 主要设备
DISPLAY && 显示,记录号 编号 名称 启用日期 价格 部门 主要设备 备注 商标
4 038-1 钻床 10/12/89 5275.00 23,F,Memo gen
CONTINUE
RECNO(),名称,价格,主要设备 && 显示,6 复印机 10305.01,F.
CONTINUE && 状态条显示:已到定位范围末尾。
索引查询:
SEEK <表达式 >
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
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号工作区为当前工作区数据工作期窗口
打开:选定窗口菜单的数据工作期命令
建立视图文件 (.VUE):
文件菜单的另存为命令
CREATE VIEW <视图文件名 >
打开视图文件,SET VIEW TO <视图文件名 >
表的关联关联的多一关系与一多关系多一关系在数据工作期窗口建立多一关系:
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 && 指定在部门字段对子表设置多一关系建立关联命令:
SET RELATION TO [<表达式 1> INTO <别名 1>,…,<表达式 N> INTO <别名 N>] [ADDITIVE]
说明一多关系的命令,
SET SKIP TO [<表别名 1>[,<表别名 2>]… ]
一多关系的命令序列示例,
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='部门名 '
一父多子浏览窗口
3.4 统计命令计数命令
COUNT [<范围 >] [FOR <条件 1>] [WHILE <条件 2>] [TO <内存变量 >]
求和命令
SUM [<数值表达式表 >][<范围 >][FOR <条件 1>][WHILE <条件 2>]
[TO <内存变量表 >|ARRAY <数组 >]
求平均值命令
AVERAGE [<数值表达式表 >][<范围 >][FOR <条件 1>][WHILE <条件 2>]
[TO <内存变量表 >|ARRAY <数组 >]
汇总命令
TOTAL TO <文件名 > ON <关键字 > [FIELDS <数值型字段表 >]
[<范围 >][FOR <条件 1>][WHILE <条件 2>]
[例 3-15] 在 DX.DBF中按设备的编号来汇总大修费用,试写出命令序列。
USE dx
INDEX ON 编号 TAG bh
TOTAL ON 编号 TO jghz FIELDS 费用 && 按编号汇总费用,写入新表 JGHZ.DBF
USE jghz
BROWSE FIELDS 编号,费用 TITLE '大修费用汇总表 '
3.5 SELECT-SQL查询
SELECT-SQL命令,
SELECT [ALL | DISTINCT]
[<别名 >.]<SELECT表达式 > [AS <列名 >][,[<别名 >.]<SELECT表达式 >[AS <列名 >]...]
FROM [FORCE][<数据库名 >!]<表名 > [<本地名 >]
[[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER] JOIN <数据库名 >!]<表名 > [<本地名 >]
[ON <联接条件 >,..]
[[INTO <目标 >]?[TO FILE <文件名 > [ADDITIVE]?TO PRINTER [PROMPT]?TO SCREEN]]
[PREFERENCE <名字 >] [NOCONSOLE] [PLAIN] [NOWAIT]
[WHERE <联接条件 > [AND <联接条件 >...][AND?OR <筛选条件 > [AND?OR <筛选条件 >...]]]
[GROUP BY <组表达式 >[,<组表达式 >...]]
[HAVING <筛选条件 >]
[UNION [ALL] <SELECT命令 >]
[ORDER BY <关键字表达式 > [ASC?DESC] [,<关键字表达式 > [ASC?DESC]...]]
[TOP <数值表达式 > [PERCENT]]
例:
查询大修过的设备的编号、名称和部门名,
SELECT dx.编号,sb.名称,bmdm.名称 AS 部门名 FROM sb,dx,bmdm;
WHERE dx.编号 = sb.编号 AND bmdm.代码 = sb.部门将 SB.DBF的记录按部门升序排列,部门相同时按价格降序排列,
SELECT 编号,名称,部门,价格 FROM sb ORDER BY 部门,价格 DESC
查找大修过的所有设备:
SELECT DISTINCT 编号 FROM dx
求出每一设备的增值金额,并送至打印机打印:
SELECT 编号,SUM(增值 ) FROM zz GROUP BY 编号 TO PRINTER
查询设计器用查询设计器查询数据的基本步骤打开查询设计器 — 进行查询设置,即设置被查询的表、联接条件、字段等输出要求和查询结果的去向 — 执行查询 — 保存查询设置。
打开查询设计器窗口
MODIFY QUERY <文件名 >
查看由查询生成的 SQL命令快捷菜单的,查看 SQL命令,
查询结果的图形处理查询设计器窗口
3.6 数据库与视图数据库表与自由表创建数据库 SBSJ
选定文件菜单的新建命令 — 选定数据库选项按钮 — 选定新建文件按钮 — 在创建对话框中键入数据库名,SBSJ(扩展名允许省略 ) — 选定保存按钮后即产生数据库文件 SBSJ.DBC,同时出现数据库设计器数据库设计器数据词典数据库 SBSJ的永久关系
(图 3.34)
数据词典长名 (表名 /字段名 )
与注释字段属性记录规则永久关系参照完整性图 3.32 SB数据库表的字段选项卡