1、数据库应用基础教程中南大学出版社中南大学出版社2 5 数据库及其查询与视图数据库及其查询与视图5.1 SQL语言5.2 设计数据库5.3 在数据库中查询数据5.4 视图35.1 SQL语言语言SQLSQL语言(Structured Query Language,简称SQL,结构化查询语言)是关系数据库标准语言。 SQL语言是一种非过程化语言,它面向集合操作,对数据提供自动导航。 SQL语言的几个特点:v 非过程化非过程化。在SQL语言中,只要求用户提出“做什么”,而无需指出“怎么做”。v 一体化一体化。集DDL(数据定义语言)、DML(数据操作语言)、DCL(数据控制语言)为一体。v 两种使用
2、方式,统一的语法结构两种使用方式,统一的语法结构。一种为联机交互使用方式;一种为嵌入某种高级程序设计语言的程序中,以实现数据库操作。4SQL语句语言精练,其数据查询、数据定义、数据操作、数据控制等命令只用了9个动词,它们是:数据定义:CREATE,DROP,ALTER数据查询:SELECT数据操作:INSERT,UPDATE,DELETE事务控制:GRANT,REVOKE55.11 数据定义语句(DDL) 数据定义语句是SQL中用来生成、修改、删除关系数据库的表、视图等基本要素的语言部分。它允许数据库用户来创建或重新构造数据库对象,如创建或删除一个数据库表。 1. 关于数据库的数据定义语句关于
3、数据库的数据定义语句(1) 建立数据库: CREATE DATABASE;(2) 更改数据库: ALTER DATABASE;(3) 删除数据库: DROP DATABASE;62、关于数据表的数据定义语句、关于数据表的数据定义语句(1) 创建表命令格式:命令格式:CREATE TABLE ( 列级完整性约束条件, 列级完整性约束条件,);说明:是所要定义表的名字 。表名必须以字母开头,最大长度为30个字符。即属性名(要求列名唯一)。完整性约束条件(对数据库表才起作用):就是当向某列输入数据时所必须遵守的规则,当用户操作表中的数据时,由数据库管理系统自动检查操作是否违背这些完整性约束条件。 7
4、例1. 建立一个学生关系;操作命令:CREATE TABLE student(sh NUMBER(6),学号Xm C(6),姓名Xb C(2),性别Csny D ,出生年月Xdm C(3)系代码)8 2 更改表 在实际操作中,可能需要对已创建的表进行修改,如增加新列、增加新的完整性约束条件或删除已有的完整性约束条件等。SQL提供了ALTER TABLE来完成这一功能。命令格式:命令格式:ALTER TABLE ADD 列级完整性约束条件DROP ;9说明:是所要修改的基本表的名字;ADD子句用于增加新列和新的完整性约束条件,如果表中已经存在数据的话,则所增加的列不能定义为NOT NULL,以免
5、与完整性约束条件相抵触;DROP子句用于删除指定的完整性约束条件;ALTER TABLE ADD 列级完整性约束条DROP 列级完整性约束条件;10例2:在student 表中增加新列jxj(奖学金),类型为数值型,宽度为5,小数位为2。 操作命令:ALTER TABLE student ADD jxj n(5,2)3. 删除表 当某个表不再需要时,可以使用SQL的DROP TABLE语句进行删除,其一般格式为:DROP TABLE 例如:删除当前盘当前目录中表名为GZ1.DBF的文件。操作命令:DROP TABLE GZ1115.1.2 数据查询语句数据查询语句SELECT 数据查询是数据库
6、的重要操作,SQL语言提供了SELECT语句用于数据库的查询,该语句具有灵活的使用方法和丰富的功能。命令格式:SELECT ALL|DISTINCT ,FROM ,WHERE GROUP BY HAVING ORDER BY ASC|DESC;12说明:SELECT说明执行查询操作;指查询结果表中包含的列名;DISTINCT说明要去掉重复的记录;FROM短语说明要查询的数据来自哪些表,可以对一个或多个基本表或视图进行查询。WHERE短语说明查询的条件;GROUP BY短语用于对查询结果进行分组,可以利用它进行分组汇总;HAVING短语必须跟随GROUP BY使用,用来限定分组必须满足的条件;O
7、RDER BY短语用来对查询结果进行排序;注意:WHERE短语和HAVING短语区别。WHERE短语的作用对象是基本表或视图,而HAVING短语的作用对象是组;各个短语之间的位置不能随意更改。13应用举例:例3.查询RSDA表中性别为男且ZC为教授的职工。SELECT * FROM RSDAWHERE XB=“男” AND ZC=“教授”例4. 查询RSDA表中性别为男的职工,显示时只显示部门编号、姓名、性别和职称内容。SELECT bmbh,xm,xb,zcFROM RSDAWHERE XB=“男” 14 在SELECT 子句后,还可以用表达式来代替属性名指定,以满足对查询结果的要求。例5.
8、 在rsda表中,jbgz属性表示职工的月工资,如果想查询职工的年工资,查询语句如下: SELECT XM,JBGZ*12 an_jbgz FROM RSDA 例6. 在工资后面注明单位是人民币(元)。 SELECT XM,JBGZ*12an_jbgz, 元元 RMB FROM RSDA155.1.3 数据操作语句(数据操作语句(DML) 数据操作语句允许用户对数据库中的数据进行修改更新。1. INSERT语句语句 SQL的数据插入语句INSERT语句通常有两种形式。一种是插入一条记录,另一种是插入子查询结果,后者一次可以插入多条记录。 (1) 插入单个记录INSERT INTO 表名(属性列
9、1,)VALUES (常量1,常量2);16其功能是将新记录插入指定表中。的值为常量1;的值为常量2,;如果某些属性列在INTO子句中没有出现,则新记录在这些列上将取空值。在表定义时说明了NOT NULL的属性列不能取空值,否则会出错。若INTO子句中没有指明任何列名,则新插入的记录必须在每个属性列上均有值。INSERT INTO 表名(属性列1,)VALUES (常量1,常量2);17 (2) 插入多个记录子查询嵌套在INSERT语句中,可以将一张表的查询结果输入到另一张表中。INSERT INTO 新表名(属性列1,属性列2)子查询; 注意:此功能在vf6.0中没有。18例7:向学生表中插
10、入一个新的学生记录。INSERT INTO student (sh,xm,xb,csny,xdm,jxj) VALUES(199801,王小平,女,1983/12/14,01,300)或INSERT INTO student VALUES(199801,王小平,女,1983/12/14,01,300)因为插入的是一条完整的记录。例8. 在上例中暂时不输入出生年月。INSERT INTO student VALUES(199804,刘海艳,女,NULL,01,380)192. UPDATE语句语句UPDATE 表名 SET 列名=表达式,列名=表达式, WHERE 条件;功能:修改指定表中满足W
11、HERE子句条件的记录。SET子句用于指定修改方法,即用表达式的值取代相应的属性列。如果省略WHERE子句,则表示要修改表中的所有记录。例如:将rsda表中性别为男的职工基本工资加500元。UPDATE RSDA SET JBGZ=JBGZ+500 WHERE XB=男男203. DELETE语句语句DELETE FROM WHERE ;其功能是从指定表中删除满足WHERE子句条件的所有记录。如果省略WHERE子句,则表示删除表中的全部记录。例如:删除RSDA表中职称为“助教”的职工。DELETE FROM RSDA WHERE ZC=“助教”215.1.4 事务控制语句事务控制语句1. GR
12、ANT 命令 SQL语言用GRANT语句向用户授予操作权限。命令格式:GRANT ,,ON TO ,,WITH GRANT OPTION;22不同类型的操作对象有不同的操作权限:v 属性列和视图的操作权限有5种:查询(SELECT)、插入(INSERT)、更新(UPDATE)、删除(DELETE)以及这四种权限的总和(ALL PRIVILEGES)。v 基本表的操作权限有7种:查询(SELECT)、插入(INSERT)、更新(UPDATE)、删除(DELETE)、修改表(ALTER)和建立索引(INDEX)以及这六种权限的总和(ALL PRIVILEGES)。v 对数据库可以有建立表(CREA
13、TETAB)的权限,该权限属于DBA,可由DBA授予普通用户, 普通用户拥有此权限后可以建立基本表,并拥有该基本表的一切操作权限。23 若选用了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限授予别的用户,即可以传播该权限。因此,应该慎用或不用WITH GRANT OPTION子句,以控制自己的数据资源,避免不必要的损失。242. REVOKE命令命令授予的权限可以由DBA(数据库管理员)或者其它授权者用REVOKE语句收回。命令格式:REVOKE ,, ON FROM ,,;255.2 设计数据库设计数据库 使用自由表还是数据库表保存要管理的数据取决于管理数据之间
14、是否存在关系以及关系的复杂程度。 数据库表文件与自由表文件一样,其扩展名仍然为 .DBF,数据库文件的扩展名为.DBC。 数据库设计的方法有二种:v 命令方式;v 数据库设计器。265.2.1 用命令方式设计数据库用命令方式设计数据库1. 创建数据库创建数据库 命令格式: CREATE DATABASE 数据库名 | ?功能:创建一个数据库并且打开它。例:CREATE DATABASE Zgxx.dbc 新建立的数据库里面是空的,用户可以通过向数据库中添加表、表之间的关系等。27 2. 在数据库中添加、创建和移去表在数据库中添加、创建和移去表 打开数据库后,可以创建新表,或向数据库中添加已有的
15、自由表,或从数据库中移去表,被移去的表则变成自由表。例如:向数据库Zgxx中添加Rsda、Bmda、Gz三个表(数据库文件名和表文件名可省去扩展名)。操作命令:OPEN DATABASE ZgxxADD TABLE RsdaADD TABLE BmdaADD TABLE Gz28例如:在数据库中Zgxx中创建Rsda、Bmda、Gz三个新表。操作命令:OPEN DATABASE Zgxx CREATE TABLE Rsda (BMBH C(2),BH C(5),XM C(8),XB C(2),HF L,CSNY D,ZC C(10),JBGZ N(6,2),XW G,JL M)CREATE T
16、ABLE Bmda (BMBH C(2),MC C(20)CREATE TABLE Gz (BMBH C(2),BH C(5),XM C(8),BT N(6,2),KK N(6,2),SFGZ N(7,2) 表名后括号内指出了表内各字段名、字段数据类型和宽度。新建的表自动属于创建该表时打开的数据库。29又如:在数据库中Zgxx中移去Rsda表。操作命令:OPEN DATABASE Zgxx REMOVE TABLE Rsda3. 数据库的关闭与删除数据库的关闭与删除数据库关闭命令:CLOSE DATABASE ALL,表示关闭所有数据库。数据库删除命令:DELETE DATABASE DELE
17、TETABLES 对于数据库删除命令,有DELETETABLES子句时表示删除数据库及所属数据库表,否则仅删除数据库,所属数据库表变成自由表。删除数据库前必须关闭数据库304. 创建关系创建关系 关系数据库中有一对一、一对多、多对多三种关系模型。在VFP中,只处理前两种关系,对于多对多的关系,需转换成两个一对多的关系实现。 在数据库中可以建立表间的永久关系和临时关系。 临时关系仅用于表间的关联,即控制关联表之间的记录指针的配合移动。自由表之间也可用命令实现关联,这些内容已在第4章中讨论,此处不再赘述。 31v 在查询设计器和视图设计器中自动作为默认联接条件;v 在数据库设计器中显示为联系表索引
18、的线;v 作为表单和报表的默认关系在数据环境设计器中显示;v 建立参照完整性信息。 永久关系是存储在数据库文件中的数据库表之间的关系,在数据库中,可通过数据库所属的数据库表的索引建立。永久关系具有如下特点: 在数据库表中,对一个字段可定义主索引 、普通索引、唯一索引或候选索引。在自由表中只能定义后三种索引。32主索引:要求相应字段的值不重复,即保证唯一性;主索引主要用于建立表间的永久关系,从而建立参照完整性。一个数据库表中只能有一个主索引。创建主索引和删除主索引的命令:ALTER TABLE ADD|DROP PRIMARY KEY TAG ADD用于建立索引,DROP用于删除索引,TAG后的
19、表示用作主索引的字段名,可选项TAG子句缺省时,表示索引关键字与字段同名。33普通索引:普通索引不考虑数据字段的值是否有重复值,只简单的把记录按照一定的顺序进行排序。可作为一对多关系的“多方”,一个数据库表中可有多个普通索引。可用INDEX命令建立。 建立普通索引和联接主索引形成一对多的永久关系命令:ALTER TABLE ADD FOREIGN KEY TAG REFERENCES 唯一索引:是为VFP与前面版本兼容设计的,可用INDEX命令建立,一个数据库表中可有多个唯一索引。一般情况下不推荐用户使用。34候选索引:要求相应字段的值不重复,可作为主关键字,用于在永久关系中建立参照完整性。一
20、个数据库表中可有多个候选索引。 建立候选索引命令:ALTER TABLE ADD UNIQUE TAG 建立候选索引和联接主索引形成一对一的永久关系命令:ALTER TABLE ADD|ALTER UNIQUE REFERENCES 其中、是用作候选索引的字段的名字和数据类型。 355.2.2 用数据库设计器设计数据库用数据库设计器设计数据库用数据库设计器设计数据库,需要完成下列步骤。v 打开数据库设计器操作步骤:(1) 单击VFP下的“文件”菜单;(2) 选定“新建”命令,打开“新建”对话框;(3) 选择“数据库”选项;(4) 单击“新建文件”按钮,打开“创建”对话框;(5) 输入要创建的数
21、据库名和位置,单击“保存”按钮,打开“数据库设计器”窗口。362. 将自由表添加进数据库可用以下方法进行操作。(1) 在数据库设计器窗口,单击右键弹出一快捷菜单,选择“添加表”命令。(2) 当数据库设计器窗口已打开时,VFP会生成一个“数据库”系统菜单;单击“数据库”菜单下的“添加表”命令即可。(3) 单击浮动在数据库设计器窗口的“数据库设计器工具栏”上“添加表”按钮。3. 建立索引4. 建立永久关系(用鼠标拖动的方法)37应用举例演示: 按P87 表51 数据库zgxx中的永久关系定义创建数据库zgxx,其中包含RSDA、BMDA、GZ三个表。385.2.3 数据字典数据字典 数据字典实际上
22、是一个名词概念。它是记录在数据库文件中的信息,这些信息包括从属于数据库的表的属性、每个表的字段属性、每个表的记录规则、表间关系和参照完整性(Referential Integrity,简称RI)信息。数据字典中的信息可通过命令、表设计器和参照完整性生成器进行设置、显示或修改。 39 1. 长表名长表名 长表名是表的属性。 长表名用于对数据库表文件名增加适当的注释,让用户易于理解表的含义。表文件名还是短名字,是数据库表或自由表的默认表名。用户还可定义一个不超过128个字符的长表名代替短表名标识数据库表。长表名可包含字母、数字、下划线、汉字,但首字符必须是字母、下划线或汉字,不能使用空格。如果定义
23、了长表名,当表出现在界面(如数据库设计器、查询设计器、视图设计器、游览窗口的标题栏等)中时,VFP将显示长表名。40长表名的创建和修改方法:(1) 用命令(2) 命令格式:(3) CREATE TABLE NAME (4) (2) 用表设计器(5) 例如:创建一个表文件名为“ABC”,长表文件名为“大学基础课程名称数据库表”。(6) 命令为:(7) CREATE TABLE ABC NAME ;(8) 大学基础课程名称数据表;(9) (课程编号 C(6),课程名称 C(30)(10)用表设计器演示。用表设计器演示。412. 记录规则记录规则包括记录有效性和触发器两类。 (1) 记录有效性 记录
24、有效性验证,指建立一规则对同一记录中不同字段之间的逻辑关系进行验证。规则栏指定规则,信息栏指定出错时的显示信息。如图5.5中。 规则和信息两栏的指定均可单击其右边按钮,在弹出的对话框中输入信息。 ( 2) 触发器 触发器包括插入触发器、更新触发器和删除触发器。指定一规则,当对数据库表进行插入(包括追加)、更新和删除时,验证规则,只有当规则成立时才能进行相应操作。规则可以是一逻辑表达式。423. 字段的属性(1)长字段名长字段名(2) 自由表的字段名最多包含10个字符,数据库表的字段名最多包含128个字符。(3)(2) 格式格式(4) 格式文本框用于键入格式表达式,确定当前字段(活动框批示的字段
25、,图5.6中显示的当前字段是BMBH))在浏览窗口、表单或报表中显示时采用的大小写、字体大小和样式。如键入一“!”号,能使浏览窗口输入输出时将字母转为大写,若键入字母“A”表示仅允许输入字母。(5) 43(3) 输入掩码输入掩码 输入掩码用于指定当前字段的输入格式,限制输入数据的范围,提高输入准确率。可用的输入掩码如下。X 允许输入字符9 允许输入数字# 允许输入数字、空格、+、-$ 显示SET CURRENCY命令指定的货币符号* 在指定宽度中,值左边显示* 指出小数点位置, 用逗号分隔小数点左边的数字 输入掩码必须按位指定,如设置99-999,表示相应字段只能输入数字,可输入5位数字,第三
26、个符号“-”不是输入掩码,照原样显示,“-”不用输入。还可指定其它符号。44(4) 标题标题 数据库环境下,若想显示表中的数据,可以在表“浏览”窗口下进行。在进行浏览时,如果用户不进行字段标题的设置,其表的标题显示的是字段名。由于字段名的最大长度只有10个字符长(自由表,数据库表字段名长度可以达到128个),有时难以概括清楚该名下数据的属性;另外,为了程序设计的方便,程序设计者常常把字段名设计成代码,这也难以概括清楚数据的属性,给数据浏览带来了很多不便。因此,为了在显示表中数据时浏览的清晰、方便,用户可以自定义字段标题。 通过设置字段的显示标题可以弥补对字段长度的限制。45(5) 字段有效性字
27、段有效性 为了提高表中数据输入的速度和准确性,除了定义字段的默认值外,还可以定义字段有效规则。字段的显示标题、注释、默认值、有效规字段的显示标题、注释、默认值、有效规则的操作方法:则的操作方法:选择字段单击数据库菜单单击修改打开表设计器进行相关操作46(6) 设置表中字段的默认值设置表中字段的默认值 为了提高表中数据输入的速度速度和准确性准确性,可以在向表输入数据前,定义某一字段数据的默认值。 (7) (7) 设置表中字段的注释设置表中字段的注释 为了提高数据表的使用效率及它的共享性,可以在建立数据表结构时,对字段加以注释,提醒自己或其它用户,清楚地掌握字段的属性、意义及特殊用途等。 注意:字
28、段标题和字段注释的区别。47指定一个表达式,用来确定字段在“浏览”窗口、表单、报表中显示时的格式。比如,大小写、字体等格式。指定实施数据字段级有效性检查的规则。指定字段的默认值。指定当输入违反字段级有效性规则时,显示的错误信息。指定类库的路径和文件名。如果要浏览文件,可使用对话框按钮。指定在“浏览”窗口、表单或报表中代表字段的标签。表单或报表中的属性设置可覆盖此设置。指定字段中输入数值的格式。例如,电话号码的格式为 (999) 999-9999。指定字段的默认控件类。提供输入字段注释的位置。484. 永久关系 由前面的知识我们已知永久关系是在数据库中建立的数据表之间的关系,这种关系能在运行结束
29、后一直保存。具有永久关系的表必须隶属于数据库。由于永久关系可以保存,因而用户不必在每次使用数据表的时候都重新创建关系。但是永久关系也不具有临时关系的优点,即永久关系不能不能实现数据记录指针的互动。495. 设置参照完整性设置参照完整性 参照完整性涉及一组表间规则。对于具有永久关系的父、子两个数据库表,当对一个表更新、删除或插入一条记录时,另一个表并未作相应变化,这就破坏了数据的完整性。VFP提供一个RI生成器(即参照完整性生成器)窗口供用户指出保证数据完整性的要求,VFP则根据用户要求生成参照完整性规则以保证数据完整性。50“参照完整性生成器”可以帮助您建立规则,控制记录如何在相关表中被插入、
30、更新或删除。在“参照完整性生成器”窗口,可以设置记录的插入、删除或修改规则。 在“参照完整性生成器”窗口,有三个三个选项卡选项卡即:“更新规则”、“删除规则”、“插入规则”供用户选择。51v 当选择“更新规则”选项卡,可以利用三个选择按钮,设置关联表间的更新规则。三个选择按钮的功能如下: 级联级联:用新的关键字值更新子表中的所有相关记录; 限制限制:若子表中有相关记录则禁止更新; 忽略忽略:允许更新,不管子表中的相关记录。52v 当选择“删除规则”选项卡,可以利用三个选择按钮,设置关联表间的删除规则。三个选择按钮的功能如下: 级联级联:删除子表中的所有相关记录; 限制限制:若子表中有相关记录,
31、则禁止删除; 忽略忽略:允许删除,不管子表中的相关记录。v 选择“插入规则”选项卡,可以利用二个选择按钮,设置关联表间的插入规则。二个选择按钮的功能如下: 限制限制:若父表中没有匹配的关键字值,则禁止插入; 忽略忽略:允许插入。 用户可根据具体操作的需要,确定以上插入、删除、更新的操作规则。53演示操作:演示操作:建立表间参照完整性建立表间参照完整性 将数据库文件“zgxx”中的三个表,设置记录的插入、删除或更新规则。545.3 在数据库中查询数据在数据库中查询数据 查询实际上是利用SELECT-SQL命令或查询设计器检索存储在表或视图中的信息,然后按照想得到的输出类型定向查询结果,输出类型可
32、以是浏览、报表或表等。查询结果是以扩展名为.QPR的文件形式保存。5.3.1 使用使用SELECT-SQL命令直接查询命令直接查询自学完成555.3.2 使用查询设计器查询使用查询设计器查询 1.1.用查询设计器创建查询用查询设计器创建查询 利用查询设计器创建查询的操作方法是: (1)打开“文件”菜单,选择“新建”。 (2)在“新建”窗口,选择“查询”,按“新建文件”。 (3)在“打开”窗口,选择要使用的表,进入“添加表或视图”窗口。 (4)在“查询设计器”窗口选择可用字段。 (5)当表中可出现在查询中的字段被选定后,保存查询结束操作。演示操作利用查询设计器创建查询利用查询设计器创建查询开始实
33、验例: 利用查询设计器创建单表查询“rcda查询1“。例: 利用查询设计器创建多表查询“bmbh和rsda查询1“。572.2.利用查询向导创建查询利用查询向导创建查询 利用查询向导创建查询操作方法是: (1)打开“文件”菜单,选择“新建” (2)在“新建”窗口,选择“查询”,再按“向导”, 进入“向导选取”窗口。 (3)在“向导选取”窗口,选择“查询向导”,再按“确定”按钮,进入“查询向导”步骤窗口。 (4)逐个选择出现在查询中的字段。 (5)添加数据表间的关联关系。 (6)保存查询。此时,利用查询向导创建查询操作结束演示操作利用查询向导创建查询利用查询向导创建查询开始实验例:利用查询 向导
34、创建单表查询“rcda查询2”。例:利用查询向导创建多表查询“rsda和bmda查询2”。593. 3. 使用查询使用查询 使用查询比使用数据表和数据库更方便、更快捷、更安全。查询的输出格式的具有多样化。使用查询就是确定查询结果的输出格式。在“查询去向”窗口,系统提供的七种输出格式。 浏览格式:把查询结果送入浏览窗口; 临时表格式:把查询结果存入一个临时的数据表中,可以随意处理这个临时表; 表格式:把查询结果存入一个数据表中,可以随意处理这个数据表,当关闭这个数据表后,查询结果仍将存在磁盘上; 图形格式:把查询结果以图形方式输出; 屏幕格式:把查询结果输出到屏幕上; 报表格式:把查询结果输出到
35、报表中; 标签格式:把查询结果输出到标签中。605.3.3 输出定向输出定向 可以只设置5.3.2节六个选项卡中的几个,完成所需要的选项卡设置后,可以单击VFP的查询菜单下的查询去向命令,产生如图5.16所示的输出定向窗口,用户可单击图中所需要的按钮,选择所需要的输出方式。退出查询窗口之前可以保存查询设置,供以后使用这个设置。615.4 视图视图 VFP视图是一个虚拟表,它的数据来源于数据表或其它视图,这些数据在数据库中并不存储,只是在数据库的数据字典中存储视图的定义。视图是从SQL语言移植而来的,故又称SQL视图。视图一经定义,它就成为数据库的一个组成部分。在VFP中,可用CREATE SQ
36、L VIEW命令创建视图,也可以用视图设计器创建视图。创建视图与创建查询类似,主要区别在于视图可以更新,而查询不行。视图分为本地视图和远程视图,后者数据来源于远程数据库系统。625.4.1 使用命令创建视图使用命令创建视图 创建视图命令格式:CREATE SQL VIEW REMOTE CONNECTION SHARE| AS SELECT-SQL命令63例如:创建一个名为SHTU的视图。CREATE SQL VIEW SHITU; AS SELECT DISTINCT;Bmda.BMBH,Bmda.MC,Rsda.BH,Rsda.XM,Rsda.JBGZ,Gz.BT,Gz.KK,;Rsda.
37、JBGZ + Gz.BT - Gz.KK AS 实发数;FROM Bmda, Rsda, Gz;WHERE Bmda.BMBH =Rsda.BMBH .and. Rsda.BH=Gz.BH645.4.2 使用视图设计器创建视图使用视图设计器创建视图 操作步骤是: (1)打开数据库文件,进入“数据库设计器”窗口。 (2)再打开“数据库”菜单,选择“新建本地视图”。 (3)在“新建本地视图”窗口,选择“新建视图”按钮,进入“视图设计器”窗口,同时弹出“添加表或视图”窗口。 ( ( 窗口中的窗口中的其他其他按钮按钮: : 显示“打开”对话框,从中可以选择自由表,并添加到查询中。) (4)在“添加表或
38、视图”窗口,把建立视图所依据的表添加到视图设计器中,再进入“联接条件”窗口。 (5)在“联接条件”窗口,选择表间的联接条件后,进入“视图设计器”窗口。 (6)在“视图设计器”窗口的可用字段列表框中,逐个单击可用的字段添加到“选定字段”的列表框中。 (7)当表中可出现在视图中的字段被选定后,保存视图。并使之被存放在打开的数据库中,一个视图文件建立完成。演示操作利用视图设计器创建视图利用视图设计器创建视图开始实验例: 利用视图设计器,依据“数据1”的数据库,创建一个单表本地视图“rcda视图1”,视图中包含“bh”、“xm”、“xb”、“jbgz”4个字段。例: 利用视图设计器,依据“数据1”的数
39、据库,创建一个多表本地视图“rcda 和 bmda 视图1”,视图中包含“bh”、“xm”、“bmbh”、“mc”4个字段。66视图设计器中选项卡作用的说明联接的含义:联接的含义: 视图和查询的一个数据库操作,通过比较指定字段中的值联接两个或多个表或视图中的记录。例如,表之间的默认联接是一个内部联接,只有当联接字段中的值相等时,才选择两个表中的记录。由于 SQL 是基于数学中的集合理论,每个表都可以有一个圆代表。联接条件决定了交叉点,代表相匹配记录的集合。这个交叉是在两个圆内部发生的。一个外部联接不但包含表内部的交叉部分中相匹配的记录,也包含圆的交叉部分左或右外部的记录。前进67内部联接内部联
40、接一种联接,只有当联接字段中的值满足一定的条件时,才将两个表中的记录组合并添加到查询结果中。例如,查询设计视图中表之间的默认联接是内部联接,并且只有联接字段中的值相等时,才从两个表中选择记录。68外部联接外部联接一个查询中输入源之间的连接,允许选择相匹配的记录,以及不满足联接条件的记录。使用“左部连接”、“右部连接”或“完全外部连接”,可以从一个输入源中选择所有记录,或者从其他输入源中选择匹配记录。使用“完全外部连接”,可以不考虑是否匹配,从两个输入源中选择所有记录。返回69选项卡选项选项卡选项字段:指定字段,SUM 或 COUNT 之类的合计函数,或其它表达式。联接:指点联接表达式,用它来匹
41、配多个表或视图中的记录。筛选:指定选择记录的条件,比如在字段内指定值或在表之间定义临时关系的连接条件。70排序依据 指定字段,SUM 或 COUNT 之类的合计函数,或用于把有相同字段值的记录合并为一组的其它表达式。分组依据 指定字段,SUM 或 COUNT 之类的合计函数,或用于把有相同字段值的记录合并为一组的其它表达式。更新条件 指定更新视图的条件(仅适用于“视图设计器”)。杂项 指定是否要对重复记录进行检索,同时是否对记录(返回记录的最大数目或最大百分比)做限制。71 更新条件:指定条件,将视图中的修改传送到视图所使用的表的原始记录中。选项卡选项选项卡选项表:表:指定视图所使用的哪些表可
42、以修改。此列表中所显示的表都包含了“字段”选项卡“选定字段”列表中的字段。重置关键字重置关键字:从每个表中选择主关键字字段作为视图的关键字字段,对于“字段名”列表中的每个主关键字字段,在钥匙符号下面打一个“对号”。关键字字段可用来使视图中的修改与表中的原始记录相匹配。全部更新:全部更新:选择除了关键字字段以外的所有字段来进行更新,并在“字段名”列表的铅笔符号下打一个“对号”。“更新条件”的有关解释72发送发送 SQL 更新更新指定是否将视图记录中的修改传送给原始表。字段名窗格字段名窗格显示所选的、用来输出(因此也是可更新的)的字段。 关键字段(使用钥匙符号作标记)关键字段(使用钥匙符号作标记)
43、 指定该字段是否为关键字段。可更新字段(使用铅笔符号作标记)可更新字段(使用铅笔符号作标记) 指定该字段是否为可更新字段。字段名字段名 显示可标志为关键字字段或可更新字段的输出字段名。73SQL WHERE 子句包括子句包括 控制将哪些字段添加到 WHERE 子句中,这样,在将视图修改传送到原始表时,就可以检测服务器上的更新冲突。 冲突是由视图中的旧值和原始表的当前值之间的比较结果决定的(OLDVAL( ) 和 CURVAL( ) 之间比较)。如果两个值相等,则认为原始值未做修改,不存在冲突;如果它们不相等,则存在冲突,数据源返回一条错误信息。 旧值和当前值之间的冲突所返回的错误为“错误 15
44、85:记录已被其他人修改”,或者是“错误 1494:更新冲突。请使用 TABLEUPDATE() 进行强制更新或使用 TABLEREVERT() 回滚”。74关键字段:关键字段:如果在原始表中有一个关键字字段被改变,设置 WHERE 子句来检测冲突。对于由另一用户对表中原始记录的其他字段所做修改,不进行比较。关键字和可更新字段:关键字和可更新字段:如果另一用户修改了任何可更新的字段,设置 WHERE 子句来检测冲突。关键字和已修改字段:关键字和已修改字段:如果从视图首次检索(默认)以后,关键字字段或原始表记录的已修改字段中,某个字段做过修改,设置 WHERE 子句来检测冲突。关键字段和时间戳:
45、关键字段和时间戳:如果自原始表记录的时间戳首次检索以后,它被修改过,设置 WHERE 子句来检测冲突。只有当远程表有时间戳列时,此选项才有效。75使用更新使用更新指定字段如何在后端服务器上更新。SQL DELETE 然后然后 INSERT指定删除原始表记录,并创建一个新的在视图中被修改的记录。SQL UPDATE用视图字段中的变化来修改原始表的字段。76 2 2利用视图向导创建视图利用视图向导创建视图操作步骤是: (1)打开数据库文件,进入“数据库设计器”窗口。 (2)打开“数据库”菜单,选择“新建本地视图”,进入“新建本地视图”窗口。 (3)在“新建本地视图”窗口,选择“视图向导”按钮,进入
46、“本地视图向导”分步骤窗口。 (4)逐个选择出现在视图中的字段。 (5)添加数据表间的关联关系。 (6)保存视图。此时,利用视图向导创建多表本地视图操作结束。演示操作利用视图向导创建视图利用视图向导创建视图开始实验例:利用视图向导,依据“数据1”的数据库,创建一个单表本地视图“rsda 视图1”,视图中包含“bh”、“xm”、“zc”、“jbgz” 4个字段。例: 利用视图向导,依据“数据1”的数据库,创建一个多表本地视图“rcda和 gz视图2”,视图中包含“bh”、“xm”、“xb”、“jbgz”、“ bt”、“kk”、6个字段。785.4.3 在视图中更新数据在视图中更新数据 查询的结果
47、只能阅读,不能修改。而视图不仅有查询的功能,还可以修改记录数据并使源表随之更新。视图设计器的更新条件选项卡具有更新数据功能。 因为视图可以限定数据表中数据的使用范围,因此,也就限定了可更新数据,数据表中字段的数据就不会被破坏,并提高数据维护的安全性。 利用本地视图更新数据表中的数据操作方法是: (1)打开数据库文件 (2)打开“数据库”菜单,选择“修改”。 (3)在“视图设计器”窗口,选择“更新条件”选项卡,选择要更新数据的字段名;当要更新数据的字段名确定后,结束更新条件的设置。演示操作利用视图更新源表中数据利用视图更新源表中数据开始实验例:在已创建的视图2中,修改视图中王强的“xb”的值为“
48、女”,观察相应源表是否随之变化。80实验内容 1利用P100 习题(3)创建的数据库资源,创建多个不同的视图及查询文件。2利用已有的查询文件设计不同的查询去向文件。3.将P100101 习题中的内容上机操作。81 2.4 VFP 6.0 工程项目本本 节节 要要 点点创建项目创建项目项目管理器的使用项目管理器的使用定制项目管理器定制项目管理器82项目项目: 一种文件,用于跟踪创建应用程序所需要的所有程序、表单、菜单、库、报表、标签、查询和一些其他类型的文件。项目用“项目管理器”进行维护,具有 .pjx 扩展名。即项目是文件、数据、文档和 Visual FoxPro 对象的集合。“项目管理器项目
49、管理器”是是 Visual FoxPro 的的“控制中心控制中心”。项目管理器项目管理器83建立项目文件建立项目文件“项目管理器”主要是用来组织和管理Visual FoxPro 中不同类型的文件。只有在建立一个项目文件之后, Visual FoxPro 才生成一个“项目管理器”。在Visual FoxPro 中可以用以下两种方法建立项目文件:v 使用“创建”对话框建立项目文件v 使用向导建立项目文件84 利用第一种方法建立项目文件以后,项目文件中不包含任何数据文件,这些数据文件须由用户在以后的设计中不断添加和修改。 利用第二种方法建立项目文件要比第一种方法灵活,因为在利用向导建立项目文件时,用
50、户既可以让向导仅生成应用程序框架,也可以让向导在建立项目文件的同时,也创建一个完整的数据库应用程序,其中包含表、表单、报表等文件。85创建项目创建项目 使用“创建”对话框建立项目文件的操作方法是:v打开“文件”菜单,选择“新建”。v在“新建”窗口,单击“项目”,再按“新建文件”按钮,进入“创建”窗口。v在“创建”窗口,输入项目文件的名,按“保存”按钮,进入“项目管理器”窗口。v此时一个空的项目文件已建立完成,在“项目管理器”窗口,按“退出”按钮结束操作。 演示实验二十七创建项目创建项目例1 利用“项目管理器”,建立一个空的项目文件“项目1”。87“项目管理器”为数据提供了一个组织良好的分层结构