全面掌握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 All比UNION的效率高,少了去除重复的步骤。
一、过滤重复记录的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源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access判断多条明细的配方或订...(11.30)
- 如何让后台数据库在局域网共享时,且...(11.29)
- 【Access月初月末日期设置方法...(11.29)
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)