注册 登录
Office中国论坛/Access中国论坛 返回首页

aksufyy的个人空间 http://www.office-cn.net/?76836 [收藏] [复制] [分享] [RSS]

日志

联合查询实战讲解

已有 1273 次阅读2012-2-6 12:53 |个人分类:学习| 联合

在论坛之前的发帖中,已就联合查询定义、基本概念以及如何利用查询设计器进行联合查询设计,做过详细介绍。在此不再重复,本文着重就联合查询的实际运用,结合实例分步进行解析,让大家对于联合查询本身,及联合查询的实际运用,有一个初步直观而感性认识。

联合查询在数据库中运用是较广泛的,较为典型有:物品管理类、财务管理类等。

就拿物品管理来说,假设进、销、存是分表进行设计的,数据分别存放在各独立基表中,当我们要获得物品的分类明细账数据时,就必须通过联合查询将进、销、存三个基表的数据组合成为一个查询。

根据本人在实际的运用中的经验总结归纳,我将联合查询大致分为三大类:兼容并收类、无中生有类、移花接木类。

一、联合查询之兼容并收

这是联合查询最为常见,也最基本的类型。这类联合查询是将一个以上表或查询结果,进行重组而获得新查询结果。

要求用于构建联合查询的表或查询必须符合字段数必须相同,字段类型必须相容的两个基本条件和要求。

在罗斯文数据库实例中:“各城市的客户和供应商”查询,就是这类查询典型实例(见下图)

罗斯文数据库中联合查询实例

    该实例的创建过程,大家可参看上文《查询设计器设计联合查询》,本文不做讲解。

 

二、联合查询之无中生有

这是联合查询又一种类型,是联合查询进阶的必经阶段。这类联合查询是将单笔或N笔自定义数据与表或查询组合而构成的查询。直白的说,就是将自定义数据与现成的表或查询数据组合而构成查询。

案例:如通过联合查询为组合框数据源,添加一笔自定义“全部”作为默认第一笔数据,用于查询时返回所有数据。(见下图)通过联合查询方式实现目的,要比我们在数据表中插入一笔“全部”数据要安全的多,因为这不会影响到原数据的完整性。

自定义数据

实例操作步骤:

1、通过查询设计器获得资产编号数据查询,实例名(组合框数据源一)

按图添加各字段,输入相应表达式

2

设计器中添加 [ 个股比值及净份纪录表 ]

1

 

明:

1、  个股名称字段表达式的意思是:如名称为空时,用字符串 NULL 表示,不为空则显示个股名称;

2、  这里用了两个 [相关资产编号] 字段,第一字段对应组合框绑定数据,第二字段是组合框显示数据。

 

 

 

 


打开查询属性窗口,唯一值属性选择:是

3

4

将查询命名保存,本实例命名为:“组合框数据一”

 

 


2、通过查询设计器自定义数据查询,实例名(组合框数据源二)

按图添加各字段自定义值

2

明:

1、  虽为定义数据,但还是必需在查询设计器中添加 [个股比值及净份纪录表] ,否则进行联合查询设计时报错;

2、  第一个字段中的 * 星号是组合框绑定字段,用于查询全部信息时指定值,这也是为什么前一个查询需要两个资产编号字段的原因

3

将查询命名保存,本实例命名为:“组合框数据二”

 

 

 

 

 


3、通过查询SQL设计器将前面两个查询组合成联合查询,实例名(组合框数据结果)

1

设计器中通过 UNION 将前面两个查询联合起来

明:

1、  关键联接符 UNION 不能加 ALL ,否则自定义数据会出重复值;

2、  联合查询命名存盘后,可以直接成为组合框数据源。组合框具体设置参看实例。

 

 

 


三、联合查询之移花接木:

这是联合查询中相对复杂的类型。这类联合查询是前两类联合查询方式的综合类型,并在此基础上重新演生而构成全新的查询结果。大家可以实践摸索。

案例:该实例数据中,某个交易日中,认购与认沽数据成对,但有时认沽没有数据,使认购与认沽数据没有两两相对,不便于对照。为此我们通过巧接的方式补齐认沽数据,数据值为 0

巧接并补齐的数据

 

实例操作步骤:

1、按图先建立个第一个联合查询数据源:实例名(分组查询一)

按图添加各字段

2

设计器中添加 [ 个股比值及净份纪录表 ]

1

 

 

2、按图先建立个第二个联合查询数据源:实例名(分组查询二)

按图添加各字段,及表达式

2

设计器中添加 [ 个股比值及净份纪录表 ]

1

 

明:

1、  [ 表达式10 ] 为自定义补齐值,没加“”,表示非字符串值,以便下一步重组时计算;

2、  认购认沽字段为筛选字段,不显示在查询中,因此将钩选去掉;

3、  认购认沽字段之所以用“认购”为查询条件,因为认购数据中资产编号较完整,也为过滤去除“认沽”数据,避免资产编号数据重复。

 

 

 

 

 

 

 

 

 

 


3、按图将前第二个查询组合构成联合查询:实例名(分组查询三)

1

SQL设计器中通过 UNION 将前面两个查询组合起来

 


      

查看联合查询结果,发现有些资编号,如:资产编号为1就出现两笔认沽数据,这是因为有的资产编号之前有数据存在,加上我们自定义的数据,因此出现认沽数据重复的情况出象。(见下图)

 

4、按图整理联合查询结果,实例名(分组查询结果)

2

设计器中添加 [ 分组查询三 ]

1

按图添加各字段,及表达式,分组计算,并按交易日排序

 


查询结果命名保存,本实例命名为:“分组查询结果”

 

3

   

 以上是本人在ACCESS使用中,对联合查询的一点点经验的总结归纳,写本文的目的,一是为便于自己总结提高,二是与初学者共同分享。由于本人认知有限且笔拙,不免有错漏这处,希望各位高人斧正。

                    

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 21:59 , Processed in 0.062465 second(s), 17 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部