union和union all的区别
2015-11-25 09:13
369 查看
UNION 写一篇
联合查询(把前后两个表的查询结果集合在前表中)
首先有个为什么需要 相同记录数?? 记错了。应该是union两张表的查询字段数目要一致,字段类型要相似
相同的数据类型,至少是相似,可转化的。
UNION 和 UNION ALL 的区别:前者会自动剔除掉后表相同的数据,从而得到的结果集没有重复数据,
而 UNION ALL 会把所有数据都查询出来,包括重复的数据。
测试脚本:
疑问:1. 按理来说前表的结果应该全部能查出来,但是有人提出union后的记录数会少于前表,有可能吗?
2.union的使用场景:应该是两个相似的表,并且要合并结果集。
案例:
解答思路:这里肯定要使用到group by 进行分组,但是主表和副表的表结构不一致,这个时候需要使用常量处理,然后用union去合并记录,从而生成需要的新表。
联合查询(把前后两个表的查询结果集合在前表中)
首先有个为什么需要 相同记录数?? 记错了。应该是union两张表的查询字段数目要一致,字段类型要相似
相同的数据类型,至少是相似,可转化的。
UNION 和 UNION ALL 的区别:前者会自动剔除掉后表相同的数据,从而得到的结果集没有重复数据,
而 UNION ALL 会把所有数据都查询出来,包括重复的数据。
测试脚本:
USE [test] GO /****** Object: Table [dbo].[my] Script Date: 11/25/2015 08:57:54 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[my]( [id] [int] NOT NULL, [num] [int] IDENTITY(0,1) NOT NULL, [dnum] [int] NOT NULL, [name] [nchar](10) NULL, [col] [int] NULL, CONSTRAINT [PK_my] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[my] ADD CONSTRAINT [DF_my_dnum] DEFAULT ((11)) FOR [dnum] GO
--union SELECT id from test union select id from my; id 1 2 3 4 7 8 --UNION ALL SELECT id from test union all select id from my; id 1 2 3 1 3 4 7 8
疑问:1. 按理来说前表的结果应该全部能查出来,但是有人提出union后的记录数会少于前表,有可能吗?
2.union的使用场景:应该是两个相似的表,并且要合并结果集。
案例:
解答思路:这里肯定要使用到group by 进行分组,但是主表和副表的表结构不一致,这个时候需要使用常量处理,然后用union去合并记录,从而生成需要的新表。
CREATE TABLE TT( ID INT , A INT, B INT ) CREATE TABLE TA( ID INT , A INT, B INT, C INT, D INT, E INT, F INT ) INSERT INTO TT VALUES (1,15,1); INSERT INTO TT VALUES (1,15,2); INSERT INTO TT VALUES (1,15,3); INSERT INTO TT VALUES (1,15,4); INSERT INTO TT VALUES (2,15,1); INSERT INTO TT VALUES (2,15,2); INSERT INTO TT VALUES (2,15,3); INSERT INTO TT VALUES (2,15,1); INSERT INTO TA VALUES (1,15,1,1,550,780,220); INSERT INTO TA VALUES (1,15,2,2,550,380,220); INSERT INTO TA VALUES (1,15,3,3,550,580,220); INSERT INTO TA VALUES (1,15,1,4,550,700,200); INSERT INTO TA VALUES (1,15,2,5,500,780,220); INSERT INTO TA VALUES (1,15,3,6,550,780,100); INSERT INTO TA VALUES (1,15,4,7,500,480,220); INSERT INTO TA VALUES (1,15,1,8,550,600,100); SELECT * INTO TN FROM (SELECT T1.AID, T1.A, T1.B, SUM(T1.C1) AS C_C1, SUM(T1.D1) AS C_D1, SUM(T1.E1) AS C_E1, SUM(T1.F1) AS C_F1 FROM ((SELECT ID AS AID, A, B, 0 AS C1, 0 AS D1, 0 AS E1, 0 AS F1 FROM TT) UNION (SELECT AID, A, B, SUM(C) AS C1, SUM(D) AS D1, SUM(E) AS E1, SUM(F) AS F1 FROM TA GROUP BY AID, A, B)) AS T1 GROUP BY T1.AID, T1.A, T1.B) T
相关文章推荐
- Frogger(最短路)
- android动态添加View
- SpringMVC中HandlerMapping的三种配置方式
- 如何正确查看电脑IP
- UESTC 1218 Ancient Go (我的递归~~)
- [Windows Server 2003] 安装SQL Server 2005
- JavaScript学习(4.3):调用表达式和对象创建表达式
- JSP:自定义标签之开发<c:if><c:else>标签
- CSDN博客第一天
- grep/egrep学习笔记
- org.apache.log4j.Logger 详解
- Hadoop-2.7.2分布式安装手册
- [LeetCode253]Meeting Rooms II
- js获取表单table 中文本框的值
- HDU 1072 Nightmare(AC)
- JSP:自定义标签之<c:if>标签
- Longest Palindromic Substring
- [Linux]Directory Function
- Linux 删除文件夹和文件的命令
- JavaScript学习(4.2):函数定义表达式和属性访问表达式