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. NSOperation基本概念

    NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程   NSOperation和NSOperationQueue实现多线程的具体步骤 先将 ...

  2. 深入理解JavaScript系列:JavaScript的构成

    此篇文章不是干货类型,也算不上概念阐述,就是简单的进行一个思路上的整理. 要了解一样东西或者完成一件事情,首要的就是先要搞清楚他是什么.作为一个前端开发人员,JavaScript应该算作是最核心之一的 ...

  3. C++复数类对除法运算符 / 的重载

    C8-1 复数加减乘除 (100.0/100.0 points) 题目描述 求两个复数的加减乘除. 输入描述 第一行两个double类型数,表示第一个复数的实部虚部 第二行两个double类型数,表示 ...

  4. IOS atomic与nonatomic,assign,copy与retain的定义和区别

    IOS atomic与nonatomic,assign,copy与retain的定义和区别 atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作.        ...

  5. 用UltraEdit软件替换回车换行的窍门

    转载:http://www.zhuantilan.com/jiqiao/46518.html 方法/步骤 1.打开一个原始文档,在文档中各个人物名称是以逗号分隔的,我们下面来尝试把逗号替换为换行符. ...

  6. (进阶篇)PHP+Mysql+jQuery找回密码

    通常所说的密码找回功能不是真的能把忘记的密码找回,因为我们的密码是加密保存的,一般开发者会在验证用户信息后通过程序生成一个新密码或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密 ...

  7. 初识Java-分数录入系统

    package classTest; import java.util.Scanner; public class scoreArrangement { /**  * 选择界面(main)  */ p ...

  8. music player界面

    public class SoundPlayerGUI extends JFrame implements ChangeListener, ActionListener { private stati ...

  9. 模块:js实现一个倒计时功能

    1.给显示内容加样式 <style> #p1{font-size: large; color: red;} </style> 2.客户端页面 <div id=" ...

  10. 《C与指针》第十四章练习

    本章问题 1.预处理器定义了5个符号,给出了进行编译的文件名.文件行的当前行号,当前日期和时间以及编译器是否为ANSI C编译器.为每个符号举出一种可能的用途. answer:在打印错误信息时,文件名 ...