Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-查询/SQL语句

全面掌握MS ACCESS SQL(37)

时 间:2018-01-22 10:48:53
作 者:Big Young   ID:252  城市:襄阳
摘 要:    UNION(联合)查询实例详解。
正 文:

第二节 UNION(联合)查询实例详解

UNION是联合的意思,作为SQL操作符其作用是将多个结果集合并为一个结果集。UNION(去除重复,相当于默认应用了Distinct),UNION All不去除重复。

一般而言,我们用联合查询,应该用UNION All,因为要连接两个结果集,当然是两个结果集都需要,UNION AllUNION的效率高,少了去除重复的步骤。

一、过滤重复记录的UNION(联合)查询

例如我们的一个数据中有两个表,结构相同,数据大多不一样,也可能包含少量的重复记录,一个表名为成绩表1”,另一个名为成绩表2”,示例数据如下:

成绩表1

考生号  姓名    语文    数学    英语    综合

10420601110127  方志超  117 145 142 190

10420601110128  孙红霞  110 143 141 167

10420601110129  张方方  127 140 130 188

10420601110130  胡一炳  119 146 137 160

10420601110131  邓林楠  119 145 131 197

10420601110132  刘国琼  125 146 138 194

10420601110133  孔明阳  121 139 134 196

10420601110134  赵一凡  118 136 132 182

10420601110135  史佳妮  132 133 138 181

10420601110136  韩雪娇  117 140 139 152

10420601110137  刘申    122 135 138 157

10420601110138  张艳辉  123 145 129 164

10420601110139  郭文涛  120 139 136 171

10420601110140  刘念晨  127 143 133 182

成绩表2

考生号  姓名    语文    数学    英语    综合

10420601110140  刘念晨  127 143 133 182

10420601110141  邹佳    123 136 133 170

10420601110142  周杰    117 136 146 183

10420601110143  熊戈尔  108 144 138 176

10420601110144  胡开宇  115 125 137 169

10420601110145  张正杨  121 132 131 178

10420601110146  崔楚蔚  119 140 129 172

10420601110147  王海章  113 132 140 187

10420601110148  许袁浩  125 123 116 169

10420601110149  吴曼丽  117 142 129 165

10420601110150  宋巧至  108 131 140 166

10420601110151  王秋蕊  126 140 126 175

10420601110152  吴婷颖  118 140 129 160

10420601110153  夏雨泽  123 132 138 180

10420601110154  杜赟    133 141 129 179

10420601110157  吴丹    117 128 138 186

我们现在要将其合并为一个一个表来使用,合并时过滤掉重复的记录,SQL语句示例如下:

TABLE 成绩表1

UNION

TABLE 成绩表2;

运行后,结果如下:

考生号  姓名    语文    数学    英语    综合

10420601110127  方志超  117 145 142 190

10420601110128  孙红霞  110 143 141 167

10420601110129  张方方  127 140 130 188

10420601110130  胡一炳  119 146 137 160

10420601110131  邓林楠  119 145 131 197

10420601110132  刘国琼  125 146 138 194

10420601110133  孔明阳  121 139 134 196

10420601110134  赵一凡  118 136 132 182

10420601110135  史佳妮  132 133 138 181

10420601110136  韩雪娇  117 140 139 152

10420601110137  刘申    122 135 138 157

10420601110138  张艳辉  123 145 129 164

10420601110139  郭文涛  120 139 136 171

10420601110140  刘念晨  127 143 133 182

10420601110141  邹佳    123 136 133 170

10420601110142  周杰    117 136 146 183

10420601110143  熊戈尔  108 144 138 176

10420601110144  胡开宇  115 125 137 169

10420601110145  张正杨  121 132 131 178

10420601110146  崔楚蔚  119 140 129 172

10420601110147  王海章  113 132 140 187

10420601110148  许袁浩  125 123 116 169

10420601110149  吴曼丽  117 142 129 165

10420601110150  宋巧至  108 131 140 166

10420601110151  王秋蕊  126 140 126 175

10420601110152  吴婷颖  118 140 129 160

10420601110153  夏雨泽  123 132 138 180

10420601110154  杜赟    133 141 129 179

10420601110157  吴丹    117 128 138 186

上面的例子是联合的两个表,SQL语句也可以是这样,联合两个查询:

Select * FROM 成绩表1

UNION

Select * FROM 成绩表2;

或者是查询与表混合的联合查询,如:

TABLE 成绩表1

UNION Select * FROM 成绩表2;

二、不过滤重复记录的UNION ALL(联合所有)查询

如果多表合并时需要保留重复的记录,在进行联合查询时就需要使用UNION ALL操作符,将所有记录都加入到集合中来。例如:

TABLE 成绩表1

UNION ALL

TABLE 成绩表2;

查询的最终结果为:

考生号  姓名    语文    数学    英语    综合

10420601110127  方志超  117 145 142 190

10420601110128  孙红霞  110 143 141 167

10420601110129  张方方  127 140 130 188

10420601110130  胡一炳  119 146 137 160

10420601110131  邓林楠  119 145 131 197

10420601110132  刘国琼  125 146 138 194

10420601110133  孔明阳  121 139 134 196

10420601110134  赵一凡  118 136 132 182

10420601110135  史佳妮  132 133 138 181

10420601110136  韩雪娇  117 140 139 152

10420601110137  刘申    122 135 138 157

10420601110138  张艳辉  123 145 129 164

10420601110139  郭文涛  120 139 136 171

10420601110140  刘念晨  127 143 133 182

10420601110140  刘念晨  127 143 133 182

10420601110141  邹佳    123 136 133 170

10420601110142  周杰    117 136 146 183

10420601110143  熊戈尔  108 144 138 176

10420601110144  胡开宇  115 125 137 169

10420601110145  张正杨  121 132 131 178

10420601110146  崔楚蔚  119 140 129 172

10420601110147  王海章  113 132 140 187

10420601110148  许袁浩  125 123 116 169

10420601110149  吴曼丽  117 142 129 165

10420601110150  宋巧至  108 131 140 166

10420601110151  王秋蕊  126 140 126 175

10420601110152  吴婷颖  118 140 129 160

10420601110153  夏雨泽  123 132 138 180

10420601110154  杜赟    133 141 129 179

10420601110157  吴丹    117 128 138 186

我们可以看出结果集中包含有重复的记录,这正是我们想要达到的目标。

与前面的一样,我们也可以使用如下的SQL语句,达到同样的效果:

合并两个查询:

Select * FROM 成绩表1

UNION ALL

Select * FROM 成绩表2;

合并表与查询:

TABLE 成绩表1

UNION ALL

Select * FROM 成绩表2;

三、将UNION(联合)查询的结果集保存在一个新表中

有时我们为了交换数据,需要把多表合并后的结果集保存到一个新表中,我们可以这样来实现:

Select *

INTO TEMP

FROM (

Select *

FROM 成绩表1

UNION ALL

TABLE 成绩表2);

这样我们就在数据库中生成了一个新的名为“TEMP”的表,其中保存了联合查询后的结果集。

四、将联合查询后的结果集保存为一个视图

有时我们不想将结果保存为一实际的表,只是想作为临时表使用,我们可以创建一个SQL视图:

Create VIEW 成绩合并

AS Select * FROM

(

Select *

FROM 成绩表1

UNION ALL

TABLE 成绩表2

);

这样我们的合并后的结果就可以像表一样使用了。


五、将UNION(联合)查询结果追加到现有表中

例如在我们的数据库中已有一个与联合查询的数据结构相同的表,名为“TEMP”,现在我们想要将联合查询的结果集追加进去,我们可以使用如下的SQL语句:

Insert INTO TEMP

Select *

FROM (

Select *

FROM 成绩表1

UNION ALL

TABLE 成绩表2);




Access软件网QQ交流群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助