Visual FoxPro程序设计基础教程(第二版))第5章解析
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OPEN DATABASE 图书馆管理 CREATE SQL VIEW 书籍-读者视图 AS; SELECT * FROM sj; INNER JOIN jy; ON sj.sjbh = jy.sjbh; INNER JOIN dz; ON dz.dzbh = jy.dzbh
2018/12/13 23
• 例如,如果连接条件中使用的是日期型字段,可选用适 当的比较操作符,使得返回结果中只包括某段时间内的 记录。
选择不同的连接类型,可以扩展查询结果,使结果 中既包括与连接条件匹配的记录,也包括与连接条 件不匹配的记录。如果视图中不止两个表,还可以 通过改变FROM子句中的连接顺序改变结果。
2018/12/13 19
2018/12/13 5
5.1.2 创建本地视图
创建本地视图,可以采用以下方式之一 进行:
• 在项目管理器中选定一个数据库,单击 “数据库”符号旁的加号;选定“本地视 图”,然后单击“新建”按钮,打开“视 图设计器”。 • 在数据库已打开时,使用CREATE SQL VIEW命令显示“视图设计器”。 • 使用带有AS子句的CREATE SQL VIEW命 令。 2018/12/13
2018/12/13 3
创建视图(续)
创建视图时,VFP在当前数据库中保存一个视图定义, 该定义包括图中的表名、字段名以及它们的属性设置。 在使用视图时, VFP根据视图定义构造一条SQL语句, 定义视图的数据集合。 在VFP中,可以创建两种类型的视图:本地视图和远程 视图。
• 本地视图利用VFP的SQL语句从表或者其他视图中选取信 息; • 远程视图利用远程SQL语句从远程ODBC数据源表中选取 信息。 • 可以将一个或多个远程视图加入到本地视图中,以便能 在同一个视图中同时访问VFP数据和远程ODBC数据源中 的数据。
比较图5-3和图5-4可以 发现,在图5-4中多了 没有借书的读者,例如, 读者“刘哲”。
2018/12/13
图5-4 读者借阅视图2
21
2. 在结果中包含不匹配记录(续)
若要控制那些包含在视图中的不匹配记录,可选择 表5-1的连接类型。
表5-1 控制视图中不匹配记录可选择的连接类型
若要 只返回完全满足连接条件的记录 返回 JOIN 关键字左侧表中的所有记录及右侧表中匹 配的记录 返回 JOIN 关键字右侧表中的所有记录及左侧表中匹 配的记录
2018/12/13 9
5.1.4 修改视图
使用项目管理器或命令语言,可在“视图设 计器”中修改已有的视图。 若要以编程方式修改视图的SQL命令串,则 必须创建新视图,保存视图定义并覆盖旧视 图。 注意:用编程方式创建视图时有一个小技巧, 即在“视图设计器”中,可打开一个已有的 视图,复制只读的SQL字符串,并粘贴到代 码中。
比较第1章的表1-3 (借阅信息表)可 以发现,“读者借阅 视图”的dzbh与表13的dzbh排列顺序是 一致的
2018/12/13
图5-3 读者借阅视图
17
1. 定义和修改连接条件(续)
连接条件有以下几个要素:连接类型,建立连接的 字段和用于连接字段的比较操作符。 在上面的例子中,连接的类型为内部连接,表读者 信息的记录只有与借阅信息表的一个或多个记录相 匹配,才会被包含在结果中。 若要改变视图的结果以满足特定需求,可指定:
2018/12/13 8
5.1.3 用已有的SQL SELECT语句创建视图
可以使用宏替换将SQL SELECT语句存入一 个变量,再用CREATE SQL VIEW命令的AS 子句来调用。
• 例如,下面的代码将一条SQL SELECT语句存入 dz-jy变量,然后用它创建一个新视图: dz-jy = "SELECT dz.dzxm, dz.dzbh, jy.jybh, jy.jyri; FROM dz, jy WHERE jy.dzbh = dz. dzbh“ CREATE SQL VIEW dz-jy AS &dz-jy
2018/12/13 4
5.1.1 使用向导创建视图
用户可以使用本地视图向导创建本地视图。 若要在ODBC数据源的表上建立可更新的视 图,可以使用远程视图向导。 使用向导创建视图的步骤如下:
(1)在项目管理器中选择一个数据库。 ( 2 )选定“本地视图”或“远程视图”,然后选 择“新建”按钮。 (3)选择“视图向导”按钮。 (4)按照向导屏幕上的指令操作。
• 在项目管理器中先选择一个数据库,再选定要删 除的视图,然后选择“移去”; • 或者使用DELETE VIEW或DROP VIEW命令。
例如,下面的代码从数据库中删除dz-view视图和sjview视图:
2018/12/13
DELETE VIEW dz-view DROP VIEW sj-view
第5章 使用视图查询和修改数据
创建视图 使用视图 在视图中更新数据 集成视图 处理游离数据 优化视图性能 小结
1
2018/12/13
5.1 创建视图
使用向导创建视图 创建本地视图 用已有的SQL SELECT语句创建视图 修改视图 重新命名视图 删除视图 创建多表视图 访问远程数据
请使用 内部连接 左外部连接 右外部连接
返回两个表中的匹配和不匹配的所有记录
2018/12/13
全外部连接
22
3. 定义多表间的连接条件
如果创建包含两个以上表的视图,可通过改变连接 条件的顺序来改变结果。
• 例如,要查找有关被读者借阅的书籍的信息,可创建一 个基于书籍信息表、读者信息表和借阅信息表的视图, 在它们公有的字段间建立内部连接:读者信息表和借阅 信息表都有读者编号字段,借阅信息表和书籍信息表都 有书籍编号字段。此视图基于如下的SQL语句:
2
2018/12/13
创建视图
视图是VFP 6.0中为应用程序和用户提供的另一种定 制的、可更新的数据集合,它具备了表和查询的特 点并被保存在数据库中。 视图为用户提供了浏览、使用VFP 6.0表中数据的一 种有力工具。 视图和查询有很多类似处,创建视图与创建查询的 步骤相似:选择要包含在视图中的表和字段,指定 与表的连接条件,指定过滤器选择特定的记录。 与查询不同的是,视图可选择如何将在视图中做的 数据修改传给原始文件,或建立视图的基表。
如果要在结果中包含不匹配的行,可用外部连接。 当使用外部连接,不匹配行的空字段将返回NULL值。 以下代码生成的视图如图5-4所示。
OPEN DATABASE 图书馆管理 CREATE SQL VIEW 读者借阅视图2 AS; SELECT * FROM dz; LEFT OUTER JOIN jy; ON dz.dzbh = jy.dzbh
1. 定义和修改连接条件(续)
可用“视图设计器”和编程语言修改视图中 的连接类型。 若要修改连接类型,可以采用以下方式之一:
• 选择“联接”选项卡。 • 双击连接线。 • 打开数据库,用CREATE SQL VIEW 命令将表名 和连接条件加入FROM 子句。
2018/12/13
20
2. 在结果中包含不匹配记录
• 在项目管理器中,创建一个视图,并在“视图设计器” 中加入需要的表。 • 打开数据库,用CREATE SQL VIEW命令将表名及连接条 件加入FROM子句中。
2018/12/13 14
1. 定义和修改连接条件
只使用CREATE SQL VIEW命令将表加入视图,而不定 义相应的连接条件,会得到表之间的“叉乘”,即表中 记录的任意可能组合。 需要在语句的FROM或WHERE子句指定连接条件。只 有符合连接条件的不同表中的记录才被组合在一起。 如果表间存在永久关系,将自动用作连接条件。 典型情况下,可使用由表间的主关键字和外部关键字建 立的关系,定义连接条件。 在连接条件中比较它们公有的字段值(通常使用相等作 为比较条件)。
OPEN DATABASE 图书馆管理 MODIFY VIEW dz-view
2018/12/13 11
5.1.5 重新命名视图
可以使用项目管理器或RENAME VIEW命令 重新命名视图,采用以下方式之一进行:
• 在项目管理器中先选择一个数据库,再选择要重 命名的视图,然后从“项目”菜单中选择“重命 名文件”。 • 使用RENAME VIEW命令。
6
5.1.2 创建本地视图(续)
例如,可以使用以下代码创建包含dz(读者信息) 表中所有字段的视图,运行结果如图5-1所示。
CREATE SQL VIEW dz-view AS SELECT *; FROM 图书馆管理!dz
2018/12/13
图5-1 读者信息视图
7
5.1.2 创建本地视图(续)
• • • • 建立连接的字段。 字段间的比较操作符。 如果视图中有两个表,须考虑连接的顺序。 连接的类型。
18
2018/12/13
1. 定义和修改连接条件(续)
在主关键字和外部关键字以外的字段间建立连接在 特定的实例中也很有用,但并不常用。 通过比较操作符,可以控制比较和返回的记录,这 种方式类似于过滤器。
2018/12/13 10
5.1.4 修改视图(续)
若要在“视图设计器”中修改视图,可以采用以下 方式之一进行:
• 在项目管理器中选择视图名,再选择“修改”按钮,打 开“视图设计器”。 • 先打开数据库,再使用带视图名的MODIFY VIEW命令。
在“视图设计器”中,可使用“查询”菜单或“视 图设计器”工具栏将新表添加到视图中。 下面的代码在“视图设计器”中显示dz-view视图。
新视图的名称将显示在项目管理器中。 如果打开“数据库设计器”,会看到视图的显示方 式与表在分层结构中的显示方式相同,所不同的是 视图名代替了表名。 在创建视图时,如果表名前限定有数据库名,VFP 将在已打开的数据库中(包括当前的和所有非当前 的数据库)及默认搜索路径中寻找该表。 如果在视图定义中没有给表限定数据库名,那么在 使用该视图前,数据库必须打开。
例如,下面的代码将视图dz-view重命名为 “读者视图”:
RENAME VIEW dz-view TO 读者视图
2018/12/13 12
5.1.6 删除视图
可以使用项目管理器或DELETE VIEW命令从 数据库中删除视图定义。 删除视图前,包含此视图的数据库必须已打 开并已设置为当前数据库。 若要删除视图,可以:
• 例如,要查阅有关读者信息,要求包括读者的借阅信息,可创建 一个由dz表和jy 表生成的视图。在这个例子中,dz表和jy表有同 一字段dzbh。
2018/12/13 15
1. 定义和修改连接条件(续)
若要在视图中定义连接条件,可以采用以下方式之一:
• 在项目管理器中,创建和修改视图,并在“视图设计器” 中加入需要的表。 • 打开数据库,用CREATE SQL VIEW命令将表名及连接条 件加入FROM子句。
&& ANSI SQL标准语法
13
5.1.7 创建多表视图
要想访问存储在不同表中的相关信息,可以创建一 个视图并加入两个或更多的表,或在已有的视图中 加入表。 可以使用“视图设计器”或CREATE SQL VIEW命 令添加表。加入表后,使用表之间定义的连接条件, 进一步对视图结果进行控制。 要创建多表视图,可以指定以下方式之一进行:
图5-2说明了视图设计器中指定的内部连接及它在SELECT-SQL语句 中的表示。
20
1. 定义和修改连接条件(续)
以下代码创建一个如上例描述的新视图,用FROM 子句指定视图的连接条件:
OPEN DATABASE 图书馆管理 CREATE SQL VIEW 读者借阅视图AS; SELECT * FROM dz; INNER JOIN jy; ON dz.dzbh = jy.dzbh
4. 在WHERE子句中使用连接
可以在WHERE子句中指定连接条件,但不能 像在FROM子句的连接中那样指定连接类型。 对于远程视图,连接条件通常出现在WHERE 子句中。 以下代码创建的视图与前例相同,使用 WHERE子句指定此视图的连接条件:
2018/12/13 23
• 例如,如果连接条件中使用的是日期型字段,可选用适 当的比较操作符,使得返回结果中只包括某段时间内的 记录。
选择不同的连接类型,可以扩展查询结果,使结果 中既包括与连接条件匹配的记录,也包括与连接条 件不匹配的记录。如果视图中不止两个表,还可以 通过改变FROM子句中的连接顺序改变结果。
2018/12/13 19
2018/12/13 5
5.1.2 创建本地视图
创建本地视图,可以采用以下方式之一 进行:
• 在项目管理器中选定一个数据库,单击 “数据库”符号旁的加号;选定“本地视 图”,然后单击“新建”按钮,打开“视 图设计器”。 • 在数据库已打开时,使用CREATE SQL VIEW命令显示“视图设计器”。 • 使用带有AS子句的CREATE SQL VIEW命 令。 2018/12/13
2018/12/13 3
创建视图(续)
创建视图时,VFP在当前数据库中保存一个视图定义, 该定义包括图中的表名、字段名以及它们的属性设置。 在使用视图时, VFP根据视图定义构造一条SQL语句, 定义视图的数据集合。 在VFP中,可以创建两种类型的视图:本地视图和远程 视图。
• 本地视图利用VFP的SQL语句从表或者其他视图中选取信 息; • 远程视图利用远程SQL语句从远程ODBC数据源表中选取 信息。 • 可以将一个或多个远程视图加入到本地视图中,以便能 在同一个视图中同时访问VFP数据和远程ODBC数据源中 的数据。
比较图5-3和图5-4可以 发现,在图5-4中多了 没有借书的读者,例如, 读者“刘哲”。
2018/12/13
图5-4 读者借阅视图2
21
2. 在结果中包含不匹配记录(续)
若要控制那些包含在视图中的不匹配记录,可选择 表5-1的连接类型。
表5-1 控制视图中不匹配记录可选择的连接类型
若要 只返回完全满足连接条件的记录 返回 JOIN 关键字左侧表中的所有记录及右侧表中匹 配的记录 返回 JOIN 关键字右侧表中的所有记录及左侧表中匹 配的记录
2018/12/13 9
5.1.4 修改视图
使用项目管理器或命令语言,可在“视图设 计器”中修改已有的视图。 若要以编程方式修改视图的SQL命令串,则 必须创建新视图,保存视图定义并覆盖旧视 图。 注意:用编程方式创建视图时有一个小技巧, 即在“视图设计器”中,可打开一个已有的 视图,复制只读的SQL字符串,并粘贴到代 码中。
比较第1章的表1-3 (借阅信息表)可 以发现,“读者借阅 视图”的dzbh与表13的dzbh排列顺序是 一致的
2018/12/13
图5-3 读者借阅视图
17
1. 定义和修改连接条件(续)
连接条件有以下几个要素:连接类型,建立连接的 字段和用于连接字段的比较操作符。 在上面的例子中,连接的类型为内部连接,表读者 信息的记录只有与借阅信息表的一个或多个记录相 匹配,才会被包含在结果中。 若要改变视图的结果以满足特定需求,可指定:
2018/12/13 8
5.1.3 用已有的SQL SELECT语句创建视图
可以使用宏替换将SQL SELECT语句存入一 个变量,再用CREATE SQL VIEW命令的AS 子句来调用。
• 例如,下面的代码将一条SQL SELECT语句存入 dz-jy变量,然后用它创建一个新视图: dz-jy = "SELECT dz.dzxm, dz.dzbh, jy.jybh, jy.jyri; FROM dz, jy WHERE jy.dzbh = dz. dzbh“ CREATE SQL VIEW dz-jy AS &dz-jy
2018/12/13 4
5.1.1 使用向导创建视图
用户可以使用本地视图向导创建本地视图。 若要在ODBC数据源的表上建立可更新的视 图,可以使用远程视图向导。 使用向导创建视图的步骤如下:
(1)在项目管理器中选择一个数据库。 ( 2 )选定“本地视图”或“远程视图”,然后选 择“新建”按钮。 (3)选择“视图向导”按钮。 (4)按照向导屏幕上的指令操作。
• 在项目管理器中先选择一个数据库,再选定要删 除的视图,然后选择“移去”; • 或者使用DELETE VIEW或DROP VIEW命令。
例如,下面的代码从数据库中删除dz-view视图和sjview视图:
2018/12/13
DELETE VIEW dz-view DROP VIEW sj-view
第5章 使用视图查询和修改数据
创建视图 使用视图 在视图中更新数据 集成视图 处理游离数据 优化视图性能 小结
1
2018/12/13
5.1 创建视图
使用向导创建视图 创建本地视图 用已有的SQL SELECT语句创建视图 修改视图 重新命名视图 删除视图 创建多表视图 访问远程数据
请使用 内部连接 左外部连接 右外部连接
返回两个表中的匹配和不匹配的所有记录
2018/12/13
全外部连接
22
3. 定义多表间的连接条件
如果创建包含两个以上表的视图,可通过改变连接 条件的顺序来改变结果。
• 例如,要查找有关被读者借阅的书籍的信息,可创建一 个基于书籍信息表、读者信息表和借阅信息表的视图, 在它们公有的字段间建立内部连接:读者信息表和借阅 信息表都有读者编号字段,借阅信息表和书籍信息表都 有书籍编号字段。此视图基于如下的SQL语句:
2
2018/12/13
创建视图
视图是VFP 6.0中为应用程序和用户提供的另一种定 制的、可更新的数据集合,它具备了表和查询的特 点并被保存在数据库中。 视图为用户提供了浏览、使用VFP 6.0表中数据的一 种有力工具。 视图和查询有很多类似处,创建视图与创建查询的 步骤相似:选择要包含在视图中的表和字段,指定 与表的连接条件,指定过滤器选择特定的记录。 与查询不同的是,视图可选择如何将在视图中做的 数据修改传给原始文件,或建立视图的基表。
如果要在结果中包含不匹配的行,可用外部连接。 当使用外部连接,不匹配行的空字段将返回NULL值。 以下代码生成的视图如图5-4所示。
OPEN DATABASE 图书馆管理 CREATE SQL VIEW 读者借阅视图2 AS; SELECT * FROM dz; LEFT OUTER JOIN jy; ON dz.dzbh = jy.dzbh
1. 定义和修改连接条件(续)
可用“视图设计器”和编程语言修改视图中 的连接类型。 若要修改连接类型,可以采用以下方式之一:
• 选择“联接”选项卡。 • 双击连接线。 • 打开数据库,用CREATE SQL VIEW 命令将表名 和连接条件加入FROM 子句。
2018/12/13
20
2. 在结果中包含不匹配记录
• 在项目管理器中,创建一个视图,并在“视图设计器” 中加入需要的表。 • 打开数据库,用CREATE SQL VIEW命令将表名及连接条 件加入FROM子句中。
2018/12/13 14
1. 定义和修改连接条件
只使用CREATE SQL VIEW命令将表加入视图,而不定 义相应的连接条件,会得到表之间的“叉乘”,即表中 记录的任意可能组合。 需要在语句的FROM或WHERE子句指定连接条件。只 有符合连接条件的不同表中的记录才被组合在一起。 如果表间存在永久关系,将自动用作连接条件。 典型情况下,可使用由表间的主关键字和外部关键字建 立的关系,定义连接条件。 在连接条件中比较它们公有的字段值(通常使用相等作 为比较条件)。
OPEN DATABASE 图书馆管理 MODIFY VIEW dz-view
2018/12/13 11
5.1.5 重新命名视图
可以使用项目管理器或RENAME VIEW命令 重新命名视图,采用以下方式之一进行:
• 在项目管理器中先选择一个数据库,再选择要重 命名的视图,然后从“项目”菜单中选择“重命 名文件”。 • 使用RENAME VIEW命令。
6
5.1.2 创建本地视图(续)
例如,可以使用以下代码创建包含dz(读者信息) 表中所有字段的视图,运行结果如图5-1所示。
CREATE SQL VIEW dz-view AS SELECT *; FROM 图书馆管理!dz
2018/12/13
图5-1 读者信息视图
7
5.1.2 创建本地视图(续)
• • • • 建立连接的字段。 字段间的比较操作符。 如果视图中有两个表,须考虑连接的顺序。 连接的类型。
18
2018/12/13
1. 定义和修改连接条件(续)
在主关键字和外部关键字以外的字段间建立连接在 特定的实例中也很有用,但并不常用。 通过比较操作符,可以控制比较和返回的记录,这 种方式类似于过滤器。
2018/12/13 10
5.1.4 修改视图(续)
若要在“视图设计器”中修改视图,可以采用以下 方式之一进行:
• 在项目管理器中选择视图名,再选择“修改”按钮,打 开“视图设计器”。 • 先打开数据库,再使用带视图名的MODIFY VIEW命令。
在“视图设计器”中,可使用“查询”菜单或“视 图设计器”工具栏将新表添加到视图中。 下面的代码在“视图设计器”中显示dz-view视图。
新视图的名称将显示在项目管理器中。 如果打开“数据库设计器”,会看到视图的显示方 式与表在分层结构中的显示方式相同,所不同的是 视图名代替了表名。 在创建视图时,如果表名前限定有数据库名,VFP 将在已打开的数据库中(包括当前的和所有非当前 的数据库)及默认搜索路径中寻找该表。 如果在视图定义中没有给表限定数据库名,那么在 使用该视图前,数据库必须打开。
例如,下面的代码将视图dz-view重命名为 “读者视图”:
RENAME VIEW dz-view TO 读者视图
2018/12/13 12
5.1.6 删除视图
可以使用项目管理器或DELETE VIEW命令从 数据库中删除视图定义。 删除视图前,包含此视图的数据库必须已打 开并已设置为当前数据库。 若要删除视图,可以:
• 例如,要查阅有关读者信息,要求包括读者的借阅信息,可创建 一个由dz表和jy 表生成的视图。在这个例子中,dz表和jy表有同 一字段dzbh。
2018/12/13 15
1. 定义和修改连接条件(续)
若要在视图中定义连接条件,可以采用以下方式之一:
• 在项目管理器中,创建和修改视图,并在“视图设计器” 中加入需要的表。 • 打开数据库,用CREATE SQL VIEW命令将表名及连接条 件加入FROM子句。
&& ANSI SQL标准语法
13
5.1.7 创建多表视图
要想访问存储在不同表中的相关信息,可以创建一 个视图并加入两个或更多的表,或在已有的视图中 加入表。 可以使用“视图设计器”或CREATE SQL VIEW命 令添加表。加入表后,使用表之间定义的连接条件, 进一步对视图结果进行控制。 要创建多表视图,可以指定以下方式之一进行:
图5-2说明了视图设计器中指定的内部连接及它在SELECT-SQL语句 中的表示。
20
1. 定义和修改连接条件(续)
以下代码创建一个如上例描述的新视图,用FROM 子句指定视图的连接条件:
OPEN DATABASE 图书馆管理 CREATE SQL VIEW 读者借阅视图AS; SELECT * FROM dz; INNER JOIN jy; ON dz.dzbh = jy.dzbh
4. 在WHERE子句中使用连接
可以在WHERE子句中指定连接条件,但不能 像在FROM子句的连接中那样指定连接类型。 对于远程视图,连接条件通常出现在WHERE 子句中。 以下代码创建的视图与前例相同,使用 WHERE子句指定此视图的连接条件: