第6章? 如何获取数据库中的数据

来源:百度文库 编辑:神马文学网 时间:2024/04/27 17:08:18

第6章  如何获取数据库中的数据

教学内容:

   6.1  案例引入——从商品信息管理数据库中获取数据

   6.2  查询商品信息管理数据库

   6.3  应用SELECT—SQL命令进行查询

   6.4  视图方法查看商品信息管理数据库

教学时间:

   第九、十周

教学方法:

   演示文稿演示教学和实际操作演示教学相结合

教学目的:

   本章介绍数据库及自由表一个重要应用——查询和视图。查询和视图是根据用户的需要从数据库或自由表中按一定要求选择出部分数据及计算统计组成一个虚拟数据表。查询(Query)是从数据库或自由表中检索或统计出所需数据。视图(View)除具有查询所有的检索、统计功能外,还可以改变视图中记录值以及源数据库或自由表的值。

教学重点难点:

   1、建立、使用、修改查询

   2、应用SELECT—SQL命令进行查询

   3、建立、使用、修改视图

教学过程:

   Visual FoxPro 提供了查询和视图的工具: 查询设计器和视图设计器。通过查询设计器和视图设计器进行设计,使用户很方便地从数据库或自由表中检索及统计出所需要的数据。

   查询(Query)是从数据库或自由表中检索或统计出所需数据。视图(View)除具有查询所有的检索、统计功能外,还可以改变视图中记录值以及源数据库或自由表的值。

6.1  案例引入——从商品信息管理数据库中获取数据

   建立数据库表或自由表后,在数据表中保存了大量数据,如何灵活使用这些数据,是充分利用数据资源、提高管理水平的一个重要问题。在实际应用中用户常常需要根据要求选择其中一部分数据构成所需的新的数据组合。如员工表yg.dbf,表中有6个字段: 员工编号ygbh、姓名xm、性别xb、基本工资jbgz、职务zw和密码mm。员工表中的部分记录内容显示在表6-1中。

   <参见教材P1676--1>

   利用员工表yg.dbf中的记录数据,选择其中的部分数据构成各种不同的表。如选择员工编号ygbh、员工姓名ygxm、性别xb、职务zw等字段列出表6-2所示数据。

   <参见教材P1686--2>

   又如选择列出所有女职工的数据表6-3

   <参见教材P1686--3>

   还可以用多个表中的数据构成新的表,使用员工表yg.dbf和销售情况表xsqk.dbf构成员工的销售情况表ygxsqk.dbf,如表6-4所示。表中选择了员工表的员工编号yg.ygbh、姓名字段yg.xm,选择了销售情况表的商品编号xsqk.spbh、销售数量xsqk.xssl和总金额xsqk.zje等字段。多表之间的数据通过表之间的关系联接。如列出员工的销售情况,计算出每个员工的销售总金额作为一输出项。

   <参见教材P1696--4>

   从上面几个表格的例子可知,开发人员可以灵活使用数据库中各表的数据组成不同需要的数据表,除了选择字段还可以设置条件,如选择性别是的记录;也可以进行统计计算,如计算出每位职工销售商品的总的金额等。Visual FoxPro 为用户提供了从数据表中按一定的条件获取部分数据的工具,有查询视图两种。查询视图都是对数据表进行检索及统计出所需的数据。用视图构成的表可以视为一数据表保存在数据库中,可对源数据表记录进行修改或直接被作为数据表引用。而用查询构成的表不能直接对源表进行操作。查询视图对多个相关的数据表进行检索统计时显得特别方便。查询是通过查询设计器视图通过视图设计器进行设计操作,在后面的几节中将详细介绍查询视图的操作方法。

6.2  查询商品信息管理数据库

   查询设计器对数据表进行各种查询操作,获得用户所需要的不同结果。本节中通过对商品信息管理数据库进行查询来介绍查询设计器的操作。

 6.2.1  单表查询日销售商品情况

   对单个数据表进行查询,这里以商品信息管理数据库中的销售情况表xsqk.dbf获得某一天的商品销售情况为例,查询日销售情况。所要选取的字段有:商品编号spbh、销售数量xssl、总金额zje 获得某日商品销售情况的操作如下:

   1. 打开查询设计器

 
 

     从项目管理器打开查询设计器。打开项目管理器,在数据选项栏列表中选择查询项。再单击新建按钮,出现新建查询对话框。在对话框中选择新建查询即打开查询设计器。如图6-1所示。随查询设计器打开的有查询菜单和查询设计器工具栏,如图6-2所示。

 
 
 

   2. 添加数据表

     打开查询设计器后,一般将出现添加表或视图对话框,如未出现添加表或视图对话框时,可选择查询设计器工具栏或执行查询菜单中的添加表命令打开。添加表或视图对话框如图6-3所示。在对话框内的数据库栏和数据库中的表栏中选择所需的数据库sp和销售情况表xsqk.dbf。选择了数据表xsqk.dbf后,单击添加按钮。将所需的表添加到查询设计器,再单击关闭按钮,进入查询设计器

                     6-3  “添加表或视图对话框

   3. 选择所需的输出字段

     查询设计器的下半部有多个选项卡,选择字段选项卡。字段选项卡上包含了可用字段列表、选定字段列表和将字段从可用字段列表调入选定字段列表中的添加全部添加按钮,以及将选定输出的字段从选定字段列表中释放回可用字段列表中的移去全部移去按钮。可用字段列表中列出了可供选用的数据表字段,每个字段前面标出了字段所属的数据表。在查询设计器可用字段列表中分别选择商品编号xsqk.spbh、销售数量xsqk.xssl、总金额xsqk.zje等字段,每选定一个字段后单击添加按钮,则将选定的字段一一添加到选定字段列表中。

   4. 设置筛选日期的条件

   案例中要求选择某日的销售情况,筛选条件通过筛选选项卡进行设置,如图6-4所示。在此选项卡中建立销售日期xsqk.xsrq”字段的筛选关系: xsqk.xsrq=日期。如选择20031029日的销售情况。表达式则为:

   xsqk.xsrq={^2003/10/29}

   筛选选项卡中设置筛选条件的方法是: 表达式等号左边的内容列在选项卡的字段名栏中,单击字段名右边的下拉箭头,出现所有的可选字段和一个<表达式…>项。

   如果表达式左边选用的是字段,可直接在列表中单击选用。如果还要构成一定的表达式关系,则可选择<表达式…>项。本例中的xsqk.xsrq可直接从字段名栏中选出。表达式等号右边的内容列在实例栏中。在条件栏中选择“=”关系符号。

   5. 运行查询结果

   单击工具栏中的运行按钮或选择查询菜单中的运行查询命令,以默认的浏览状态显示出日销售情况表,如图6-5所示。

 6.2.2  多表查询日销售商品情况

 
 
 

   上面的查询日销售商品情况是应用一个数据表进行查询的,如果希望销售商品情况表表达得更完善,这里可增加一个商品信息表spxx.dbf参与查询,从中获得商品名称.spxx.spmc字段,使查询结果更加直观,如图6-6所示。现介绍多表的查询操作。

  1. 打开查询设计器

   单击文件菜单中的新建命令,在新建对话框中选择查询选项,单击新建文件按钮,打开查询设计器

  2. 添加数据表

   按工具栏添加表按钮,打开添加表或视图对话框,在数据库栏中选择数据库sp。从数据库中的表栏中分别选择商品信息表spxx.dbf和销售情况表xsqk.dbf添加到查询设计器中。

  3. 建立两表的联接关系

   查询设计器中选择联接选项卡,建立商品信息表spxx和销售情况表xsqk两表的联接关系: spxx.spbh=xsqk.spbh,如图6-7所示。如果两表在数据库中已建立了永久关联的关系,联接选项卡中会自动建立起联接关系。

  4. 选择输出字段

   选择字段选项卡。可用字段列表中列出了商品信息表spxx.dbf和销售情况表xsqk.dbf两表的全部字段。在其中分别选择商品信息表spxx.dbf的商品编号spxx.spbh、商品名称spxx.spmc字段和销售情况表xsqk.dbf的销售数量xsqk.xssl、总金额xsqk.zje字段添加到选定字段列表中。

  5. 设置筛选日期的条件

   筛选选项卡中建立销售日期xsqk.xsrq字段的日筛选关系。同样选择表达式:

       xsqk.xsrq={^2003/10/29}

  6. 运行查询结果

   单击工具栏中的运行按钮或选择查询菜单中的运行查询命令,出现如图6-6所示的日商品销售查询情况表。

 6.2.3  查询员工销售业绩情况

   通过查询每个员工的销售情况,表现每个员工的工作业绩。本例中以月为时间单位查询员工在某一月的销售情况,需要用到销售情况表xsqk.dbf和员工表yg.dbf查询操作如下

   (1) 打开查询设计器,添加销售情况表xsqk.dbf和员工表yg.dbf

   (2) 选择输出字段。选择的字段应该有: 员工编号xsqk.ygbh、姓名yg.xm、销售金额小计。其中销售金额小计是对每一个员工的当月销售总值进行统计。

   销售金额小计的设置: 销售金额小计是按员工编号xsqk.ygbh对销售总金额xsqk.zje字段进行求和,求和计算表达式为SUM(xsqk.zje),并按员工编号分组计算。销售金额小计的设置是使用查询设计器字段选项卡中的函数和表达式生成。具体操作为

      单击函数和表达式栏右边的按钮,出现表达式生成器对话框。

      在对话框的表达式栏中生成表达式: SUM(xsqk.zje)  AS  “销售金额小计 SUM()求和符号从表达式生成器的函数数据栏中选择获得,在函数数学栏中寻找到“SUM()求和符号,双击该求和符号,符号立即显示到表达式栏中。

      来源于表栏中选择销售情况表xsqk。在字段栏中选择总金额xsqk.zje字段并双击,xsqk.zje(总金额)字段显示在表达式栏中的SUM()的括号中间。

      AS引出该字段的标题销售金额小计,完成表达式SUM(xsqk.zje)  AS  “销售金额小计的设置。

      表达式生成器确定按钮,退出表达式生成器。表达式SUM(xsqk.zje)  AS  “销售金额小计显示在函数和表达式栏中。

      单击添加按钮将表达式添加到选定字段栏中。

 
 
 

   (3) 分组统计的控制。销售金额小计项是对每一个员工的销售情况求和。这里按员工编号分组对每个员工的销售情况进行统计。分组统计通过查询设计器的分组依据选项卡进行设置。在可用字段栏中选择员工编号xsqk.ygbh添加到分组字段中,如图6-8所示。根据分组依据的设置,则可分别按照员工编号对总金额字段进行分组求和统计出每个员工的销售金额小计值。

   (4) 设置筛选月份条件。案例中要求的统计某月的销售情况通过筛选选项卡进行。在此项中获得销售日期xsqk.xsrq字段的年份和月份筛选关系:

     YEAR(xsqk.xsrq)= AND MONTH(xsqk.xsrq)=月份

   例如这里选择2003年及9月份,表达式则为:

     YEAR(xsqk.xsrq)=2003  AND MONTH(xsqk.xsrq)=9

   筛选选项卡中获得表达式的方法是: 等号左边的内容置于筛选选项卡中的字段名栏中,单击字段名栏右边的下拉箭头,出现所有可选字段和一个<表达式…>项。如果表达式左边选用的是字段,可直接在列表中单击选择。如果还要构成一定的表达式关系,则可选择<表达式…>项进行设计。本例中的YEAR(xsqk.xsrq)MONTH(xsqk.xsrq)都须通过<表达式…> 项进行设置。等号右边的内容在实例栏中输入。关系符等于号在条件栏中选择。第一个表达式YEAR(xsqk.xsrq) =2003设置在第1行,第2个表达式MONTHxsqk.xsrq=9设置在第2行,两个表达式之间的关系在第1行表达式后的逻辑项中选择。筛选选项卡显示在图6-9所示。

   5 运行查询结果。单击工具栏中的运行按钮,运行上面设置的查询,得到每个员工在9月份中的销售情况表,如图6-10所示。

 6.2.4  “查询设计器的各功能设计方法

   掌握了查询的作用和基本操作后,我们来全面了解一下查询设计器的各种功能的设计方法。

  1.  打开查询设计器的方法

    文件菜单中的新建命令打开查询设计器。单击文件菜单中的新建命令,在出现新建对话框中选择查询,并单击新建文件按钮,打开查询设计器

    从项目管理器打开查询设计器。打开项目管理器,如图6-11所示。在数据选项栏列表中选择查询项。再单击新建按钮,出现新建查询对话框。在对话框中选择新建查询即打开查询设计器

   打开查询管理器后的同时在菜单栏上出现查询菜单,在查询设计器窗口出现查询设计器工具栏。如果查询设计器工具栏未出现,可选择显示菜单中的工具栏命令,从工具栏对话框中选择查询设计器打开查询设计器工具栏。

  2. 添加或移除数据库表或自由表

   选择查询菜单中的添加表或单击查询设计器工具栏中的添加表按钮,调出图6-3添加表或视图对话框。在添加表或视图对话框中选择所要添加的数据库和数据表,按确定按钮,将选定的表添加到查询设计器中。要添加多个数据表时,则重复进行上述操作。如果所需要的表在数据表栏中未列出,可按其他按钮,从打开对话框中寻找所需的表。所需添加的表加到查询设计器中后,按关闭按钮,退出添加表对话框,完成添加表的操作。

   查询设计器中移除数据表的方法是: 先选定要移去的表,再按查询菜单中的移去表命令或查询设计器工具栏的移去表按钮,即可移去选择的表。

  3. 选择查询输出字段

   选择查询设计器字段选项卡,该选项卡上的可用字段列表框中列出了查询设计器中数据表的全部字段,从中单击选择要输出的字段。选择所需要的字段后单击添加按钮,将选定的字段添加到选定字段中。全部添加可将可用字段列表中的所有字段同时添加到选定字段中。移去按钮将选定字段列表框中选择的字段移回到可用字段列表框中。全部移去按钮将选定字段列表中的全部字段移回到可用字段列表框中。

   利用函数和表达式栏构成一定的表达式作为一个字段,用AS引导该表达式的标题。单击添加按钮将表达式添加到选定字段栏中。

  4.  建立多表联接关系

   如果使用多个相关的数据表须建立联接关系,建立联接关系的方法是: 单击联接选项卡,如图6-12。在联接选项卡的字段名中选择第一个数据表的一个字段,在中选择另一个数据表与第一个数据表所选的字段相关联的字段。

   选项中的条件是确定所选两表的字段以什么条件关联。关联的条件有多种,关联条件在表6-5中列出。选项卡中的表示与所选择的条件相反。

   选项中类型确定关联的关系类型,关联的类型有内联接(Inner  Join)、左联接(Left  Outer  Join)、右联接(Right  Outer  Join)和完全联接(Full  Join)四种。四种联接类型的关系列在表6-6中。

  5. 确定查询条件

   选择查询的数据需要满足一定的条件时,在查询设计器中使用筛选选项卡。筛选选项卡如图6-13所示。查询条件根据字段满足的条件来确定,在筛选卡中设置字段符合的条件。字段名中选择所设计的字段,实例中输入满足的条件值。可选择的条件与表6-5中列出的条件相同。

  6. 设置查询的排序

   当需要对查询结果按某一字段进行排序时,选择查询设计器排序依据选项卡。排序依据选项卡如图6-14所示。在此选择卡中,选定字段列表框中列出可选择的字段,其字段是前面选定的输出字段。在选定字段列表中选择需要排序的字段,按添加按钮将其添加到排序条件列表中。同时在排序选项栏中确定排序的字段是升序还是降序。

  7. 确定查询的分组

   在查询时有时需要对记录的某些数据进行分组统计计算,如对销售出的商品按相同的商品进行销售量的统计。对此使用分组依据选项卡。分组依据选项卡在如图6-15中显示。

  8. 其他项目的设定

   应用查询设计器杂项选项卡对查询结果排除重复记录、选择查询范围等操作。杂项选项卡如图6-16所示。

   (1) 查询结果排除重复数据的记录

     当记录中的某一字段有相同记录时,查询使用无重复记录选项可以使查询结果排除该字段的重复记录,只显示排在最前面的一个记录。

   (2) 设置查询的记录范围

     使用查询杂项选项卡中的列在前面的记录选项,可以选择查询范围。查询的范围有下面几种情况:

      全部: 查询全部记录。

      部分记录: 查询记录中前n个记录。在记录个数选项中设定记录的前面n个记录。

      n%个记录: 按百分比选择记录的范围,选择n值后,再选定百分比项确定选择记录的百分比。

   选择后两种情况时,需要先对记录进行排序。

  9. 查询结果的输出方向

   查询设置完成后,其查询结果可有多个去向。查询结果主要去向有: 浏览、临时表、表、图形、屏幕、报表、标签。

   查询输出去向的设置通过查询工具栏中的查询去向按钮或查询菜单中的查询去向命令。单击查询去向按钮或命令后出现查询去向对话框,如图6-17所示。在对话框中选择查询输出结果的去向后,按确定完成设置。

   设置查询结果去向后执行查询,将以设定的去向产生查询结果,如设置了查询结果去向为,则查询的输出结果存入指定的数据表中,而不显示在浏览框中。

  10. 运行查询

   使用查询设计器完成查询设置后,用查询菜单中的运行查询命令或常用工具栏的运行按钮来运行查询结果。

   查询文件的扩展名为.qpr,编译后的查询文件扩展名为.qpx

   使用命令执行查询,使用  DO  查询文件名.qpr 命令进行查询。

 6.2.5  部门月销售情况交叉表的设计

   月销售情况表的记录如表6-7中所示,表中反映了各销售部门每个月的销售情况,从表中查看部门各月份销售情况时不够直观,Visual FoxPro 提供了一种更直观查看这类表的设计方法: 交叉表设计。交叉表将两个字段的值分作为表格的行标题和列标题,如将月份字段的值作为行标题、部门字段的值作为列标题。另一个字段作为前两个字段交叉单元的值,查询结果构成一种三维表,如表6-7所示。

   设计交叉表应用交叉表向导工具,交叉表向导设计方法如下:

      选择文件菜单中的新建命令,打开新建对话框。在对话框中选择查询项,并单击向导按钮,打开向导选取对话框。在向导选取对话框中选择交叉表向导,即打开交叉表向导

      字段选择。在交叉表设计步骤1中选择数据表和设计交叉表所需的字段,如字段选择 部门、月份和销售额。

      定义布局。交叉表设计步骤2中设计查询表的行标题、列标题和数据栏内容,如图6-18所示。将部门字段拖到框中,把月份字段拖到框中,销售额拖到数据框中。

      加入总结信息。交叉表设计步骤3是加入总结信息,总结信息为查询增加一个统计计算列,对查询的数据进行总结计算。总结计算的类型分别有: 求和、计数、平均值、最大值、最小值等。汇总分类有数据求和、包含数据的单元格数目、占整张表的总计的百分比、不统计等各项。加入总结信息设计对话框如图6-19所示。计算各部门的销售总金额时总结项选择求和,分类汇总项选择数据求和

      完成设计。在保存交叉表查询、保存并运行交叉表查询和保存交叉表查询并在查询设计器中修改该查询中选择一项,完成交叉表设计。部门月销售情况交叉表的运行结果如图6-20所示。

6.3  应用SELECT—SQL命令进行查询

   使用查询设计器工具对数据表进行的查询也可以使用SELECT—SQL命令实现。实质上使用查询设计器的查询设计最终也是生成一组SELECT—SQL命令。

 6.3.1  SELECT—SQL查询命令

   SELECT—SQL查询命令的格式如下:

   SELECT  ALL / DISTINCT TOP  nExpr  PERCENT]]

   Alias.Select-Item  AS  Column-Name

   ,Alias.Select-Item  AS  Column-Name

   FROM  FORCE][DatabaseName! table  lacal-Alias

   INNER/LEFT/OUTER/RIGHTOUTER/FULLOUTER

   JOIN  DatabaseName!Table  Local-Alias  ON  JoinCondition [[INTO  Destination /TO  FILE  FileName 

   ADDITIVE/TO  PRINTER PROMPT/TO  SCREEN]]

   PREFERENCE  PreferenceName

   NOCONSOLE PLAIN][NOWAIT

   WHERE  JoinCondition  AND  JoinCondition… AND/OR 

   FilterCondition  AND /OR  FilterCondition….]]]

   GROUP  BY  GroupColumn  ,GroupColumn…]]

   HAVING  FilterCondition  UNION

   ALL  SELECTCommand

   ORDER  BY  Order-Item ASC/DESE  ,Order-Item ASC/DESC]]

   SELECT—SQL命令可以分解为多个部分,每一部分分别对应查询设计器的一种操作。SELECT—SQL命令主要分为下列各部分:

  1. 指定输出字段

   SELECT  ALL / DISTINCT  TOP  nExpr  PERCENT]]

   Alias.Select-Item  AS  Column-Name

   ,Alias.Select-Item  AS  Column-Name

   命令中的参数:

   Alias.Select-Item 指定查询结果的输出字段、常量或表达式。Alias表示数据表别名。如果选择一个数据表的全部字段可用“*”表示。

   AS  Column-Name]: 设置查询输出字段或表达式项的标题。

   ALL / DISTINCT]: 确定有无重复记录。ALL表示所有记录,ALL可以省略。DISTINCT表示当有重复记录时只输出重复记录中第一个记录。

   TOP  nExpr  PERCENT]]: 确定记录范围。TOP  nExpr表示记录数,TOP  nExpr  PERCENT表示记录的百分数。

  2. 指定查询的数据表

   FROM  DatabaseName!  table  lacal-Alias

     table 指定查询的数据表。

   DatabaseName!]: 当数据源是数据库表时的数据库名。

   lacal-Alias]: 本地表的别名。

   如数据表取自sp数据库的xsqk表表示为: FROM  spxsqk

   例: 显示sp数据库中xsqk表的所有记录,输出商品编号spbh和销售数量xssl字段。

     SELECT  xsqk.spbh, xsqk.xssl  FROM  sp! xsqk

  3. 确定多表间的联接

   INNER / LEFT OUTER / RIGHTOUTER / FULLOUTER

   JOIN  DatabaseName!Table  Local-Alias   ON  JoinCondition

   命令中的参数:

   INNER/LEFT OUTER/RIGHT OUTER/FULLOUTER]: 确定是内联接、左联接、右联接还是完全联接。

   INNER  OUTER 内联接

   LEFT   OUTER 左联接

   RIGHT  OUTER 右联接

   FULL   OUTER 完全联接。

   DatabaseName!Table 指定被联接的数据库和数据表名。

   JoinCondition 确定联接条件。

   例: 查询数据库源spspxx表和xsqk表。其中spxx表和xsqk表以内联接方式联接。

     FROM  sp!spxx  INNER  JOIN  sp!xsqk  ON  spxx.spbh= xsqk.spbh

  4. 确定查询输出去向

   [[INTO  Destination / TO  FILE  FileName  ADDITIVE / TO  PRINTER PROMPT / TO  SCREEN]]

   命令中的参数:

   INTO  DestinationDestination代表下列输出去向:

      ARRAY  ArrayName 将查询结果保存到内存变量数组中。ArrayName表示内存变量名。

      CURSOR  CursorName 将查询结果保存到临时表中。CursorName表示临时表名。

      DBF  TableName / TABLE  TableName 将查询结果保存到一数据表中。TableName是数据表名。

     TO  FILE  FileName  ADDITIVE / TO  PRINTER PROMPT / TO  SCREEN]: 输出到文件、打印机或屏幕。

     ADDITIVE表示数据输入到文件时不删除原有数据,而是从数据后面增加记录。如果没有ADDITIVE,则数据输入到文件中时不保留原数据,原数据被新数据覆盖。

  5. 筛选源表记录条件

   WHERE  JoinCondition  AND  JoinCondition….][AND/OR  FilterCondition  AND /OR  FilterCondition….]]]

   命令中的参数:

   FilterCondition 筛选条件。

   JoinCondition 多表查询时的联接条件,作用同JOIN  ON  JoinCondition语句中的JoinCondition

   例如: 筛选员工表yg.dbf中性别为的子命令: WHERE  yg.xb = ″男″

  6. 定义记录的分组

   GROUP  BY  GroupColumn  ,GroupColumn…]]

   GroupColumn 分组的列或字段。

   例如: 以员工表中的员工编号分组的子命令: GROUP  BY  yg.ygbh

  7. 指定分组满足条件

   HAVING  FilterCondition  UNION  ALL  SELECTCommand

   指定包含在查询结果中的组必须满足的筛选条件。

  8. 指定输出记录的排序顺序

   ORDER  BY  Order—Item  ASC/DESE  ,Order-Item ASC/DESC]]

   Order—Item 排序的字段等项目

   ASC 升序

   DESE 降序

   例如: 以销售情况表中销售数量xssl字段以降序排序命令:

      ORDER  BY  xsqk.xssl  DESC

 6.3.2  SELECT—SQL查询命令应用举例

   SELECT—SQL查询命令比较复杂,下面通过一些例子介绍SELECT—SQL查询命令的应用。

  1. 单表查询

   【例6-1】查询销售商品管理数据库sp.dbc中商品信息表spxx.dbf的商品编号spbh、商品名称spmc和销售单价xsdj

     SELECT  spxx.spbh, spxx.spmc, spxx.xsdj   FROM  sp!spxx

   【例6-2】查询商品信息表spxx.dbf销售单价大于1000元的商品,输出商品编号spbh、商品名称spmc和销售单价xsdj等字段。

     SELECT spxx.spbh, spxx.spmc, spxx.xsdj  FROM sp!spxx ;

     WHERE  spxx.xsdj > 1000

   【例6-3】按商品编号顺序从小到大查询商品信息表spxx.dbf的商品编号spbh、商品名称spmc和销售单价xsdj

     SELECT spxx.spbh, spxx.spmc, spxx.xsdj ;

     FROM  sp!spxx   ORDER  BY  spxx.spbh

  【例6-4】将库存表kc.dbf的查询输出到库存情况表kcqk.dbf中。查询的字段为: 商品编号spbh、进货日期jhrq和库存数量kcsl

     SELECT kc.spbh, kc.jhrq, kc.kcsl   FROM  sp!kc;

     INTO TABLE kcqk.dbf

  2. 多表查询

   【例6-5】查询销售商品管理数据库sp.dbc的员工表yg.dbf和销售情况表xsqk.dbf的员工编号yg.ygbh、员工姓名yg.xm、销售金额xsqk.zje和销售日期xsqk.xsrq等字段。

     SELECT yg.ygbh, yg.xm, xsqk.zje, xsqk.xsrq ;

     FROM  sp!yg  INNER  JOIN  sp!xsqk ;

     ON  yg.ygbh = xsqk.ygbh

  【例6-6】查询某一日销售情况表xsqk.dbf和商品信息表spxx.dbf的商品销售情况,输出字段有: 商品编号xsqk.spbh、商品名称spxx.spmc、销售单价spxx.xsdj、销售数量xsqk.xssl、总金额xsqk.zje和销售日期xsqk.xsrq等字段。

     SELECT xsqk.spbh, spxx.spmc, spxx.xsdj, xsqk.xssl, xsqk.zje, xsqk.xsrq;

     FROM  sp!spxx  INNER JOIN  sp!xsqk  ON  spxx.spbh = xsqk.spbh;

     WHERE xsqk.xsrq = {^2003/10/29}

  3. 包含计算字段的查询

   【例6-7】查询销售情况表xsqk.dbf中各种销售商品的总金额小计,输出为商品编号spbh、以商品编号分组统计的总金额小计。

     SELECT   xsqk.spbh , SUM(xsqk.zje)  AS  销售金额小计   FROM  sp!xsqk;

     GROUP BY  xsqk.spbh

   【例6-8】查询销售情况表xsqk.dbf中同一种销售商品成交价最高的商品交易情况。输出字段有: 成交编号xsqk.cjbh、商品编号xsqk.spbh、以商品编号分组查找的同商品交易中最高成交金额的记录。

     SELECT xsqk.cjbh, xsqk.spbh, MAX(xsqk.zje)  AS  交易最高价 

     FROM  sp!xsqk;

     GROUP BY  xsqk.spbh

6.4 用视图方法查看商品信息管理数据库

   在数据库中,可以建立与查询相同功能的视图,通过视图从数据表中查询所需的数据信息,组成新的数据集合表存放于数据库中,所以视图也称为虚表视图查询很相似,在数据表的基础上,构成一组检索和计算结果。支持视图的数据表称为源数据表,也称为基表查询不能改变源数据表中数据,而与查询不同的是,通过视图可以改变源数据表中的记录值。

   视图是在数据库设计器中建立的。视图分为本地视图远程视图本地视图使用Visual FoxPro SQL语法从数据表或视图中选择信息;远程视图使用远程SQL语法从远程ODBC数据源表中选择信息。这里主要介绍本地视图的设计方法。

 6.4.1  建立员工销售业绩情况视图

   用建立视图的方法来构成每一员工某月的销售情况。销售情况表(xsqk.dbf)和员工表(yg.dbf)作为源数据源。建立员工销售视图的操作如下:

   1. 打开视图设计器

 
 
 

   视图是在数据库设计器中建立的,所以首先打开数据库:

   打开sp商品信息管理数据库。

    选择数据库设计器工具栏中的新建本地视图按钮或数据库菜单中的新建本地视图命令,出现新建本地视图对话框,单击对话框中的新建视图打开视图设计器

   视图设计器与查询设计器的结构基本相同,视图设计器如图6-21所示。打开视图设计器同时出现视图设计器工具栏和查询菜单,供设计视图时使用。视图的设计方法也与查询的设计方法基本一致。

  2. 添加数据表

   单击视图设计器工具栏的添加表按钮或查询菜单中的添加表命令,打开添加表或视图对话框,添加销售情况表xsqk.dbf和员工表yg.dbf

  3. 选择输出字段

   字段选项卡中的可用字段栏中选择员工编号xsqk.ygbh、姓名yg.xm、销售总值SUM(xsqk.zje)等字段。添加到选定字段栏中。销售总量通过函数和表达式栏设置。

  4. 分组统计

   按员工编号xsqk.ygbh分组进行统计的设计是通过视图设计器的分组依据选项卡。在可用字段栏中选择员工编号xsqk.ygbh添加到分组字段栏中,根据分组依据的设置,求总金额的和按照员工编号分组进行统计。

  5. 月份的筛选

   单击筛选选项卡,建立表达式关系: YEAR(xsqk.xsrq) =2003(年)和MONTHxsqk.xsrq=9(月份)。单击字段名栏右边的下拉箭头,出现所有的可选字段和一个表达式项。选择表达式项,在表达式生成器中组成YEAR(xsqk.xsrq),在实例栏输入要设置的年份2003,在条件栏中选择等于号。MONTHxsqk.xsrq=9表达式的设计以同样的方法设计。

  6. 运行视图

   单击工具栏中的运行按钮或查询菜单中的运行查询命令,运行上面设置的视图,得到每个员工某个月份的销售总值表,如图6-22所示。与查询的结果表6-10比较两个结果是相同的。

  7. 更新视图与源数据表数据

 
 
 

   在默认情况下,是不能更新视图与源数据表中的记录的。为了能更新视图与源数据表,可通过设置更新条件选项卡上的参数来确定。操作方法如下:

    选择更新条件选项卡,如图6-23显示。

    选择可更新的表在下拉列表中选择需要更新的数据表。如员工表yg.dbf

    设置关键字字段名列表中列出了可使用的字段,单击关键字段员工编号yg.ygbh钥匙下面的位置,出现一个符号,设定该字段为关键字。关键字应该在数据表的主关键字段或候补关键字段中选择。设置关键字后,如果要重新设置关键字,可单击重置关键字按钮后再重新设置关键字。

    设置可更新字段在要更新的字段即员工姓名yg.xm前面单击可更新列(笔形标志),确定字段可修改。如果要使表中的所有字段可更新,将全部字段设置成可更新的。可用全部更新按钮设置,但用全部更新不影响关键字。因为一般不会直接修改关键字段。

    更新源数据表设置了可更新字段后可以对视图进行更改,但还不能对源数据表直接更新。如需通过视图对源数据源表进行更改时,要进一步选择设置发送SQL更新项。

    设置“SQL  WHERE  子句包括项如果在一个多用户环境中工作,用户使用的数据表也可以被别的用户访问或修改。为了检查数据表是否被其他用户修改过,对“SQL  WHERE  子句包括进行设置。各选项的功能为:

     关键字: 当源表中的关键字段被修改时,更新失败。

     关键字和可更新字段: 当远程表中可更新的字段被改变时,更新失败。

     关键字和已修改字段: 当在本地改变的字段在源表中被改变时,更新失败。

     关键字和时间戳: 当远程表上记录的时间戳在首次检索之后被改变时,更新失败。

    设置使用更新项确定视图更新源表记录时使用的方法。第一项“SQL  DELETE  然后  INSERT”是选删除原始记录,再插入新记录。另一项“SQL  UPDATE”是直接更新已经存在的记录。

 6.4.2  创建供货商参数化视图

   参数化视图是根据某个参数的不同值分别查询对应的有关数据,这种视图称为参数化视图,如供货商表ghs.dbf按供货商的编号分别查看出对应每一编号的供货商情况。变化的参数是供货商编号ghs.ghsbh字段。如采用前面介绍的视图设计方法,对每个供货商编号,将建立起一个视图。表中有多个供货商,就必须建立多个相对应的视图。而参数化视图则可根据改变供货商编号获得不同的视图结果,操作和使用十分方便。供货商参数化视图的设计方法如下:

    打开视图设计器,添加数据表,选择输出的字段。操作方法同前面的介绍。

    筛选选项卡中建立一个筛选关系: 字段名 = <提示符>

   如: ghs.ghsbh =?供货商编号,见图6-24

    查询菜单中选择视图参数,出现视图参数对话框,在其中定义参数名和参数类型,在参数名项中输入供货商编号,在类型项中选择字符型,如图6-25所示。

    运行视图。参数化视图设置完成后,每当运行该视图时,会先出现提示输入参数对话框,如图6-26所示,在对话框中输入相应的供货商编号ghsbh字段的参数值后,查询对应的视图。

   用参数化视图可不需建立多个视图的情况下获得各个与参数相对应的视图。

   视图建立后,对视图的使用可以视为一个数据库表,很多情况下对视图的操作与对数据库表的操作方法相同。如打开视图、修改视图和关闭视图等操作。在程序中,打开视图和关闭视图的命令与打开数据库表与关闭数据库表的命令相同。打开视图时系统在其他工作区自动打开该视图的源数据表,但关闭视图后,视图的源数据表不能随视图的关闭而自动关闭,必须另外用命令关闭数据表。

   打开sp数据库的员工销售情况视图的命令为:

     OPEN  DATABASE   sp

     USE  员工销售情况

   在打开员工销售情况视图的同时,系统自动打开员工销售情况视图的源数据表kc.dbf

课后总结:

  本章介绍数据库及自由表一个重要应用——查询和视图。查询和视图是根据用户的需要从数据库或自由表中按一定要求选择出部分数据及计算统计组成一个虚拟数据表。

  Visual FoxPro 提供了查询和视图的工具: 查询设计器和视图设计器。通过查询设计器和视图设计器进行设计,使用户很方便地从数据库或自由表中检索及统计出所需要的数据。

  查询(Query)是从数据库或自由表中检索或统计出所需数据。视图(View)除具有查询所有的检索、统计功能外,还可以改变视图中记录值以及源数据库或自由表的值。

作业:

   第五章习题       第五章上机实验题(书写相应实验报告)