数据库查询.doc_第1页
数据库查询.doc_第2页
数据库查询.doc_第3页
数据库查询.doc_第4页
数据库查询.doc_第5页
免费预览已结束,剩余46页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Access 20034-19 查询范例“117-子查询范例十七”MicrosoftMicrosoftMicrosoft用范例学子查询第4章Access2003Access 本章将讨论下列主题:q 什么是子查询q 查询范例“101-子查询范例一”q 查询范例“102-子查询范例二”q 查询范例“103-子查询范例三”q 查询范例“104-子查询范例四”q 查询范例“105-子查询范例五”q 查询范例“106-子查询范例六”与“107-子查询范例七”q 查询范例“108-子查询范例八”q 如何使用“存在于子查询”之检验q 查询范例“109-子查询范例九”q 如何使用“包含于子查询”之检验q 查询范例“110-子查询范例十”q 查询范例“111-子查询范例十一”q 查询范例“112-子查询范例十二”q 如何使用“子查询之全额检验”q 查询范例“113-子查询范例十三”与“114-子查询范例十四”q 查询范例“115-子查询范例十五”与“116-子查询范例十六”q 如何使用“子查询之部分检验”q 查询范例“117-子查询范例十七”4-1 什么是子查询所谓的“子查询”(SubQuery)就是内含于某一个SELECT、INSERT、UPDATE或DELETE命令中的SELECT查询,SELECT、INSERT、UPDATE或DELETE命令中允许是一个表达式的地方皆可以内含子查询,子查询甚至可以再内含于另外一个子查询中。基于使用形式的关系,子查询又被称为“内层查询”(Inner Query),而内含子查询的查询则称为“外层查询”(Outer Query)。由于一个内层查询(Inner Query)会先被运行,因此我们经常利用其查询结果作为WHERE参数中之个别数据记录的过滤条件或是HAVING参数中之分组数据的过滤条件。我们通常利用一个子查询的查询结果来判断某一笔数据记录或某一分组数据是否应被含入外层查询之查询结果中。当无法直接取得查询的条件值时,而且此一条件值可以通过查询来求得或计算出来的时候,就非常适合使用子查询。在使用子查询的时候,请注意下列事项:q 子查询务必内含在一对小括弧中。q 如果您使用 =、=、= 或 等运算符与子查询进行比较,则子查询务必返回单一值。如果要与返回多个值的子查询进行比较,应该使用EXISTS(存在于子查询)、IN(包含于子查询)、ALL(子查询之全额检验)与ANY(子查询之部分检验)等运算符。4-2 查询范例“101-子查询范例一”正如我们所知道的,每一笔订单上面可能会订购一项以上的产品,而如果我们想要查询出每一笔订单上最低的产品单价与最高的产品单价的话,该怎么做呢?图4-1与图4-2所示的,分别是查询范例“101-子查询范例一”的设计画面与查询结果,它能够查询出每一笔订单上最低的产品单价与最高的产品单价。正如我们之前所言,允许是一个表达式的地方皆可以内含子查询,以本查询范例而言,查询字段“最低单价”与“最高单价”的表达式都是一个子查询。这两个字段的运算式都是一个子查询图4-1查询出每一笔订单上的最高产品单价与最低产品单价图4-24-3 查询范例“102-子查询范例二”图4-3与图4-4所示的,分别是查询范例“102-子查询范例二”的设计画面与查询结果,它能够查询出每一笔订单上最高的产品单价与产品名称。本查询范例主要是以子查询的查询结果作为条件值。以子查询的查询结果作为条件值图4-3查询出每一笔订单上最高的产品单价与产品名称图4-44-4 查询范例“103-子查询范例三”谈到这里,相信大家已经深切体会出子查询的强大之处,并对于如何使用子查询来协助我们完成更复杂的查询操作有了基本的概念。然而对于一些不写程序的用户而言,可能心中目前最大的疑虑,就是担心子查询一定要自己撰写SELECT命令语句。其实不然,借助于Access强有力的用户界面,大多数的子查询都不需要自行撰写SELEC命令语句。在稍后的实作步骤中,将会证明此点。图4-5与图4-6所示的分别是查询范例“103-子查询范例三”的设计画面与查询结果,它以子查询所返回的最低薪资值作为外层查询之“目前薪资”字段的条件值,以便查询出有哪些员工的薪资与公司内最低薪资者相同。笔者要再次提醒大家,有很多初学者会误以为图4-7所示的查询能够查询出目前薪资最低之员工的姓名与目前薪资,很抱歉,这是错误的写法,原因已经说过好几次,那就是“会返回单一值的总和函数不能与个别字段一起使用”。使用子查询来取得最低薪资并以其作为外层查询之“目前薪资”字段的条件值。请注意,子查询必须内含在一对小括弧中。图4-5图4-6请注意,这是错误的设计。图4-7在以下的操作步骤中,我们将详述查询范例“103-子查询范例三”的建立步骤,从中将证明使用子查询并不见得一定要撰写SELECT命令语句,并学习查询的构思过程以及为什么会想到要用子查询:1. 使用鼠标单击数据库视窗左侧之“对象”栏中的“查询”项目。2. 使用鼠标双击新对象捷径“在设计视图中创建查询”。3. 于“显示表”对话框的列表中双击“飞狐工作室”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。4. 不论您所要构建的查询有多么复杂,第一件事情一定是先确立查询要输出哪些字段。以本范例而言,显然是要输出姓名与代表最低薪资的目前薪资。因此请于第一列之“字段:”栏的列表框中选择“姓名”字段,并于第二列之“字段:”栏的列表框中选择“目前薪资”字段。5. 将第二列之“字段:”栏列表框的“目前薪资”更改如下,以便自订字段名称:等于最低薪的目前薪资:目前薪资6. 由于我们要查询出有哪些员工的目前薪资与公司内最低薪资者相同,因此只要以最低薪资作为第二个查询字段的条件值即可。问题是,我们无法直接取得最低薪资,然而,通过一个查询却可以取得员工的最低薪资,所以可以合理地推论出,在此必须以一个能够查询出最低薪资的子查询来作为第二个查询字段的条件值。既然已经确定要使用子查询,因此请如图4-8所示,于第二个查询字段之“条件:”栏的文字方块中键入一对小括弧,并让光标位于此对小括弧中。键入一对小括弧并让光标位于其中,作为摆放子查询之用。图4-87. 当然,如果您会撰写SELECT命令语句,可以直接在小括弧中撰写能够查询出最低薪资的SELECT命令语句。不过我们在此假设大家并不会撰写、也不想学习如何撰写SELECT命令语句。既然如此,我们就要去新建立一个可以查询出最低薪资的查询,然后将其自动产生的SELECT命令语句复制到前一个步骤的小括弧中。好的,请您切换回数据库视窗,然后使用鼠标双击新对象捷径“在设计视图中创建查询”。8. 于“显示表”对话框的列表中双击“飞狐工作室”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。9. 如图4-9所示,于第一列之字段栏的列表框中键入:最低薪资:MIN(目前薪资)图4-910. OK!现在我们已经建立了一个能够查询出最低薪资的查询。请如图4-10所示,从“视图”按钮的下拉式列表中选择“SQL视图”选项,确认所自动产生的SELECT命令语句已经全部被选择,并单击工具栏中的“复制”按钮(如图4-11所示)。图4-10图4-1111. 请切换回第一个查询的查询设计视图,并如图4-12所示,将刚刚所复制的SELECT命令语句贴至第二个查询字段之“条件:”栏的小括弧中。12. 至此,一切已大功告成。我们以实作方式证明了不需撰写任何SELECT命令语句也可以轻易构建出子查询,而这全都归功于Access强大且易用的设计界面。以不写程序的方式构建出子查询图4-124-5 查询范例“104-子查询范例四”图4-13与图4-14所示的分别是查询范例“104-子查询范例四”的设计画面与查询结果,它以子查询所返回的平均薪资乘上1.5倍来作为外层查询之“目前薪资”字段的条件值,以便查询出有哪些员工的薪资比公司的平均薪资还高出50。使用子查询来取得平均薪资的1.5倍,并以其作为外层查询之“目前薪资”字段的条件值。请注意,子查询必须内含在一对小括弧中。图4-13在以下的操作步骤中,我们将详述查询范例“104-子查询范例四”的建立步骤,从中将证明使用子查询并不见得一定要撰写SELECT命令语句,并学习查询的构思过程以及为什么会想到要用子查询:1. 使用鼠标单击数据库视窗左侧之“对象”栏中的“查询”项目。2. 使用鼠标双击新对象捷径“在设计视图中创建查询”。3. 于“显示表”对话框的列表中双击“飞狐工作室”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。4. 不论您所要构建的查询有多么复杂,第一件事情一定是先确立查询要输出哪些字段。以本范例而言,显然是要输出姓名与目前薪资。因此请于第一列之“字段:”栏的列表框中选择“姓名”字段,并于第二列之“字段:”栏的列表框中选择“目前薪资”字段。5. 我们希望输出结果依照目前薪资由低至高排列,因此请从“目前薪资”之“排序:”栏列表框中选择“升序”选项。由于我们要查询出有哪些员工的目前薪资比公司的平均薪资还高出50,因此只要以平均薪资的1.5倍作为第二个查询字段的条件值即可。问题是,我们无法直接取得平均薪资的1.5倍,然而,通过一个查询却可以取得员工之平均薪资的1.5倍,所以可以合理地推论出,在此必须以一个能够查询出平均薪资之1.5倍的子查询来作为第二个查询字段的条件值。既然已经确定要使用子查询,因此请如图4-15所示,于第二个查询字段之“条件:”栏的文字方块中键入一个大于符号与一对小括弧,并让光标位于此对小括弧中。利用子查询来查询出有哪些员工的薪资比公司的平均薪资还高出50%。图4-14键入一个大于号与一对小括弧,并让光标位于小括弧中,作为摆放子查询之用。图4-156. 当然,如果您会撰写SELECT命令语句,可以直接在小括弧中撰写能够查询出平均薪资之1.5倍的SELECT命令语句。不过我们在此假设大家并不会撰写、也不想学习如何撰写SELECT命令语句。既然如此,我们就要去新建立一个可以查询出平均薪资之1.5倍的查询,然后将其自动产生的SELECT命令语句复制到前一个步骤的小括弧中。好的,请您切换回数据库视窗,然后使用鼠标双击新对象捷径“在设计视图中创建查询”。7. 于“显示表”对话框的列表中双击“飞狐工作室”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。8. 如图4-16所示,于第一栏之字段列的列表框中键入:Avg(目前薪资) * 1.5查询出平均薪资的1.5倍图4-169. OK!现在我们已经建立了一个能够查询出平均薪资之1.5倍的查询。请如图4-17所示,从“视图”按钮的下拉式列表中选择“SQL视图”选项,确认所自动产生的SELECT命令语句已经全部被选择,并单击工具栏中的“复制”按钮(如图4-18所示)。图4-17图4-1810. 请切换回第一个查询的查询设计视图,并如图4-19所示,将刚刚所复制的SELECT命令语句贴至第二个查询字段之“条件:”栏的小括弧中。以不写程序的方式构建出子查询以不寫程式的方式構建出子查詢图4-1911. 至此,一切已大功告成。我们以实作方式证明了不需撰写任何SELECT命令语句也可以轻易构建出子查询,而这全都归功于Access强大且易用的设计界面。4-6 查询范例“105-子查询范例五”图4-20与图4-21所示的分别是查询范例“105-子查询范例五”的设计画面与查询结果,它以子查询所返回的业务部门员工人数来作为外层查询之“部门人数”字段的条件值,以便查询出人数比业务部门还多之各部门员工的平均薪资。使用子查询来取得业务部门的员工人数,并以其作为外层查询之“部门人数”字段的条件值。请注意,子查询必须内含在一对小括弧中。图4-20查询出人数比业务部门还多之各部门员工的平均薪资图4-21在以下的操作步骤中,我们将详述查询范例“105-子查询范例五”的建立步骤,从中将证明使用子查询并不见得一定要撰写SELECT命令语句,并学习查询的构思过程以及为什么会想到要用子查询:1. 使用鼠标单击数据库视窗左侧之“对象”栏中的“查询”项目。2. 使用鼠标双击新对象捷径“在设计视图中创建查询”。3. 于“显示表”对话框的列表中双击“飞狐工作室”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。4. 由于本查询要进行分组加总小计,因此请使用鼠标单击查询设计工具栏中的“总计”按钮,以便让查询设计视图的设计格线中多出一栏“总计:”栏,然后进行下列设定: 从第一列之“字段:”栏的列表框中选择“部门”字段,并从“总计:”栏的列表框中选择“分组”选项,以便根据部门来加以分组。 于第二列之“字段:”栏的列表框中键入:部门人数:COUNT(*)并从“总计:”栏的列表框中选择“表达式”选项,以便计算出各部门的员工人数。 于第三列之“字段:”栏的列表框中键入:平均薪资:目前薪资并从“总计:”栏的列表框中选择“平均值”选项,以便计算出各部门的平均薪资。5. 由于我们要查询出人数比业务部门还多之各部门员工的平均薪资,因此只要以业务部门的人数作为第二个查询字段“部门人数”的条件值即可。问题是,我们无法直接取得业务部门的人数,然而,通过一个查询却可以取得业务部门的人数,所以可以合理地推论出,在此必须以一个能够查询出业务部门之人数的子查询来作为第二个查询字段“部门人数”的条件值。既然已经确定要使用子查询,因此请如图4-22所示,于第二个查询字段之“条件:”栏的文字方块中键入一个大于符号与一对小括弧,并让光标位于此对小括弧中。键入一个大于号与一对小括弧,并让光标位于小括弧中,作为摆放子查询之用。图4-226. 当然,如果您会撰写SELECT命令语句,可以直接在小括弧中撰写能够查询出业务部门之人数的SELECT命令语句。不过我们在此假设大家并不会撰写、也不想学习如何撰写SELECT命令语句。既然如此,我们就要去新建立一个可以查询出业务部门之人数的查询,然后将其自动产生的SELECT命令语句复制到前一个步骤的小括弧中。好的,请您切换回数据库视窗,然后使用鼠标双击新对象捷径“在设计视图中创建查询”。7. 于“显示表”对话框的列表中双击“飞狐工作室”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。8. 请如图4-23所示,自行构建一个能够查询出业务部门人数的查询。9. 从“视图”按钮的下拉式列表中选择“SQL视图”选项,确认所自动产生的SELECT命令语句已经全部被选择,并单击工具栏中的“复制”按钮(如图4-24所示)。请不要勾选此选择框图4-23图4-2410. 请切换回第一个查询的查询设计视图,并如图4-25所示,将刚刚所复制的SELECT命令语句贴至第二个查询字段之“条件:”栏的小括弧中。以不写程序的方式构建出子查询。您可以按下SHIFTF2键来查看子查询之SELECT命令语句的完整内容。图4-2511. 至此,一切已大功告成。我们以实作方式证明了不需撰写任何SELECT命令语句也可以轻易构建出子查询,而这全都归功于Access强大且易用的设计界面。4-7 查询范例“106-子查询范例六”与“107-子查询范例七”在这里要特别叮咛大家,其实许多通过子查询来完成所需操作的查询也能够以联接数据表的方式来完成。对Access而言,一个查询并不会因为内含子查询而影响了运行速度。但是如果外层查询的每一个查询结果都必须使用内层查询来去除重复的数据,则使用联接数据表将拥有较快的运行速度。以图4-26所示的查询范例“106-子查询范例六”以及图4-27所示的查询范例“107-子查询范例七”而言,一个使用内层查询(也就是使用子查询),另一个则使用联接数据表,但是两者所返回的查询结果是完全相同的(如图4-28所示)。使用内层查询(也就是子查询)来查询出单价与巧克力相同的产品图4-26这两个表都是“产品资料”数据表使用联接数据表(此处为自我联接)来查询出单价与巧克力相同的产品图4-27查询出单价与巧克力相同的产品图4-28其实查询范例“107-子查询范例七”是采用自我联接的方式来查询出单价与巧克力相同的产品,所谓的“自我联接”就是数据表与数据表本身进行联接。当然,查询的结果很重要,但是查询的构思与制作过程更重要,为了让大家彻底了解查询范例“107-子查询范例七”是如何设计出来的,以下我们将详述其制作步骤:1. 使用鼠标单击数据库视窗左侧之“对象”栏中的“查询”项目。2. 使用鼠标双击新对象捷径“在设计视图中创建查询”。3. 于“显示表”对话框的列表中双击“产品数据”数据表以便将它加至查询设计视图中。4. 再次于“显示表”对话框的列表中双击“产品数据”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。5. 如图4-29所示,从左侧的“产品数据”数据表中将“单价”字段拖放至右侧的“产品数据”数据表中的“单价”字段上,以便通过“单价”字段来进行自我联接。图4-296. 从左侧的“产品数据”数据表中将“产品”字段拖放至设计格线中第一列之“字段:”栏的列表框中。7. 从左侧的“产品数据”数据表中将“单价”字段拖放至设计格线中第二列之“字段:”栏的列表框中。8. 从右侧的“产品数据”数据表中将“产品”字段拖放至设计格线中第三列之“字段:”栏的列表框中,并于其“条件:”栏的文字方块中键入:巧克力9. 确认您的查询设计视图如图4-30所示后,一切就大功告成。使用“单价”字段自我联接图4-304-8 查询范例“108-子查询范例八”图4-31与图4-32所示的,分别是查询范例“108-子查询范例八”的设计画面与查询结果,它利用子查询的查询结果作为筛选条件值来查询出哪一本书在特定书店的销售利润低于所有书店销售利润的80%。图4-31图4-324-9 如何使用“存在于子查询”之检验利用下列语法格式所构成的过滤条件式,我们便可检查是否至少有一笔数据记录存在于子查询之查询结果中,以便判断数据记录是否要被含入外层查询之查询结果中:WHERE NOT EXISTS (Subquery)当过滤条件式包含EXISTS时,只要子查询不是空集合亦即至少存在一笔数据记录于子查询之查询结果中,过滤条件式将返回TRUE:反之,只有当子查询是空集合时亦即不存在任何一计数据记录于查询结果中,过滤条件式才会返回FALSE。由于我们只是要进行是否存在于子查询之查询结果中的判断,因此于子查询之 SELECT命令语句的字段串列中通常使用万用字符星号 (但并非一定只能使用星号)。4-10 查询范例“109-子查询范例九”图4-33与图4-34所示的分别是查询范例“109-查询范例九”的设计画面与查询结果,它能够查询出“客户”数据表中有哪些公司并没有采购(也就是没有下订单)。事实上要查询出没有下订单的客户很简单,因为客户编号不存在于“订货主文件”中的客户也就是没有下订单的客户,这也就是本查询范例为什么可以使用EXISTS运算符来完成此项查询操作。使用“存在于子查询”之检验图4-33查询出没有下订单的客户图4-344-11 如何使用“包含于子查询”之检验利用下列语法格式所构成的过滤条件式,我们便可检查expression是否内含子查询所产生之“直栏”中的其中一个数据值,以便判断数据记录是否要被含入外层查询之查询结果中:WHERE expression NOT IN (Subquery)您可以将“包含于子查询”之检验视为是IN运算符的延伸。另外请注意,当我们使用“包含于子查询”之检验时,子查询必须只返回单一字段。4-12 查询范例“110-子查询范例十”图4-35与图4-36所示的分别是查询范例“110-子查询范例十”的设计画面与查询结果,它以子查询从“订货主文件”数据表所返回的客户编号来作为外层查询之“客户编号”字段的条件值,并以“不包含于子查询”(NOT IN)进行检验,以便查询出有哪些公司并没有采购。使用“不包含于子查询”(NOT IN)来与子查询的查询结果进行比较图4-35查询出有哪些公司并没有采购图4-36在以下的操作步骤中,我们将详述查询范例“110-子查询范例十”的建立步骤,从中将证明使用子查询并不见得一定要撰写SELECT命令语句,并学习查询的构思过程以及为什么会想到要用子查询:1. 使用鼠标单击数据库视窗左侧之“对象”栏中的“查询”项目。2. 使用鼠标双击新对象捷径“在设计视图中创建查询”。3. 于“显示表”对话框的列表中双击“客户”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。4. 不论您所要构建的查询有多么复杂,第一件事情一定是先确立查询要输出哪些字段。以本范例而言,显然是要输出客户编号与公司名称。因此请于第一列之“字段:”栏的列表框中选择“客户编号”字段,并于第二列之“字段:”栏的列表框中选择“公司名称”字段。5. 由于我们要查询出有哪些员工没有采购过,因此只要以采购过的客户编号列表作为第一个查询字段“客户编号”的条件值并以“不存在于子查询”(NOT IN)进行比较即可。问题是,我们无法直接取得已采购过的客户编号列表,然而,通过一个查询却可以取得已采购过的客户编号列表,所以可以合理地推论出,在此必须以一个能够查询出已采购过的客户编号之子查询来作为第一个查询字段的条件值。既然已经确定要使用子查询,因此请如图4-37所示,于第一个查询字段之“条件:”栏的文字方块中键入NOT IN并于其后跟着一对小括弧,然后让光标位于此对小括弧中。键入NOT IN与一对小括弧,并让光标位于小括弧中,作为摆放子查询之用。图4-376. 当然,如果您会撰写SELECT命令语句,可以直接在小括弧中撰写能够查询出已采购过之客户编号的SELECT命令语句。不过我们在此假设大家并不会撰写、也不想学习如何撰写SELECT命令语句。既然如此,我们就要去新建立一个可以查询出已采购过之客户编号的查询,然后将其自动产生的SELECT命令语句复制到前一个步骤的小括弧中。好的,请您切换回数据库视窗,然后使用鼠标双击新对象捷径“在设计视图中创建查询”。7. 于“显示表”对话框的列表中双击“订货主文件”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。8. 如图4-38所示,从第一列之字段栏的列表框中选择“客户编号”字段。图4-389. OK!现在我们已经建立了一个能够查询出已采购过之客户编号的查询。请从“视图”按钮的下拉式列表中选择“SQL视图”选项,确认所自动产生的SELECT命令语句已经全部被选择,并单击工具栏中的“复制”按钮(如图4-39所示)。10. 请切换回第一个查询的查询设计视图,并如图4-40所示,将刚刚所复制的SELECT命令语句粘贴至第二个查询字段之“条件:”栏的小括弧中。图4-39以不写程序的方式构建出子查询图4-4011. 至此,一切已大功告成。我们以实作方式证明了不需撰写任何SELECT命令语句也可以轻易构建出子查询,而这全都归功于Access强大且易用的设计界面。附注:或许您已经发现,EXISTS (Subquery) 与 IN (Subquery) 可以达到相同的效果。其实究竟要使用何者,端看您的习惯而定,而且此二者在运行效率上无分轩轾。4-13 查询范例“111-子查询范例十一”图4-41与图4-42所示的分别是查询范例“111-子查询范例十一”的设计画面与查询结果,它以子查询从“订货主文件”数据表所返回的客户编号来作为外层查询之“客户编号”字段的条件值,并以“包含于子查询”(IN)进行检验,以便查询出有哪些公司曾经采购过。包含于子查询之检验图4-41查询出下过订单的客户图4-424-14 查询范例“112-子查询范例十二”再举一个例子来说明包含于子查询之检验。图4-43所示的是查询范例“059-分组的条件范例三”,它藉由以“姓名”字段来分组,并以人数大于1作为分组条件,即可查询出相同姓名的人数。或许单单查询出相同姓名的员工人数还不够,您必须详细列出每一位相同姓名之员工的各项明细数据。欲达此目的,您必须以子查询来查询出相同的姓名并以其作为外层查询之“姓名”字段的条件值,然后以“包含于子查询”(IN)进行检验,即可查询出每一位相同姓名之员工的各项明细数据。查询范例“112-子查询范例十二”即是此想法的具体实践,图4-44与图4-45分别是其设计画面与查询结果。图4-43在以下的操作步骤中,我们将详述查询范例“112-子查询范例十二”的建立步骤,从中将证明使用子查询并不见得一定要撰写SELECT命令语句,并学习查询的构思过程以及为什么会想到要用子查询。使用“包含于子查询”(IN)来与子查询的查询结果进行比较图4-44查询出相同姓名员工的各项明细数据图4-451. 使用鼠标单击数据库视窗左侧之“对象”栏中的“查询”项目。2. 使用鼠标双击新对象捷径“在设计视图中创建查询”。3. 于“显示表”对话框的列表中双击“飞狐工作室”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。4. 不论您所要构建的查询有多么复杂,第一件事情一定是先确立查询要输出哪些字段。以本范例而言,显然是要输出姓名、家庭住址与电话号码。因此请于第一列之“字段:”栏的列表框中选择“姓名”字段,接着于第二列之“字段:”栏的列表框中选择“家庭住址”字段,最后于第三列之“字段:”栏的列表框中选择“电话号码”字段。5. 从第一列之“排序:”栏的列表框中选择“升序”选项。6. 由于我们要查询出每一位相同姓名之员工的各项明细数据,因此只要以重复的姓名列表作为第一个查询字段“姓名”的条件值并以“存在于子查询”(IN)进行比较即可。问题是,我们无法直接取得重复的姓名列表,然而,通过一个查询却可以取得重复的姓名列表,所以可以合理地推论出,在此必须以一个能够查询出重复之姓名的子查询来作为第一个查询字段的条件值。既然已经确定要使用子查询,因此请如图4-46所示,于第一个查询字段之“条件:”栏的文字方块中键入IN并于其后跟着一对小括弧,然后让光标位于此对小括弧中。键入IN与一对小括弧,并让光标位于小括弧中,作为摆放子查询之用。图4-467. 当然,如果您会撰写SELECT命令语句,可以直接在小括弧中撰写能够查询出重复之姓名的SELECT命令语句。不过我们在此假设大家并不会撰写、也不想学习如何撰写SELECT命令语句。既然如此,我们就要去新建立一个可以查询出重复之姓名的查询,然后将其自动产生的SELECT命令语句复制到前一个步骤的小括弧中。好的,请您切换回数据库视窗,然后使用鼠标双击新对象捷径“在设计视图中创建查询”。8. 于“显示表”对话框的列表中双击“飞狐工作室”数据表以便将它加至查询设计视图中,然后单击“关闭”按钮。9. 由于本查询要进行分组加总小计,因此请使用鼠标单击查询设计工具栏中的“总计”按钮,以便让查询设计视图的设计格线中多出一栏“总计:”栏,然后进行下列设定: 从第一列之“字段:”栏的列表框中选择“姓名”字段,并从“总计:”栏的列表框中选择“分组”选项,以便根据姓名来加以分组。 从第二列之“字段:”栏的列表框中选择“身份证号”字段,接着从“总计:”栏的列表框中选择“计数”选项,然后于“条件:”栏的文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论