69
第3第 第第第 第第第第第

第 3 章 数据库、查询和视图

  • Upload
    kiral

  • View
    107

  • Download
    0

Embed Size (px)

DESCRIPTION

第 3 章 数据库、查询和视图. 3. 1 数据库的基本操作. 数据库( DataBase )就是按一定的组织结构存储在计算机内可共享使用的相关数据的集合。 在 Visual FoxPro 中,数据库包含有数据库表、视图等数据实体,又提供了数据字典、各种数据保护和数据管理功能,可将数据库看成是个收集表的 “ 容器 ” 。 3.1.1 数据库的建立 数据库的建立有两种方法: 使用 “ 数据库设计器 ” 和使用建立数据库的命令 。. 用数据库设计器建立数据库 - PowerPoint PPT Presentation

Citation preview

Page 1: 第 3 章 数据库、查询和视图

第 3 章 数据库、查询和视图

Page 2: 第 3 章 数据库、查询和视图

3. 1 数据库的基本操作 数据库( DataBase )就是按一定的组织结构存储在计算机内可共享使用的相关数据的集合。 在 Visual FoxPro 中,数据库包含有数据库表、视图等数据实体,又提供了数据字典、各种数据保护和数据管理功能,可将数据库看成是个收集表的“容器”。

3.1.1 数据库的建立数据库的建立有两种方法:使用“数据库设计器”和使用建立数据库的命令 。

Page 3: 第 3 章 数据库、查询和视图

1.用数据库设计器建立数据库 菜单【文件 →】 【新建 →】 打开“新建”对话框,选定“文件类型”为【数据库】选项按钮→单击【新建文件 →】 打开“创建”对话框,在“数据库名”文本框中输入所建的数据库名,单击【保存】按钮→建立数据库,同时打开“数据库设计器”窗口 。 利用“数据库设计器”提供的工具或快捷菜单,可以方便的建立数据库表或建立视图,也可以将自由表添加到数据库中,成为数据库表,以及建立数据库表间的永久关联关系等数据库操作。

[例 3-1] 利用“数据库设计器”,新建数据库 rsgzk.dbc ,并将表rsb.dbf、 gzb.dbf、 bmdm.dbf和 zz.dbf 添加到新数据库中,成为数据库表。 ( 1 )按照表 4-7 和表 4-8 建立部门代码表( bmdm )和增资表( zz )结构,并输入记录数据。 ( 2 )建立数据库 rsgzk.dbc 。( 3 )添加表 rsb.dbf、 gzb.dbf、 bmdm.dbf和 zz.dbf 。

Page 4: 第 3 章 数据库、查询和视图

2.用命令方式建立数据库命令格式:CREATE DATABASE [< 数据库名 >]

功能:建立一个数据库同时打开它。

例如建立 gzk.dbc 的命令如下:CREATE DATABASE gzk

3.1.2 数据库操作命令1.打开数据库命令命令格式:OPEN DATABASE [< 数据库名 >]

功能:打开一个数据库。例如打开数据库 gzk.dbc 的命令如下:OPEN DATABASE gzk

Page 5: 第 3 章 数据库、查询和视图

2.关闭数据库命令命令格式:CLOSE DATABASE [ALL]功能:关闭当前的数据库和它的表。选择 ALL 表示关闭所有打开的数据库和它们的表、所有的自由表以及索引文件,返回 1 号工作区。例如关闭当前数据库 gzk.dbc 的命令如下:CLOSE DATABASE

3.向数据库中添加表命令命令格式:ADD TABLE < 表名 >功能:向当前数据库添加一个自由表。例如向数据库 gzk.dbc 添加自由表 gzb1.dbf (它为 gzb.dbf 的复制表)和 zz1.dbf( zz.dbf 的复制表)OPEN DATABASE gzkADD TABLE gzb1ADD TABLE zz1

Page 6: 第 3 章 数据库、查询和视图

4.从数据库中移去表命令 命令格式:REMOVE TABLE < 表名 >功能:从当前数据库中移去一个表。从数据库 gzk.dbc 中移出表 zz1.dbf 。OPEN DATABASE gzkREMOVE TABLE zz1 && 在确认对话框选“是”,移出数据库表 zz1

5.删除数据库命令命令格式:DELETE DATABASE < 数据库名 >功能:从磁盘中删除一个数据库文件。从磁盘中删除数据库文件 gzk.dbc 。CLOSE DATABASE ALL && 关闭所有打开的数据库DELETE DATABASE gzk.dbc && 在确认对话框选“是”,删除数据库

Page 7: 第 3 章 数据库、查询和视图

6.浏览数据库文件 浏览数据库 rsgzk.dbc 的命令如下:CLOSE DATABASE ALL && 浏览前首先关闭 .DBC 文件USE rsgzk.dbc && 打开数据库文件必须指明扩展名 . DBC

BROWSE

Page 8: 第 3 章 数据库、查询和视图

3.1.3 数据词典 数据字典就是包含数据库中所有表信息的一个表。存储在数据字典中的信息称之为元数据,包括长表名、长字段名、有效性规则、触发器,表间永久关系以及数据库对象的定义等。 使用数据字典,可以设置字段级和记录级的有效性检查,保证主关键字字段内容的唯一性。

1.设置字段级规则字段级规则主要包括显示属性、字段有效性和字段注释三部分。

Page 9: 第 3 章 数据库、查询和视图

“ 格式”文本框中输入格式化代码,确定该字段在浏览窗口、表单和报表中显示的格式,它是对字段格式进行整体控制的。

字段级规则设置

“ 输入掩码”文本框中键入掩码代码,输入掩码是按位来控制格式的。

显示的标题改为自己希望的标题

字段有效性就是用于数据输入正确性的检验。

说明该字段的用途、特性、使用说明等补充信息

Page 10: 第 3 章 数据库、查询和视图

2.设置记录级规则记录级规则主要包括记录有效性、触发器的设置和表注释。

“教授的基本工资要≥ 1650 元,其他职工为:550≤ 基本工资≤ 3000"

职称 =" 教授 ".AND. 基本工资>=1650.OR. 职称 #" 教授 ".AND.( 基本工资 =>550.AND. 基本工资 <=3000)

每逢星期一才可做插入、追加、更新和删除记录的操作:CDOW(DATE())="Monday"

Page 11: 第 3 章 数据库、查询和视图

3.建立表间永久关系永久关系是数据库表间的关系,它们存储在数据库文件中。利用“数据库设计器”来建立永久关系: 在“数据库设计器”中,用鼠标从一个表的主索引或候选索引拖到另一个表的任一索引,当出现表间关联连线时就表示关系已建立。用鼠标右键单击连线,弹出快捷菜单,可以进行删除关系、编辑关系和编辑参照完整性操作。[例 3-2] 在例 3-1 的数据库 rsgzk.dbc 中的各表建立永久关系。( 1 ) 建立各表的索引。( 2 )利用数据库设计器,画出表间关系连线。

– 建立表 rsb与表 gzb 的连线:形成一条一一关系连线 – 建立表 rsb与表 zz 的连线:形成一条一多关系连线– 建立表 rsb与表 bmdm 的连线 :形成一条多一关系连线

Page 12: 第 3 章 数据库、查询和视图

一一关系连线 多一关系连线 一多关系连线

Page 13: 第 3 章 数据库、查询和视图

4.参照完整性 参照完整性是控制数据库中不同表的主关键字和外部关键字之间数据一致性的关系规则。参照完整性则属于表间规则。 用户可以通过“参照完整性生成器”来进行规则设置,从而控制相关表的更新、删除和插入记录的数据完整性。

打开“参照完整性生成器”窗口 双击两表之间的连线,在“编辑关系”对话框中选定【参照完整性】按钮。

设置更新、删除、插入三个规则 更新规则:是指修改父表中关键字值时所使用的规则,包括级联、限制和忽略 3 种。 删除规则:是指删除父表中的记录时使用的规则,包括级联、限制和忽略 3 种。 插入规则:是指在子表中插入新的记录,或更新已存在的记录时所用的规则,包括限制和忽略 2 种。

Page 14: 第 3 章 数据库、查询和视图

更新规则 删除规则 插入规则

级联

当父表中的关键字值被修改时,系统用新的关键字值更新子表中所有相关记录

当父表的记录被删除时,系统相应的删除子表中所有相关记录

限制

若子表有相关记录,则系统禁止父表中的关键字值被修改

若子表有相关记录,则系统禁止父表的记录被删除

若父表中不存在匹配的关键字值,则禁止在子表插入一个新记录或更新一个已存在的记录

忽略 允许更新 允许删除 允许插入

Page 15: 第 3 章 数据库、查询和视图

在浏览 bmdm 表时将计算机系的代码修改为 A04 ,则子表 rsb 中部门是计算机系的所有记录的部门代码字段值都被更新为“ A04” 。

Page 16: 第 3 章 数据库、查询和视图

查询与视图

视图查询

顺序查询

索引查询

多表操作

数据工作期

表关联

工作区

统计

求记录数

求和

求平均

计算命令

分类汇总

SQL语言

数据操纵

数据查询

数据定义

视图操作

视图建立

Page 17: 第 3 章 数据库、查询和视图

3.2 查询命令1. 顺序查询命令 顺序查询是在表中按记录的物理顺序依次进行的查询。

命令格式:LOCATE [<范围 >] FOR <条件 > [WHILE <条件 >]功能:在当前表的指定范围中搜索满足条件的第一条

记录。( 1 )缺省 <范围 > 表示 ALL 。( 2 )找到一条满足条件的记录后,要继续往下查找满足条件的其它记录就必须用 CONTINUE 命令。

Page 18: 第 3 章 数据库、查询和视图

[例 3-3] 在 rsb.dbf 中查找职称为“讲师”的记录。USE rsb

LOCATE FOR 职称 ="讲师 "

DISPLAY && 显示查找到职称是“讲师”的第一条记录

CONTINUE &&继续找下一条记录DISPLAY && 显示查找的记录重复 CONTINUE和 DISPLAY 命令就可以找到所有职称

为“讲师”的记录。

Page 19: 第 3 章 数据库、查询和视图

2. 索引查询命令索引查询利用索引文件实现的快速查询。 VFP 提供了 SEEK和 FIND两条命令进行索引查询 。

命令格式:SEEK < 表达式 >

功能:在当前表的主控索引中按索引关键字搜索满足表达式的第一条记录。

说明: SEEK 命令按索引关键字搜索,若找到,记录指针指向该记录。 FOUND()函数的值为 .T. ,表示查询成功。 RECNO()函数返回当前记录号。若找不到满足条件的记录,则记录指针指向文件结束处(即 EOF() 返回 .T.值), FOUND()函数的值为 .F.。 RECNO()函数返回记录总数加 1 的值。

Page 20: 第 3 章 数据库、查询和视图

[例 3-4] 在 rsb.dbf 中查询姓名为陈宏的职工记录;查询出

生日期为 1969年 7月 5日出生的职工记录。

USE rsbSET ORDER TO TAG xmSEEK "陈宏 " ? RECNO()DISPLAYSET ORDER TO TAG csrqSEEK {^1969/7/5}? FOUND()DISPLAY

Page 21: 第 3 章 数据库、查询和视图

3.3 统计命令1. 记录数统计命令

命令格式: COUNT [<范围 >] [FOR <条件 1>] [WHILE <条件 2>] ; [TO < 内存变量 >]

功能:计算指定范围内满足条件的记录个数。[例 3-5] 统计 rsb.dbf 中“讲师”的人数。USE rsb

COUNT FOR 职称 ="讲师 " TO jsrs

? jsrs

Page 22: 第 3 章 数据库、查询和视图

2. 求和命令  命令格式:SUM [< 数值表达式表 >] [<范围 >] [FOR <条件 1>] ;

[WHILE <条件 2>][TO < 内存变量表 >|TO ARRAY< 数组> 功能:对当前表的各个数值表达式分别求和。

[例 3-6] 对表 gzb.dbf 的奖励工资字段和实发工资字段进行求和统计,结果分别存放到变量 s1和 s2 中。

STORE 0 TO s1, s2

USE gzb

SUM 奖励 , 实发工资 TO s1, s2

? "奖励 ",s1, " 实发工资 ",s2

Page 23: 第 3 章 数据库、查询和视图

3. 求平均值命令命令格式:

AVERAGE [< 数值表达式表 >] [<范围 >] [FOR <条件1>]

[WHILE <条件 2>][TO < 内存变量表 >|TO ARRAY< 数组>]

功能:对当前表的各个数值表达式分别求平均值。

例如,求基本工资的平均值可用如下命令序列:USE gzb

AVERAGE 基本工资 TO aversal

? "平均基本工资 ",aversal

Page 24: 第 3 章 数据库、查询和视图

4. 计算命令命令格式:

CALCULATE < 表达式表 > [<范围 >] [FOR <条件 1>]

[WHILE <条件 2>][TO < 内存变量表 >|TO ARRAY< 数组>]

功能:分别统计当前表中表达式表的值。

函数名 说明 函数名 说明 1、CNT( ) 统计记录个数 5、MIN( ) 求最小值 2、AVG( ) 求平均 6、VAR( ) 求均方差 3、SUM( ) 求和 7、STD( ) 求标准差 4、MAX( ) 求最大值 8、NPV( ) 求净现值

Page 25: 第 3 章 数据库、查询和视图

[例 3-7] 统计 gzb.dbf 中基本工资的平均值和实发工资的总

和,结果分别存放到 av和 su这两个变量中。

USE gzb

CALCULATE AVG( 基本工资 ),SUM( 实发工资 ) TO av,su

? av,su

Page 26: 第 3 章 数据库、查询和视图

5. 分类汇总命令 分类汇总是将数据表中的记录按某个字段进行排序分类,再对其它需要汇总的字段进行汇总统计。

命令格式:TOTAL TO < 文件名 > ON < 关键字 > [FIELDS < 字段名表 >]

[<范围 >][FOR<条件 1>] [WHILE<条件 2>]

功能:对当前表进行分类汇总,汇总的结果存入一个新表。汇总时把 < 关键字 >值相同的一组记录汇总成一个记录,其中指定的数值型字段值取该字段的汇总值,其它字段取该组记录中的第一条记录。在新表中,记录按 < 关键字 > 的取值进行排列。

Page 27: 第 3 章 数据库、查询和视图

[例 3-8] 对 zz.dbf 表的增资按编号进行分类汇总,来查询每

位职工增加工资的总和,并将结果存入 zzhz.dbf 表中。

USE zz

INDEX ON 编号 TAG zzbh

TOTAL ON 编号 TO zzhz

USE zzhz

BROWSE

USE

Page 28: 第 3 章 数据库、查询和视图

3.4 多表操作1. 多工作区操作

工作区:Visual FoxPro最多同时打开 32767 个数据表,每个打开的表都在内存中开辟一个存储区域,这个存储区域就叫做工作区。 Visual FoxPro 规定在每个工作区上只能打开一个表,所以就有 32767 个工作区可使用,编号为 1~ 32767 。当前工作区 :系统任何时候只能选择一个工作区进行操作,当前正在操作的工作区称为当前工作区,在当前工作区打开的数据表称为当前表 。

Page 29: 第 3 章 数据库、查询和视图

别名 表别名是 VFP 用来指定在一个工作区中打开的表的名称。打开一个表时, VFP 自动使用文件名作为默认的表别名。 系统将前 10 个工作区中指定的默认别名是 A 到

J ,工作区 11 到 32767 中指定的别名是 W11 到 W32767 。

用户为表 rsb.dbf 指定一个别名 rs : USE rsb ALIAS rs

Page 30: 第 3 章 数据库、查询和视图

工作区的选择命令格式:SELECT < 工作区 >|<别名 >功能:选择由工作区号或别名所指的工作区作为当前工作区。系统启动后默认 1 号工作区为当前工作区。说明:( 1 )工作区号取值为 1~ 32767 。函数 SELECT()

能够返回当前工作区的区号。( 2 )当工作区号为 0 时,即命令“ SELECT 0” 表示

选取尚未使用的最低工作区。对非当前工作区的表的字段进行操作时,必须在该字段名前加上前缀,表示为:别名 . 字段名别名 -> 字段名

Page 31: 第 3 章 数据库、查询和视图

[例 3-9] 工作区操作示例。CLOSE ALL?SELECT( ) && 显示当前工作区号 1

USE rsb ALIAS rs && 在当前工作区打开表 rsb ,并指定其别名为rs

GO 5DISPLAYSELECT 0 &&2 号工作区是未使用的最低工作区,选取 2 号工作区USE gzb &&在 2 号工作区打开表 gzb

GO 2DISPLAY?编号 , rs.编号

Page 32: 第 3 章 数据库、查询和视图

2. 数据工作期的使用“ 数据工作期”是一个用来设置工作环境的交互操作窗口。利用“数据工作期”窗口打开或显示表或视图、建立表间临时关系、设置工作区属性等操作。 • 打开命令: SET VIEW ON

• 关闭命令: SET VIEW OFF

• 窗口组成如下图所示:

打开的表或视图

显示表间临时关系

弹出“工作区属性”对话框,可以修改表的结构,选择索引文件和字段,并且定义数据筛

选条件等多种操作

打开浏览窗口,供浏览

或编辑 建立表间临时关系

建立或取消两个关联表的一多关系

Page 33: 第 3 章 数据库、查询和视图

[例 3-10] 利用“数据工作期”窗口,完成下面操作:( 1 )分别打开 rsb.dbf和 bmdm.dbf 表;( 2 )对 rsb.dbf 要求浏览查询未婚职工信息,并只输出未婚职工的姓名、性别、出生日期、职称和婚否五个字段内容。

( 3 )以 rsbgzq.vue 保存上述工作环境。操作步骤:步骤一:打开数据工作期:选择菜单【窗口 →】 【数据工

作期】,出现“数据工作期”窗口。步骤二:打开表:单击【打开】按钮→在“打开”对话框

中选定 rsb.dbf→按【确定】返回数据工作期窗口。同样方法打开 bmdm.dbf 。

Page 34: 第 3 章 数据库、查询和视图

步骤三:设置 rsb.dbf 属性:在“别名”列表框选定 rsb表→【属性 →】 在“工作区属性”对话框(如图 5-2 所示)进行下面设置:

( 1 )设置数据过滤器:在“数据过滤器”文本框中输入过滤条件 NOT 婚否,完成对未婚记录条件的设置。

( 2 )设置字段筛选。步骤四:浏览 rsb.dbf 表 步骤五:选择【文件】菜单的【另存为】命令→在“保存

视图为”文本框中输入 rsbgzq→ 单击【保存】按钮。

Page 35: 第 3 章 数据库、查询和视图

3.建立表间临时关联关联的概念:所谓关联,就是使不同工作区的记

录指针建立一种联动关系,当一个表的记录指针移动时,与它相关联的表的记录指针也随之移动。

表间关联关系主要有 4 种类型: 一一关系:是指父表 A 中的任何一条记录仅仅对应子表 B

中的一条记录,反之子表 B 中的任何一条记录亦对应父表A 中的一条记录的关联。

多一关系:是指父表 A 中的多条记录对应子表 B 中的一条记录的关联。

一多关系:是指父表 A 中的一条记录对应子表 B 中的多条记录的关联。

多多关系:Visual FoxPro 中支持前 3 种关联关系 ,对多多关系

要将其中一个表分解,形成多一关系或一多关系。

Page 36: 第 3 章 数据库、查询和视图

4. 建立表间临时关联的 2 种方法: 建立关联的命令命令格式:SET RELATION TO [< 关键字表达式 1> INTO <别名 1>,…,

< 表达式 N> INTO <别名 N>][ADDITIVE]

功能:以当前表为父表与其它一个或多个子表建立关联。

利用“数据工作期”建立关联操作步骤:步骤一:打开需建立关联的父表和子表。步骤二:建立子表关键字索引或选定主控索引。步骤三:选定父表为当前表,然后建立与子表的关联(系统默认

为多一关系),如果是一多关系,还要执行第 4步。步骤四:建立关联的一多关系。

Page 37: 第 3 章 数据库、查询和视图

[例 3-11] 设置 rsb.dbf和 gzb.dbf 的一一关系和rsb.dbf和 bmdm.dbf 的多一关系,并浏览查询职工的编号 , 姓名 , 职称 , 岗位津贴 , 所在部门名称等信息。

SELECT 1

USE gzb

INDEX ON 编号 TAG bh

SELECT 2

USE bmdm

INDEX ON 代码 TAG dm

SELECT 3

USE rsb

SET RELATION TO 编号 INTO gzb, 部门代码 INTO bmdm

BROWSE FIELDS 编号 , 姓名 , 职称 , gzb.岗位津贴 , bmdm. 部门名称

Page 38: 第 3 章 数据库、查询和视图

[例 3-12] 利用“数据工作期”建立 rsb.dbf 分别与bmdm.dbf 的多一关系,与 zz.dbf 的一多关系,然后使用浏览命令查询所有职工编号、姓名、基本工资,部门名称和增资情况。

操作步骤:步骤一:打开表:选择菜单【窗口 →】 【数据工作期】,然后分别

打开 rsb.dbf、 bmdm.dbf和 zz.dbf 。步骤二:设置子表索引:为子表 bmdm.dbf 按代码字段建立索引,或

选定其为主控索引(已有索引存在),为子表 zz.dbf 按编号字段建立索引或选定其为主控索引。

步骤三:以 rsb.dbf 为父表建立与 bmdm.dbf子表的多一关系。步骤四:建立 rsb.dbf与 zz.dbf子表的一多关系。步骤五:使用下面的浏览命令:BROWSE FIELDS 编号 , 姓名 , 基本工资 , bmdm. 部门名称 ,zz. 增

Page 39: 第 3 章 数据库、查询和视图

3.5 关系型数据库标准语言SQL

SQL 是一种综合的、通用的、功能强大的关系数据库语言,它包括数据定义语言( DDL )、数据操纵语言( DML )、数据控制语言( DCL )三大部分。

数据定义语言:用于定义、修改和撤消数据库、表对象等。

数据操纵语言:用于数据库中表记录的修改和检索等。

数据控制语言:用于数据访问权限的控制等。

Page 40: 第 3 章 数据库、查询和视图

3.5.1 SQL 的数据定义命令

1. 建立表

2. 修改表的结构

3. 删除表

Page 41: 第 3 章 数据库、查询和视图

1.建立表:命令格式:CREATE TABLE | DBF < 表名 1>[NAME < 长表名 >] [FREE](< 字段名 1> < 字段类型 >[(< 字段宽度 >[,< 小数位数 >])] [NULL|NOT NULL] [CHECK <逻辑表达式 1> [ERROR < 提示信息 1>]][DEFAULT < 表达式 1>][PRIMARY KEY | UNIQUE][REFERENCES < 表名 2> [TAG < 标记 1>]][NOCPTRANS][,< 字段名 2> …][, PRIMARY KEY < 表达式 2> TAG < 标记 2>|, UNIQUE < 表达式 3> TAG < 标记 3>][, FOREIGN KEY < 表达式 4> TAG < 标记 4> [NODUP]REFERENCES < 表名 3> [TAG < 标记 5>]][, CHECK <逻辑表达式 2> [ERROR < 提示信息 2>]])| FROM ARRAY 数组名功能:由给定的字段参数建立一个数据表。

Page 42: 第 3 章 数据库、查询和视图

[例 3-13] 建立人事管理数据库 rsgl.dbc ,并用 SQL 命令建立 rs.dbf(编号 C(4) ,姓名 C(8) ,身份证号 C(18) ,性别 C(2) ,出生日期 D ,基本工资 N(9,2),简历M) ,表中编号字段为主关键字。

CLOSE DATABASES ALL && 关闭所有数据库CREATE DATABASES rsgl && 建立 rsgl 数据库CREATE TABLE rs( 编号 C(4), 姓名 C(8), 身份证号 C(18), 性别 C(2),; 出生日期 D, 基本工资 N(9,2), 简历 M) &&在 rsgl 数据库中创建表 rs

MODIFY DATABASES && 打开“数据库设计”窗口,显示rs 表

Page 43: 第 3 章 数据库、查询和视图

2. 修改表的结构 ( 1 )增加或修改字段

命令格式:ALTER TABLE < 表名 >ADD | ALTER [COLUMN]

< 字段名 >< 字段类型 > [(< 字段宽度 > [,< 小数位数 >])] [NULL | NOT NULL][CHECK <逻辑表达式 > [ERROR < 提示信息

>]]

[DEFAULT < 表达式 >]

[PRIMARY KEY | UNIQUE]

[REFERENCES< 表名 2> [TAG < 标记 1>]]

[NOCPTRANS]

[NOVALIDATE]

功能:增加或修改字段

增加新的字段 修改原有的字段

Page 44: 第 3 章 数据库、查询和视图

[例 3-14] 继续给上例表 rs.dbf完成下列操作:( 1 )增加 1 个“籍贯 C(8)” 字段。( 2 )将原来的“编号”字段的宽度由 4 改为 6 。( 3 )修改“基本工资”字段的有效性规则,要求基本工资不小于 200 ,出错信息提示为“最低工资额为 200 元”。( 4 )将“编号”字段设置成主索引字段。OPEN DATABASES rsglALTER TABLE rs ADD 籍贯 C(8) && 增加字段MODIFY STRUCTURE && 查看结构的变化ALTER TABLE rs ALTER 编号 C(6) &&修改字段的宽度MODIFY STRUCTURE ALTER TABLE rs ALTER 基本工资 n(9,2) CHECK 基本工资 >=200; ERROR " 最低工资额为 200元 "MODIFY STRUCTURE ALTER TABLE rs ADD PRIMARY KEY 编号 TAG bh && 设置成主索引字段MODIFY STRUCTURE CLOSE DATABASES ALL

Page 45: 第 3 章 数据库、查询和视图

( 2 )设置字段属性

命令格式:ALTER TABLE < 表名 >ALTER|DROP [COLUMN] < 字段名1>[NULL | NOT NULL]

[SET DEFAULT < 表达式 >]

[SET CHECK <逻辑表达式 >[ERROR < 提示信息 >]]

[DROP DEFAULT]

[DROP CHECK]

[NOVALIDATE]

[RENAME COLUMN < 字段名 2> TO < 字段名 3>]

功能:定义、修改、删除字段及有效性规则和默认值。

修改字段 删除字段

Page 46: 第 3 章 数据库、查询和视图

[例 3-15] 继续给表 rs.dbf完成下列操作:( 1 )修改“性别”字段的默认值为“男”。( 2 )删除“基本工资”字段的有效性规则。( 3 )删除“籍贯”字段。( 4 )将“基本工资”字段改名为“工资”字段。OPEN DATABASES rsglALTER TABLE rs ALTER 性别 SET DEFAULT "男 "MODIFY STRUCTUREALTER TABLE rs ALTER 基本工资 DROP CHECKMODIFY STRUCTUREALTER TABLE rs DROP 籍贯MODIFY STRUCTUREALTER TABLE rs RENAME COLUMN 基本工资 TO 工资MODIFY STRUCTURECLOSE DATABASES ALL

Page 47: 第 3 章 数据库、查询和视图

3.删除表( 1 )将数据库表从数据库中移出 命令格式:REMOVE TABLE < 表名 > | ? [DELETE] [RECYCLE]

功能:从数据库中移去表。

[例 3-16] 在 rsgl 数据库中移去 rs.dbf 表。OPEN DATABASES rsgl

REMOVE TABLE rs && 将表 rs.dbf从 rsgl.dbc 中移 去,成为自由表MODIFY DATABASES

将表删除到回收站

表示从磁盘上删除数据

Page 48: 第 3 章 数据库、查询和视图

( 2 )将表从数据库和磁盘上删除的 DROP TABLE 命令 命令格式:

DROP TABLE < 表名 > | < 文件名 > | ? [RECYCLE]功能:从数据库和磁盘上将表直接删除掉。

[例 3-17] 将 rs.dbf 表复制 rs1.dbf ,然后将 rs1.dbf 添加到 rsgl 数据库中,然后再将其从数据库和磁盘中一起删除。CLOSE ALLUSE rsCOPY TO rs1 && 复制成表 rs1.dbfOPEN DATABASES rsglADD TABLE rs1 && 添加表 rs1.dbf到 rsgl.dbcMODIFY DATABASES && 显示数据库DROP TABLE rs1 && 将表从数据库和磁盘上一起删除CLOSE DATABASESDIR *.dbf

Page 49: 第 3 章 数据库、查询和视图

3.5.2 SQL 的数据操纵命令

SQL 的数据操纵命令主要包括三个部分:记录的插入

记录的更新

记录的删除

Page 50: 第 3 章 数据库、查询和视图

1.插入记录命令格式:INSERT INTO < 表名 > [(< 字段名 1> [, < 字段名 2>, ...])]VALUES (< 表达式 1> [, < 表达式 2>, ...])或INSERT INTO < 表名 > FROM ARRAY < 数组 > | FROM MEMVAR功能:在表的末尾追加一条新的记录。

[例 3-18] 向表 rs.dbf 表插入一条记录。OPEN DATABASES rsglINSERT INTO rs(编号 ,姓名 , 性别 , 出生日期 ) VALUE; ("0101","李明 ","男 ",{^1965/05/06})LISTCLOSE DATABASES

Page 51: 第 3 章 数据库、查询和视图

2. 更新记录命令格式:UPDATE [< 数据库名 !>] < 表名 >SET < 字段名 1> = < 表达式 1> [,< 字段名 2> = < 表达式 2>

...] [WHERE <条件 >]功能:更新满足条件的记录,该记录指定字段值由相对应的表达式值

来代替。 [例 3-19] 将表 rsb.dbf 复制成 rsb1.dbf ,然后对表 rsb1.dbf 中的职称为

“讲师”的职工基本工资都增加 35 元。USE RSB LISTCOPY TO rsb1UPDATE rsb1 SET 基本工资 = 基本工资 +35 WHERE 职称 ="讲师 "SELECT rsb1LISTUSE

Page 52: 第 3 章 数据库、查询和视图

3. 删除记录命令格式:

DELETE FROM < 表名 > [WHERE <条件 >]功能:逻辑删除表中满足条件的记录,即对做满足条件

的记录删除标志。[例 3-20] 将表 rsb1.dbf 中姓名是“陈宏”的记录删除。DELETE FROM rsb1 WHERE 姓名 ="陈宏“

&& 做删除标记SELECT rsb1LISTPACK &&彻底删除有删除标记的

记录LISTUSE

Page 53: 第 3 章 数据库、查询和视图

3.5.3 SQL 的数据查询命令Visual FoxPro 有两种方式来实现 SQL 查询:

一、使用命令操作

二、界面操作

Page 54: 第 3 章 数据库、查询和视图

一、使用命令操作命令格式:SELECT [ALL | DISTINCT] [TOP < 数值表达式 > [PERCENT]][<别名 1>.]< 选择项 1> [AS <列名 1>][, [<别名 2>.]< 选择项 2> [AS <列名 2>]…] FROM [FORCE] [< 数据库 1>!] < 表名 1> [[AS] < 本地名 1>][[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN< 数据库 2>!] < 表名 2> [[AS] < 本地名 2>][ON < 联接条件 > …][[INTO <目标 >] | [TO FILE < 文件名 > [ADDITIVE] | TO PRINTER [PROMPT]| TO SCREEN]][PREFERENCE < 名字 >] [NOCONSOLE] [PLAIN] [NOWAIT][WHERE < 联接条件 1> [AND < 联接条件 2> …][AND|OR <筛选条件 1> AND|OR <筛选条件 2>…]]][GROUP BY < 分组项 1>[, < 分组项 2> …]][HAVING <筛选条件 >][UNION [ALL] <SELECT 命令 >][ORDER BY <排序项 1> [ASC | DESC] [, <排序项 2> [ASC | DESC] …]]

功能:从一个或多个数据表中检索一个记录集合(即表格),集合由指定的字段名组成,形成一个查询结果表。

Page 55: 第 3 章 数据库、查询和视图

1.查询全部或者部分字段内容[例 3-21] 在 rsb.dbf 中查询显示所有职工编号、姓名、性别、年龄、职称和基本工资字段内容。SELECT 编号 , 姓名 , 性别 , YEAR(DATE())-YEAR( 出生日期 ) AS 年龄 , ;

职称 , 基本工资 FROM rsb

[例 3-22] 查询 bmdm.dbf 中的全部字段以及所有记录,并将结果输出在屏幕上。SELECT * FROM bmdm TO SCREEN

[例 3-23] 查询表 rsb.dbf 中基本工资字段的最高值、最低值、平均值,合计值以及参与统计的人数。SELECT MAX( 基本工资 ) AS 最高 , MIN( 基本工资 ) AS 最低 , ;

AVG( 基本工资 ) AS 平均 , SUM( 基本工资 ) AS 合计 , COUNT(*) AS 统计人数 ;

FROM rsb

Page 56: 第 3 章 数据库、查询和视图

2.按条件查询记录[例 3-24] 查询表 rsb.dbf 中“陈”姓职工的记录,要求显示编号,姓名,性别,出生日期和职称字段。SELECT 编号 , 姓名 , 性别 , 职称 , 出生日期 FROM rsb ;

WHERE 姓名 LIKE "陈%“

[例 3-25] 查询表 rsb.dbf 中基本工资在 1500元 ~2000 元的职工记录,要求显示编号,姓名,职称和基本工资字段。SELECT 编号 , 姓名 , 职称 , 基本工资 FROM rsb ;

WHERE 基本工资 BETWEEN 1500 AND 2000

[例 3-26] 从表 rsb.dbf和 gzb.dbf 中查询职工的编号,姓名,职称,岗位津贴和奖励工资。SELECT rsb.编号 , 姓名 , 职称 , 岗位津贴 , 奖励 FROM rsb, gzb ;

WHERE rsb.编号 =gzb.编号

Page 57: 第 3 章 数据库、查询和视图

3.查询结果分组[例 3-27] 统计表 rsb.dbf 中各类职称的人数,并求出基本工资的最高、最低和平均值。SELECT 职称 , COUNT(*) AS 人数 , MAX( 基本工资 ) AS 最高 , ;

MIN( 基本工资 ) AS 最低 , AVG( 基本工资 ) AS 平均 ;

FROM rsb ;

GROUP BY 职称

[例 3-28] 按职称分组统计表 rsb.dbf 中基本工资的最高值、最低值和平均值,只显示基本工资平均值大于 1000 元统计结果。SELECT 职称 , 性别 , MAX( 基本工资 ) AS 最高 , MIN( 基本工资 ) AS 最低 ,;

AVG( 基本工资 ) AS 平均 ;

FROM rsb;

GROUP BY 职称 HAVING 平均 >1000

Page 58: 第 3 章 数据库、查询和视图

4.查询结果排序[例 3-29] 查询表 rsb.dbf 中姓名,性别,出生日期和职称字段内容,结果按出生日期字段的降序排序输出。SELECT 姓名 , 性别 , 出生日期 , 职称 ;

FROM rsb ;

ORDER BY 出生日期 DESC

[例 3-30] 从表 rsb.dbf和 gzb.dbf 中查询职工的姓名,性别,职称,基本工资和保险内容,先按性别字段升序,然后按职称字段降序,最后按保险字段的降序排序输出。SELECT 姓名 , 性别 , 职称 , rsb. 基本工资 , 保险 ;

FROM rsb, gzb WHERE rsb.编号 =gzb.编号 ;

ORDER BY 性别 , 职称 DESC, 保险 DESC

Page 59: 第 3 章 数据库、查询和视图

5.嵌套查询[例 3-31] 列出部门代码是“ A01” 的职工的工资详细清单。SELECT * FROM gzb WHERE 编号 IN (SELECT 编号 FROM rsb WHERE 部门代码 ="A01")

6.查询结果输出[例 3-32] 查询所有“讲师”的工资情况,结果按“实发工资”降序排列,分别保存到临时表 js 、表 js1.dbf 和文本文件 js2.txt 。SELECT * FROM gzb ;WHERE 编号 IN (SELECT 编号 FROM rsb WHERE 职称 ="讲师 ") ;ORDER BY 实发工资 DESC ;INTO CURSOR jsSELECT * FROM gzb ;WHERE 编号 IN (SELECT 编号 FROM rsb WHERE 职称 ="讲师 ");ORDER BY 实发工资 DESC ;TO FILE js2

Page 60: 第 3 章 数据库、查询和视图

二.界面操作建立查询1.使用查询向导建立查询

启动查询向导:选择菜单【文件 →】 【新建 →】 在“新建”对话框中选择“文件类型”中的【查询】选项,然后单击【向导】按钮 。

[例 3-33] 利用查询向导查询 rsb.dbf 中职称为“讲师”的记录,要求按出生日期的升序输出编号、姓名、性别、出生日期和职称 5 个字段内容,并以 cx.qpr 保存查询设置。操作步骤:

Page 61: 第 3 章 数据库、查询和视图
Page 62: 第 3 章 数据库、查询和视图

2.利用“查询设计器”建立查询利用“查询设计器”建立查询的基本步骤如下:( 1 )启动“查询设计器”。( 2 )进行查询设置:包括添加被查询的表、设置输出字段、联结条件、记录筛选、输出排序、分组以及查询结果的去向等操作。( 3 )执行查询。( 4 )保存查询设置。[例 3-34] 从 rsb.dbf和 gzb.db 中查询基本工资大于等于1000 元的职工记录,要求输出编号、姓名、性别、职称、基本工资、岗位津贴字段,并按基本工资降序排列输出到表 jbqg1000.dbf 中,将查询设置保存为 cx1000.qpr 。

Page 63: 第 3 章 数据库、查询和视图
Page 64: 第 3 章 数据库、查询和视图
Page 65: 第 3 章 数据库、查询和视图

3.6 视图的建立与使用 1.概念:视图是建立在数据库表之上的虚拟表,它是由数据库表或其它

视图的某些字段而构成的。视图中的数据存于数据库表中,本身不含数据,其数据是在打开视图时临时从源表中提取的。只有打开数据库,才能在数据库中建立和使用视图。

2.优点:( 1 )视点集中 ( 2 )查询的简单性 ( 3 )提高数据的安全性 ( 4 )逻辑上的数据独立

Page 66: 第 3 章 数据库、查询和视图

3.6.1 建立视图的 CREATE SQL VIEW 命令命令格式:CREATE SQL VIEW [< 视图名 >] [REMOTE] [CONNECTION <连接名 > [SHARE] |CONNECTION 数据源名 ] [AS <SQL-SELECT 子句>]

功能:按照 AS SQL-SELECT子句命令建立一个本地或远程的 SQL

视图,或打开“视图设计器”来建立 SQL 视图。

[例 3-35] 建立一个用于统计数据库 rsgzk.dbc 中表 rsb.dbf 各类职称人数的视图,视图取名为 zcst 。OPEN DATABASE rsgzk

CREATE SQL VIEW zcst AS SELECT rsb. 职称 , COUNT(*) AS 人数 ; FROM rsb GROUP BY 职称USE zcst

BROWSE

Page 67: 第 3 章 数据库、查询和视图

[例 3-36] 在数据库 rsgzk.dbc 中建立一个包含表 rsb.dbf和表 gzb.dbf 的所有字段视图,视图取名 rsgzst 。

OPEN DATABASE rsgzk

CREATE SQL VIEW rsgzst AS SELECT * FROM rsb, gzb WHERE rsb.编号 =gzb.编号USE rsgzst

BROWSE

Page 68: 第 3 章 数据库、查询和视图

3.6.2 通过视图设计器创建视图[例 3-37] 在数据库 rsgzk.dbc 中利用视图设计器建立一个包含有编号、姓名、性别、职称、基本工资、岗位津贴和奖励字段的视图,视图取名 st ,并要求将岗位津贴设置为可更新源表字段,并将副教授的岗位津贴值由 30 改为 35 。

Page 69: 第 3 章 数据库、查询和视图

3.6.3 视图的其他操作1. 修改视图的命令: MODIFY VIEW < 视图名 >

2. 删除视图的命令: DROP VIEW < 视图名 >

3. 视图更名的命令:RENAME VIEW 源视图名 TO 目标视图