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

union和union all的区别的更多相关文章

  1. Union和Union All到底有什么区别

    以前一直不知道Union和Union All到底有什么区别,今天来好好的研究一下,网上查到的结果是下面这个样子,可是还是不是很理解,下面将自己亲自验证: Union:对两个结果集进行并集操作,不包括重 ...

  2. Oracle之Union与Union all的区别

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来. union和unio ...

  3. union与union all的区别

    首先说下union与join的区别 1.union是以行增加的方式,进行连接:join是以列增加的方式进行连接: 2.union连接查询的两个表的字段必须要一一对应,数目相等:join则没有要求,但是 ...

  4. C和C++中结构体(struct)、联合体(union)、枚举(enum)的区别

    C++对C语言的结构.联合.枚举 这3种数据类型进行了扩展. 1.C++定义的结构名.联合名.枚举名 都是 类型名,可以直接用于变量的声明或定义.即在C++中定义变量时不必在结构名.联合名.枚举名 前 ...

  5. Ms SQLServer中的Union和Union All的使用方法和区别

    Ms SQLServer中的Union和Union All的使用方法和区别 SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 ...

  6. union与union all 的区别

    Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...

  7. Union 与 Union all 区别

    原创,请园长不要删 Sql查询统计时,很多时候用到了union 和 union all,union与union all的区别就是联合查询的时候union会去重,union all不会去重.本人用uni ...

  8. SQL Server函数​---Union与Union All的区别

    SQL Server函数---Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称 ...

  9. Oracle中Union与Union All的区别(适用多个数据库)

    Oracle中Union与Union All的区别(适用多个数据库) 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或 ...

随机推荐

  1. typeof和instanceof

    JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前 ...

  2. 在windows下配置wnmp

    1.下载mysql 2.下载php 3.下载nginx 4.创建文件夹wnmp 把php,nginx,mysql放到wnmp目录下,另外新建www目录, 用于存放web文件 配置nginx,如下(ng ...

  3. event.target指向谁?

    学习中,有时遇到event.target,总是不明白为什么要用target,后来学习了下,大概了解了event.target到底指什么元素了,关于event和this的内容,下回再说: 先摆结论:ev ...

  4. javascript方法链式调用和构造函数链式调用对比

    先说一下方法链:B的实例从A继承了A中的同名方法,如果B的方法重载了A中的方法,B中的重载方法可能会调用A中的重载方法,这种方法称为方法链. 构造函数链:子类的构造函数B()有时需要调用父类的构造函数 ...

  5. Qt错误总结

    Qt时常发生的错误总结 1,代码有问题,但是它却告诉你别的地方-比头文件不能读取,贼蛋疼! 2,库文件问题,会出现一大堆错误,这个时候就要好好检查库文件了. 3,版本问题,Qt版本升级时有些东西会变化 ...

  6. archlinux vmware一些问题

    虚拟机没法上网 sudo modprobe vmnet sudo vmware-network --start

  7. 编写中断例程7ch:计算word型数据的平方

    实现计算一个word型数据的平方. 这是安装程序. assume cs:code code segment start: mov ax, cs mov ds, ax mov si, offset sq ...

  8. ln 命令使用

    今天在工作中遇到了“ln -sf”命令,发觉很久没用基本忘光,遂重拾鸟哥神书温补了一把. 简单描述的话,ln是linux中用来链接文件的,存在两种不同的连接: 1) Hard Link 实现该操作很简 ...

  9. 【转载】Python 描述符简介

    来源:Alex Starostin 链接:www.ibm.com/developerworks/cn/opensource/os-pythondescriptors/ 关于Python@修饰符的文章可 ...

  10. 【转】无法将notepad++添加到打开方式列表中的解决办法

    问题:想要设置notepad++为默认打开方式,却发现在点击browse找到notepad++.exe点击打开后没有在打开方式列表中找到notepad++. 原因:更新程序版本后程序的路径发生了变动. ...