命令行操作MySQL - 联合查询 之 union合并查询数据记录

本文详细介绍了MySQL中UNION和UNIONALL的使用,包括它们在合并查询中的区别,如何确保字段一致性和去重效果,以及在实际场景中的示例。通过创建class和student表并操作,展示了如何通过这些关键字进行数据融合和去重处理。
摘要由CSDN通过智能技术生成

这是命令行操作MySQL数据库系列博客的第二十篇,今天这篇博客记录联合查询中的合并查询。意思是将2至n张表的数据无条件合并到一张新表中显示。


在MySQL中通过关键字UNION来实现合并操作,即可以通过其将多个SELECT语句的查询结果合并在一起,组成新的关系。在MySQL软件中,合并查询数据记录可通过SQL语句UNION来实现,具体语法形式如下:

select 字段1, 字段2, ..., 字段n from 表名1 UNION | UNION ALL select 字段1, 字段2, ..., 字段n from 表名2

注意: 多个选择语句select 的列数相同就可以合并,union和union all的主要区别是union all是把结果集直接合并在一起,而union 是将union all后的结果再执行一次distinct,去除重复的记录后的结果。

查询的字段列数一定要相等才可以进行合并查询,否则会查询失败。
UNION ALL:无条件将查询结果合并在一起;
UNION:无条件将查询结果合并在一起,并去重。

例:
创建class表和student表,并插入数据:

# 创建class表
create table class(id int AUTO_INCREMENT PRIMARY KEY, class_name varchar(128), teacher varchar(128));
# 插入数据
insert into class values(101, 'C语言班', '红老师'), (102, 'C++班', '绿老师'), (103, 'qt班', '蓝老师');


# 创建student表
create table student(id int AUTO_INCREMENT PRIMARY KEY, student_name varchar(128), sex enum('M', 'F'), class_id int);
# 插入数据
insert into student values(1, '小黄', 'M', 101), (2, '小白', 'M', 103), (3, '小紫', 'F', 101), (4, '小黑', 'M', 103);

在这里插入图片描述

  1. 例一
    统计全校一共有多少名老师和学生

    select teacher as people from class UNION ALL select student_name as people from student;
    

    在这里插入图片描述
    as:转换别名

  2. 例二
    合并多个字段

    select class_name, teacher from class UNION ALL select sex, student_name from student;
    

    在这里插入图片描述
    虽说可以合并,但是这样合并的结果,感觉怪怪的,所以一般情况下很少会这样使用。

  3. 例三
    合并所有id

    select id from class UNION ALL select class_id from student;
    

    在这里插入图片描述
    但这样有一个问题,合并的结果双双重复了。这时候, UNION就起到了作用。

  4. 例四
    使用UNION进行合并id

     select id from class UNION select class_id from student;
    

    在这里插入图片描述

    可以看到,合并出来的结果,已经去重了。


总结
使用合并查询需要注意,UNION查询合并,并去重;UNION ALL仅查询合并;且查询合并表的字段一定得相等(是查询时候写的字段一定要相等),否则会查询失败;可以查询合并多张表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值