460 likes | 595 Views
第六章 查询与视图. 本 章 内 容. §6.1 查询与视图的基本概念 §6.2 查询 §6.3 视图. §6.1 查询与视图的基本概念. 1 .查询 本章要介绍的“查询”是个名词, 它是记载查找数据的方法的文件( .qpr ) 。 查询文件中记载的就是一条 SELECT-SQL 语句 ,查询文件一旦建立就可以反复调用。 第 5 章介绍:直接编写 SELECT-SQL 查询语句,实现数据查询。 本章介绍:如何 使用“查询设计器” 建立查询文件( .qpr ), 然后运行查询文件,从而实现数据查询。. 2 .视图
E N D
第六章 查询与视图 本 章 内 容 §6.1 查询与视图的基本概念 §6.2 查询 §6.3 视图
§6.1 查询与视图的基本概念 1.查询 本章要介绍的“查询”是个名词,它是记载查找数据的方法的文件(.qpr) 。 查询文件中记载的就是一条SELECT-SQL语句,查询文件一旦建立就可以反复调用。 第5章介绍:直接编写SELECT-SQL查询语句,实现数据查询。 本章介绍:如何使用“查询设计器” 建立查询文件(.qpr),然后运行查询文件,从而实现数据查询。
2.视图 一个数据库可能包含有多个数据库表。有时这些数据库表不能完全满足实际的需要,用户在使用数据库的过程中,需要从一个表或多个相关联的数据库表中抽取记录数据组成一个虚拟表,这虚拟表就是视图。因此,视图就是从数据库表中派生出来的虚拟表。 视图兼有“查询”和“表”的特点。说其具有“查询”的特点,是因为视图也是使用SELECT-SQL语句从一个表或多个相关联的数据库表中抽取记录数据;说其具有“表”的特点,是因为视图本身也可以像表一样作为数据源使用、像表一样打开浏览窗口。 之所以说视图是一个“虚拟表”,是因为视图本身不存储数据记录,它只是存储抽取数据的方法,即SELECT-SQL语句,而数据仍然存储在数据库表中。 视图不能独立存在,它包含于数据库中。只有在包含视图的数据库打开时,才能使用视图。
§6.2 查询 §6.2.1 查询设计器 1.“查询设计器”的概念 “查询设计器”是创建和修改查询文件的工具程序。通过“查询设计器”,用户不需编写命令代码,只要在设计器的交互界面中进行设置,就可以构造出SELECT-SQL命令,并存储为查询文件。
2.启动“查询设计器” 启动“查询设计器”常用的方法有如下3种: (1)从“项目管理器”启动“查询设计器” 打开“项目管理器”→选择“数据”选项卡→选中“查询”选项→单击“新建”按钮……。 (2)使用“新建”对话框启动“查询设计器” 打开“文件”菜单→选择“新建”命令(或者在“常用”工具栏中→单击“新建”按钮)→打开“新建”对话框→选中“查询”选项→单击“新建文件”按钮……。 (3)在命令窗口中键入: CREATE QUERY [<查询文件名>]
§6.2.2 使用“查询设计器”建立查询 1.使用“查询设计器”建立查询 【例6-1】查询非文具部门职工的销售情况,将职工号、姓名、部门、商品编号、商品名称、销售数量、规格型号和单价,按职工号升序输出到表Query1.dbf中。 这是一个多表联接查询,Zgjk表与Xs表按“职工号”内部联接,Xs表与Sp表按“商品编号”内部联接;记录筛选条件:部门<>"文具";排序依据:职工号(升序);输出方向是:Query1.dbf。
操作步骤如下: (1)打开已建的项目“职工管理.pjx”,在“项目管理器”中选择“数据”选项卡。选定“查询”选项,单击“新建”按钮,弹出“新建查询”对话框,单击“新建查询”按钮,打开“添加表或视图”对话框,如图6-2所示。 图6-2 “添加表或视图”对话框
(2)在“添加表或视图”对话框中,将“职工业绩”库中的Zgjk、Xs和Sp三个表添加到“查询设计器”中,添加表之后的“查询设计器”窗口如图6-3所示 。 图6-3 “查询设计器”窗口
如果表间没有联系,从添加第二个表开始,将打开“联接条件”对话框,并显示VFP自动配置的联接,如图6-4所示。用户可在此对话框中设置联接条件,然后单击“确定”按钮退出。如果单击“取消”按钮,则不在此设置联接条件 图6-4 “联接条件”对话框
(3)设置联接条件 选择“联接”选项卡,显示已设置的两个联系,如图6-5所示。在“联接条件”对话框中,无论是否设置了联接条件,都可以在此重新设置联接条件 。 图6-5 “查询设计器”的“联接”选项卡
(4)选定输出列 选择“字段”选项卡,在“可用字段”列表框中,分别选取“Zgjk.姓名、Zgjk.部门、Xs.商品编号、Sp.商品名称、Xs.销售数量、Sp.规格型号和Sp.单价”,单击“添加”按钮,将其添加到“选定字段”列表框中,如图6-3所示。 拖动“选定字段”列表框中字段左侧按钮,可调整输出项的排列顺序。 (5)设置筛选记录的条件 选择“筛选”选项卡,指定筛选条件:部门<>"文具“,如图6-6所示。 图6-6 “查询设计器”的“筛选”选项卡
(6)指定对查询结果进行排序的依据 选择“排序依据”选项卡,指定排序依据的字段“Xs.职工号”,排序方式“升序”,如图6-7所示。 图6-7 “查询设计器”的“排序依据”选项卡
(7)设置查询结果中是否包含重复记录,以及对查询记录的数目进行限制。 (7)设置查询结果中是否包含重复记录,以及对查询记录的数目进行限制。 选择“杂项”选项卡,如图6-8所示,本例取默认值。 图6-8 “查询设计器”的“杂项”选项卡
(8)选择查询结果的输出去向 选择“查询”菜单中的“查询去向”命令,或者单击“查询设计器”工具栏中的“查询去向”按钮,打开“查询去向”对话框,如图6-9所示。 图6-9 “查询去向”对话框
(9)查看生成的SQL命令 使用“查询设计器”建立查询的过程,实际上是构造一条SELECT-SQL命令的过程。选择“查询”菜单中的“查看SQL”命令,或者单击“查询设计器”工具栏中的“显示SQL”按钮,打开“查询设计器”的SQL代码窗口,可看到生成的SELECT-SQL命令,如图6-10所示。 图6-10 “查询设计器”的SQL窗口
(10)保存查询文件 选择“文件”菜单中的“保存”或“另存为”命令,或者单击“常用”工具栏中的“保存”按钮,打开“另存为”对话框,输入查询文件名,如“非文具部门销售情况.qpr”,然后单击“保存”按钮。 (11)运行查询 选择“查询”菜单中的“运行查询”命令,或者单击“常用”工具栏中的“运行”按钮,即可得到查询结果Query1.dbf表。 (12)显示查询结果 如果输出去向是浏览窗口,运行查询后即可看到查询结果。 本例的输出去向是表Query1.dbf,用户可打开Query1.dbf表,用BROWSE命令查看,如图6-11所示。
图6-11 查询结果Qstd1.dbf表 (13)关闭“查询设计器”,即关闭查询文件,结束查询设计。
2.使用查询 要使用已建的查询文件,先要在“查询设计器”中打开查询,然后才能运行查询或修改查询。 (1)打开查询 打开查询文件有如下两种方法: 1)在“项目管理器”中打开查询文件 如果已建的查询包含在某个项目中,则可按以下的步骤打开。 打开“项目管理器”→选择“数据”选项卡→选定要打开的查询文件→单击“修改”按钮→打开“查询设计器”。 2)使用“打开”对话框打开查询文件 单击工具栏中的“打开”按钮→弹出“打开”对话框→选择文件类型为:查询(*.qpr)→选定要打开的查询文件→单击“确定”按钮→打开“查询设计器”。
(2)使用查询 选择“查询”菜单中的“运行查询”命令,或者单击“常用”工具栏中的“运行”按钮,即运行查询文件。 (3)修改查询 修改查询也是在“查询设计器”中进行,修改查询与创建查询的方法一样。 【例6-2】打开[例6-1]所建的“非文具部门销售情况.qpr”,将其另存为“各部门销售情况查询.qpr”;然后将“各部门销售情况查询.qpr”修改为查询各部门总销售数量和总销售金额的查询,并在浏览窗口按总销售金额升序输出。 操作步骤如下: (1)打开查询 单击工具栏中的“打开”按钮→弹出“打开”对话框→选择文件类型为:查询(*.qpr)→选定要打开的查询文件:非文具部门销售情况.qpr→单击“确定”按钮→打开“查询设计器”。
(2)另存为新的查询 选择“文件”菜单中的“另存为”命令,打开“另存为”对话框。在“保存文档为:”文本框中输入新的查询文件名:各部门销售情况查询.qpr,如图6-12所示。 单击“保存”按钮,“各部门销售情况查询.qpr”成为当前文件,并在“查询设计器”中打开。 图6-12 “另存为”对话框
(3)选定输出列 选择“字段”选项卡,在“可用字段”列表框中,分别选取“Zgjk.部门”,单击“添加”按钮,将其添加到“选定字段”列表框中。 在“函数和表达式”文本框中输入“SUM(Xs.销售数量) AS 总销售数量”,或者单击文本框右侧的按钮,由“表达式生成器”生成,单击“添加”按钮,将其添加到“选定字段”列表框中。 用同样的方法将“SUM(Sp.单价*Xs.销售数量) AS 总销售金额”添加到“选定字段”列表框中,如图6-13所示。 图6-13 “查询设计器”的“字段”选项卡
(4)选择“筛选”选项卡,删除原有的筛选条件。 (5)指定对查询结果进行排序的依据 选择“排序依据”选项卡,选择排序依据为“总销售金额”,排序方式为“升序”,如图6-14所示 。 图6-14 “查询设计器”的“排序依据”选项卡
(6)指定对查询结果进行分组的依据 选择“分组依据”选项卡,选定分组依据的字段为“Zgjk.部门”,如图6-15所示 。 图6-15 “查询设计器”的“分组依据”选项卡
(7)选择查询结果的输出去向 选择“查询”菜单中的“查询去向”命令,或者单击“查询设计器”工具栏中的“查询去向”按钮,打开“查询去向”对话框。在此对话框中设置查询去向为“浏览”窗口,如图6-16所示 。 图6-16 “查询去向”对话框
(8)查看生成的SQL命令 选择“查询”菜单中的“查看SQL”命令,或者单击“查询设计器”工具栏中的“显示SQL”按钮,打开“查询设计器”的SQL窗口,可看到生成的SELECT-SQL命令,如图6-17所示 。 图6-17 “查询设计器”的SQL窗口
(9)保存查询文件 选择“文件”菜单中的“保存”命令,或者单击“常用”工具栏中的“保存”按钮 (10)运行查询 选择“查询”菜单中的“运行查询”命令,或者单击“常用”工具栏中的“运行”按钮,查询结果如图6-18所示 。 图6-18 各部门销售情况查询.qpr的查询结果 (11)关闭“查询设计器”,即关闭查询文件,结束查询设计。
3.“查询设计器”的局限性 使用“查询设计器”只能创建比较规则的查询,而不能创建复杂的查询。并不是所有的SQL-SELECT语句都可以用“查询设计器”构造,例如嵌套查询就不能使用“查询设计器”构造。
§6.3 视图 视图分为本地视图和远程视图两种。本地视图从本地数据库的表中选取数据,远程视图从远程ODBC(Open Database Connectivity)数据源的表中选取数据。两种视图的创建方法相似,以下介绍本地视图的创建和使用。 §6.3.1 使用SQL命令创建和删除视图 1.创建视图 命令格式: CREATE VIEW <视图名> AS <SELECT-SQL命令>
【例6-3】根据“职工业绩”数据库中的“Zgjk.dbf”表和“Gz.dbf”表,建立一个有关职工全部工资信息的视图:view_Gz。【例6-3】根据“职工业绩”数据库中的“Zgjk.dbf”表和“Gz.dbf”表,建立一个有关职工全部工资信息的视图:view_Gz。 在命令窗口中键入以下命令: &&以独占方式打开数据库 OPEN DATABASE 职工业绩 EXCLUSIVE CREATE VIEW view_Gz AS; SELECT Gz.职工号,姓名,基本工资,岗位工资,津贴,奖金, ; 住房公积金,工会费,实发工资 FROM Zgjk, Gz ; WHERE Zgjk.职工号=Gz.职工号
【例6-4】 在“职工业绩”数据库中,建立一个销售业绩的视图:view_Xs,该视图包含职工号、姓名、总销售数量和总销售金额4个字段。 在命令窗口中键入以下命令: OPEN DATABASE 职工业绩 EXCLUSIVE CREATE VIEW view_Xs AS ; SELECT Zgjk.职工号, 姓名, SUM(销售数量) AS 总销售数量 , ; SUM(单价*销售数量) AS 总销售金额 ; FROM zgjk, xs, sp ; WHERE Sp.商品编号 = Xs.商品编号 AND Zgjk.职工号 = Xs.职工号; GROUP BY Zgjk.职工号
或者 OPEN DATABASE 职工业绩 EXCLUSIVE CREATE VIEW view_Xs AS; SELECT Zgjk.职工号, 姓名, SUM(销售数量) AS 总销售数量 , ; SUM(单价*销售数量) AS 总销售金额 ; FROM zgjk INNER JOIN Xs ; INNER JOIN Sp ; ON Sp.商品编号 = Xs.商品编号 ; ON Xs.职工号= Zgjk.职工号; GROUP BY Zgjk.职工号 2.查看视图 若要查看视图查询结果,可像操作表一样,使用USE <数据库名!><视图名>命令打开视图,使用BROWSE命令打开视图浏览窗口。
【例6-5】 打开视图view_Gz,并浏览。 在命令窗口键入以下命令: USE 职工业绩!view_Gz &&打开视图 BROWSE &&打开视图浏览窗口 视图查询结果如图6-19所示。 图6-19 视图view_Gz的浏览窗口
【例6-6】 打开视图view_Xs,并浏览视图的记录数据。 在命令窗口键入以下命令: USE 职工业绩!view_Xs BROWSE 视图查询结果如图6-20所示。 图6-20 视图view_Xs的浏览窗口 3.删除视图 命令格式:DROP VIEW <视图名> 功能:从当前数据库中删除指定的视图。 【例6-7】 删除上例所建的视图:view_Xs。 在命令窗口中键入: DROP VIEW view_Xs
§6.3.2 使用“视图设计器”创建视图 1.使用“视图设计器”建立视图 【例6-8】使用“视图设计器”实现[例6-4]的视图创建。 (1)在“数据库设计器”中打开“职工业绩”数据库。 (2)选择“数据库”菜单中的“新建本地视图”命令,或者单击“数据库设计器”工具栏中的“新建本地视图”按钮,打开“新建本地视图”对话框,单击“新建视图”,打开“添加表或视图”对话框,如图6-21所示。 图6-21 “添加表或视图”对话框
(3)添加表或视图 在“添加表或视图”对话框中,分别选择“Zgjk”表、“Xs”表和“Sp”表,单击“添加”按钮,将其添加到“视图设计器”中,如图6-22所示。 图6-22 “视图设计器”的“字段”选项卡
(4)选择视图字段 在“视图设计器”中,选择“字段”选项卡,在“可用字段”列表中,分别选择“Zgjk.职工号”,“Zgjk.姓名”,单击添加按钮,将其添加到“选定字段”列表中,作为视图字段。 在“函数和表达式”文本框中输入“SUM(Xs.销售数量) AS 总销售数量”,或者单击文本框右侧的按钮,由“表达式生成器”生成,单击“添加”按钮,将其添加到“选定字段”列表框中。 用同样的方法将“SUM(Sp.单价*Xs.销售数量) AS 总销售金额”添加到“选定字段”列表框中,如图6-22所示。
(5)设置联接条件 选择“联接”选项卡,显示已设置的Zgjk表与Xs表的联接条件为:Zgjk.职工号=Xs.职工号,联接类型为:INNER JOIN;Sp表与Xs表的联接条件为:Sp.商品编号=Xs.商品编号,联接类型为:INNER JOIN,如图6-23所示 。 图6-23 “视图设计器”的“联接”选项卡
(6)设置分组依据 在“视图设计器”中,选择“分组依据”选项卡。设置分组依据为:Zgjk.职工号,如图6-24所示。 图6-24 “视图设计器”的“分组依据”选项卡
(7)查看生成的SQL命令 选择“查询”菜单中的“查看SQL”命令,或者单击“视图设计器”工具栏中的“显示SQL”按钮,打开“视图设计器”的SQL窗口,如图6-25所示。 图6-25 “视图设计器”的SQL窗口
注意:在SQL代码窗口中,看到的是SELECT-SQL命令,而不是 CREATE VIEW-SQL命令:CREATE VIEW <视图名> AS <SELECT-SQL语句>,这是视图与查询共同之处。 (8)保存视图 选择“文件”菜单中的“保存”或“另存为”命令,或者单击“常用”工具栏中的“保存”按钮,打开“保存”对话框,输入视图名称:view_Xs,然后单击“确定”按钮,将视图保存于数据库中。 视图不能独立于数据库,要在“数据库设计器”窗口中才可以看到视图。 (9)运行视图 选择“查询”菜单中的“运行查询”命令,或者单击“常用”工具栏中的“运行”按钮,视图查询的结果即显示于浏览窗口中,如图6-20所示。 (10)关闭“视图设计器”,即关闭视图,结束视图设计。
2.使用视图更新数据 【例6-9】使用视图view_Gz更新工资表Gz.dbf中的数据。 具体操作步骤如下: (1)打开“视图设计器” 在“数据库设计器”窗口中,右击职工工资信息视图view_Gz,在弹出的快捷菜单中选择“修改”命令,打开“视图设计器”,选择“更新条件”选项卡,如图6-26所示。
图6-26 “视图设计器”的“更新条件”选项卡图6-26 “视图设计器”的“更新条件”选项卡
(2)设置视图的更新条件 “更新条件”选项卡中各选项的功能说明如下: 1)表:用于设置可供视图修改的表,默认可更新“全部表”。 2)字段名:用于设置可供视图修改的字段。 该列表框中列出“字段”选项卡中所选定的全部字段。在“更新条件”选项卡中,钥匙符号下的“√”号表示关键字段,在铅笔符号下的“√”号表示可更新字段。 设置关键字段是使视图具有“可更新”功能的第一个必备条件。因为VFP是根据关键字段的值将视图的更新数据回送到相应的源表。如果要更新字段工资表Gz.dbf中“津贴”的数据,就要将 “Gz.职工号”设置为关键字段,否则系统无法判断“津贴”字段所做的更新对应于源表的哪一个记录。
设置可更新字段是使视图具有“可更新”功能的第二个必备条件。对于未被标注为可更新的字段,虽然可以在视图中对其进行修改,但修改不会保存和回送到源表。设置可更新字段是使视图具有“可更新”功能的第二个必备条件。对于未被标注为可更新的字段,虽然可以在视图中对其进行修改,但修改不会保存和回送到源表。 选中“发送SQL更新”,则将视图中的数据更新发送回源表,这是使视图具有“可更新”功能的第三个必备条件。 (3)保存视图可更新的设置 保存视图,就是保存有关视图可更新的设置。
(4)查看更新设置的效果 在“数据库设计器”中,双击工资表“Gz.dbf”和视图“view_Gz”,打开表和视图的浏览窗口,如图6-27所示。在两个窗口中,“职工号”为“0101”的记录,对应“姓名”为“李成华”,其“津贴”字段的值是“50.00”。现在将view_Gz视图窗口中“李成华”的“津贴”字段的值改为“70.00”,那么在“Gz”表窗口中,其对应的“津贴”字段的值也自动更新为“70.00”。 图6-27 “Gz”表和“view_Gz”视图的浏览窗口
若视图“view_Gz”的浏览窗口中的数据更新不能马上反映到“Gz”表的浏览窗口中,则只需关闭视图“view_Gz”的浏览窗,然后再打开视图“view_Gz”,就可以在“Gz”表的浏览窗口中看到数据更新的结果。若视图“view_Gz”的浏览窗口中的数据更新不能马上反映到“Gz”表的浏览窗口中,则只需关闭视图“view_Gz”的浏览窗,然后再打开视图“view_Gz”,就可以在“Gz”表的浏览窗口中看到数据更新的结果。 反之,若“Gz”表的浏览窗口中的数据更新不能马上反映到视图“view_Gz”的浏览窗口,则只需关闭视图“view_Gz”的浏览窗,然后再打开视图“view_Gz”,就可以看到数据更新的结果 。