UNION:合并查询结果,并去掉重复的行。

UNION ALL:合并查询结果,保留重复的行。

举例验证说明:

创建两个表:user_info 和 user_info_b,设置联合主键约束,联合主键的列是(user_id 和 user_name),并在两个表中分别插入数据。

SQL语句如下:

 1 create table user_info
2 (
3 user_id VARCHAR(3),
4 user_name VARCHAR(32) ,
5 user_gender VARCHAR(2) NOT NULL,
6 user_nation VARCHAR(7) NOT NULL,
7 user_info_affiliate VARCHAR(12) NOT NULL,
8 PRIMARY KEY (user_id,user_name)
9 )
10
11 create table user_info_b
12 (
13 user_id_b VARCHAR(3) ,
14 user_name_b VARCHAR(32) ,
15 user_gender_b VARCHAR(2) NOT NULL,
16 user_nation_b VARCHAR(7) NOT NULL,
17 user_info_b_affiliate VARCHAR(12) NOT NULL,
18 PRIMARY KEY (user_id_b,user_name_b)
19 )
20
21 insert into user_info
22 values ('001','秦始皇','男','中国','user_info')
23
24 insert into user_info
25 values ('002','刘邦','男','中国','user_info')
26
27 insert into user_info
28 values ('003','赵匡胤','男','中国','user_info')
29
30 insert into user_info
31 values ('004','成吉思汗','男','中国','user_info')
32
33 insert into user_info
34 values ('005','朱元璋','男','中国','user_info')
35
36 insert into user_info
37 values ('006','孙中山','男','中国','user_info')
38
39 insert into user_info
40 values ('007','武则天','女','中国','user_info')
41
42 insert into user_info
43 values ('008','孝庄太后','女','中国','user_info')
44
45
46 insert into user_info_b
47 values ('001','华盛顿','男','美国','user_info_b')
48
49 insert into user_info_b
50 values ('002','杰斐逊','男','美国','user_info_b')
51
52 insert into user_info_b
53 values ('003','林肯','男','美国','user_info_b')
54
55 insert into user_info_b
56 values ('004','肯尼迪','男','美国','user_info_b')
57
58 insert into user_info_b
59 values ('005','朴槿惠','女','韩国','user_info_b')
60
61 insert into user_info_b
62 values ('006','默克尔','女','德国','user_info_b')
63
64 insert into user_info_b
65 values ('007','撒切尓夫人','女','英国','user_info_b')
66
67 insert into user_info_b
68 values ('008','特蕾莎·梅','女','英国','user_info_b')

表创建好并插入数据后,我们查询下表里面的内容信息。

先查询user_info表,查询语句如下:

1 select * from user_info

查询结果:

再查询user_info_b表,查询语句如下:

1 select * from user_info_b

查询结果:

通过查询结果,我们看到,user_info表里有2条 user_gender = '女'的记录,user_info_b表里有4条 user_gender_b = '女'的记录。

现在有一个查询的任务,任务要求是:在两张表里查询女性用户的国籍,查询结果要求用性别和国籍两个字段展示。

好,我们写SQL语句,语句如下:

1  select user_gender,user_nation from user_info
2 where user_gender ='女'
3 UNION
4 select user_gender_b,user_nation_b from user_info_b
5 where user_gender_b ='女'

执行结果:

查询结果只有4条记录,但是,我们知道,两张表里女性记录共有2+4=6条,为什么会这样呢?

原因是:UNION操作,合并查询结果,并去掉重复的行。

在user_info表中,有2条 (user_gender = '女'  and user_nation = '中国')的记录 ;

在user_info_b表中,也有2条(user_gender = '女'  and user_nation = '英国')的记录

UNION查询后,去掉重复行保留1行,本来4条(user_gender = '女' )记录,保留为2条。

我们知道,实际上有6为女性用户,UNION查询结果只有4条,造成真实数据缺失,一般在这样的情况下,我们用UNION  ALL就能避免上述问题的产生。

上述语句修改如下:

1 select user_gender,user_nation from user_info
2 where user_gender ='女'
3 UNION ALL
4 select user_gender_b,user_nation_b from user_info_b
5 where user_gender_b ='女'

我们再来看下查询结果:

最后,我们再来复盘下 UNION 与UNION ALL的区别:

UNION:合并查询结果,并去掉重复的行。

UNION ALL:合并查询结果,保留重复的行。

UNION 与 UNION ALL 的区别的更多相关文章

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

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

  2. union和union all的区别

    UNION 写一篇联合查询(把前后两个表的查询结果集合在前表中)首先有个为什么需要 相同记录数?? 记错了.应该是union两张表的查询字段数目要一致,字段类型要相似相同的数据类型,至少是相似,可转化 ...

  3. Oracle之Union与Union all的区别

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

  4. union与union all的区别

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

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

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

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

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

  7. union与union all 的区别

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

  8. Union 与 Union all 区别

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

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

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

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

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

随机推荐

  1. IDEA 生成返回值对象快捷键Ctrl+Alt+V失效

    在IDEA上运用快捷键返回对象(Ctrl+Alt+V)的时候一直无效,找了很久的问题,发现是有快捷键冲突,发现QQ音乐快捷键与IDEA冲突了,把那处改掉或者关闭即可. 所以边敲代码边听音乐也要注意一下

  2. 界面跳转+信息传递+AS中如何将ADV转移到其他盘中

    今日所学:界面跳转 信息传递 遇到的问题: 昨天遇到不能新建java类,在网上百度了很多,大多原因是没有新建java类的模板,但是我有,换了一个新的新建的方式后,发现虽然能建立了,但在测试时还是不能页 ...

  3. Linux下安装Typora

    系统:Ubuntu16.0 下载链接:https://www.typora.io/#linux 参考链接:https://www.cnblogs.com/wenkangzero/p/13202415. ...

  4. Cookie&&Session&&jsp入门

    会话技术 会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Coo ...

  5. Codeforces Round #677 (Div. 3) D. Districts Connection思维1200

    题目链接 Problem - 1433D - Codeforces 题目 美好的一天,从看不懂题目开始~~ Example input 4 5 1 2 2 1 3 3 1 1 1 4 1 1000 1 ...

  6. javaScript 内存管理机制

    大家好,今天分享的主题为 JavaScript 内存管理机制,本次分享将从以下三部分进行讲述: js 内存管理与 js 垃圾 常见的 GC 算法 V8 引擎的垃圾回收 js 内存管理与 js 垃圾 关 ...

  7. window 的简单使用

    window 的延迟加载 js代码 window的原始用法 (缺点 : 只能使用一次) window.onload = function() { var btn = document.querySel ...

  8. python基础练习题(题目 求输入数字的平方,如果平方运算后小于 50 则退出)

    day32 --------------------------------------------------------------- 实例046:打破循环 题目 求输入数字的平方,如果平方运算后 ...

  9. liunx对磁盘进行配额限制

    说明,我们给你一个分区进行磁盘配额进行限制 1.首先我们要进行那个分区进行限制,通过修改配置文件加上uquota ,然后再重启一下系统 二.quota 命令用于管理设备的磁盘容量配额,语法格式为 xf ...

  10. 新华三Gen10服务器进SSA查看、配置阵列

    1.开机自检进F10 2.F10后选择[smart storage administrator](跳到第5步)或选择第一项IP[intelligent provisioning] 3.选择执行维护 4 ...