MySQL之union联合查询的实现

 更新时间:2024年04月19日 09:22:08   作者:白云如幻  
联合查询就是将多个查询结果的结果集合并到一起,字段数不变,多个查询结果的记录数合并,本文主要介绍了MySQL之union联合查询的实现,具有一定的参考价值,感兴趣的可以了解一下

UNION 的含义是“联合,并集,结合”,在MySQL中可以将多个查询语句的结果合并成一个结果集,在MySQL 不支持FULL OUTER JOIN 的情况下,弥补了“并集” 查询的短板。

联合查询:

关键字union,作用就是将多条查询语句的结果合并成一个结果集。

案例:(查询部门编号大于100或名字中含有a字符的员工信息)

select * from employees where department_id>100 or last_name like '%a%';

用联合查询演示:

select * from employees where department_id>100
union
select * from employees where last_name like '%a%';

union是应用场景:

比如在我们有个数据库中的老师表和学生表,两者之间没有直接的关联关系,但是又有一些共通性,但是现在我们想要查询学校所有男老师和男学生的信息(学生和老师的编号,姓名,出现日期,性别),这个时候就是应用union的时候。

SELECT `tno` 编号,`tname`,`tsex`,`tbirthday`
FROM `teachers`
WHERE `tsex`='男'
UNION
SELECT `sno`,`sname`,`ssex`,`sbirthday`
FROM `students`
WHERE `ssex`='男';

联合查询的特点:

  • 联合查询的两个子查询的查询字段个数要一致
  • 要求联合查询的子查询的查询列表顺序要在内容上保持一致
  • 使用union联合默认会自动去重,如果不想去重可以将union改为union all

联合查询的规则

联合查询是有一定使用规则的,如果不加注意,MySQL就有可能执行报错,或意义混乱

1、多条查询语句的查询列数必须保持一致,否则报错。

2、多条查询语句的列值类型顺序最好保持一致。

3、UNION 关键字默认不查询重复记录,但只要有一个字段不一样就认为是两条记录。

规则一:查询列数必须保持一致

其实很好理解,如果要将两个结果集合并,那么就需要将列数统一,MySQL对此作了严格的限制,不会以 NULL 值显示没有查询该列的查询记录,这是为了保证数据的准确性,原因是 NULL 也是一种值

SELECT emp_id 编号, emp_name 姓名, dept_id 所属部门或班级, manager_id FROM emp
UNION
SELECT stu_id 编号, stu_name 姓名, class_id 所属部门或班级 FROM student

规则二:列值类型和顺序最好保持一致

“最好” 的意思是 “我们可以不这样做,但皮一下并没有什么意义”。

比如,我们将stu_name 与 class_id 调换顺序:

SELECT emp_id 编号, emp_name 姓名, dept_id 所属部门或班级 FROM emp
UNION
SELECT stu_id 编号, class_id 姓名, stu_name 所属部门或班级 FROM student
LIMIT 15

 MySQL虽然不会报错,但结果已经不具有什么使用意义了。另外,列的别名其实并不需要完全统一,多条查询语句中如果出现不统一的列名,MySQL会默认使用第一条查询语句的列名。如:

SELECT emp_id 编号, emp_name 姓名, dept_id 所属部门或班级 FROM emp
UNION
SELECT stu_id, stu_name, class_id FROM student
LIMIT 15

但为了保证可读性,建议为每条查询语句指定相同的列名,保持统一格式。

规则三:UNION 默认去重

UNION 关键字不会查询重复的记录,但重复的记录并不是简简单单的“看上去重复”或“主键重复”,记录中只要有一个字段不一致,UNION 就会老老实实的将他们都查询出来。

UNION 与 UNION ALL

UNION 关键字是去重的联合查询,如果非要将所有记录都查询出来,不忽略重复的记录,那么可以使用 UNION ALL ,对比来看一下:

SELECT * FROM emp
UNION 
SELECT * FROM emp

UNION 的结果: 

SELECT * FROM emp
UNION ALL
SELECT * FROM emp

UNION  ALL 的结果:

到此这篇关于MySQL之union联合查询的实现的文章就介绍到这了,更多相关MySQL union联合查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • MySQL如何添加环境变量和初始化MySQL

    MySQL如何添加环境变量和初始化MySQL

    本文主要介绍了如何在Windows系统中添加MySQL的环境变量以及如何初始化MySQL,通过添加环境变量,可以在任意一个命令提示符中直接调用MySQL的相关程序,大大简化了操作,初始化MySQL时,需要新建一个配置文件并指定默认编码集和存储引擎,如果初始化过程中出现错误
    2024-11-11
  • mysql 5.7.17 安装配置方法图文教程(ubuntu 16.04)

    mysql 5.7.17 安装配置方法图文教程(ubuntu 16.04)

    这篇文章主要为大家分享了ubuntu 16.04下mysql 5.7.17 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • MySQL优化案例之隐式字符编码转换

    MySQL优化案例之隐式字符编码转换

    这篇文章主要介绍了MySQL优化案例之隐式字符编码转换,隐式类型转换也会导致同样的放弃走树搜索,更多相关内容具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • MySQL常用的几种连接(JOIN)方式总结

    MySQL常用的几种连接(JOIN)方式总结

    MySQL常用JOIN类型包括INNER JOIN(返回匹配记录)、LEFT JOIN(左表全显示,右表无匹配则为NULL)、RIGHT JOIN(右表全显示)、FULL OUTER JOIN(需用UNION模拟),默认为INNER JOIN,选择时需根据数据完整性和业务需求,合理使用索引以优化性能
    2025-07-07
  • MySQL数据库表的合并与分区实现介绍

    MySQL数据库表的合并与分区实现介绍

    今天我们来聊聊处理大数据时Mysql的存储优化。当数据达到一定量时,一般的存储方式就无法解决高并发问题了。最直接的MySQL优化就是分区分表,以下是我个人对分区分表的笔记
    2022-09-09
  • 如何选择合适的MySQL日期时间类型来存储你的时间

    如何选择合适的MySQL日期时间类型来存储你的时间

    这篇文章主要介绍了如何选择合适的MySQL日期时间类型来存储你的时间,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-08-08
  • 浅谈MySql的存储引擎(表类型)

    浅谈MySql的存储引擎(表类型)

    通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合
    2011-05-05
  • 如何使用MySQL一个表中的字段更新另一个表中字段

    如何使用MySQL一个表中的字段更新另一个表中字段

    这篇文章主要介绍了如何使用MySQL一个表中的字段更新另一个表中字段,需要的朋友可以参考下
    2018-11-11
  • MySQL中去重处理的方法小结

    MySQL中去重处理的方法小结

    本文主要介绍了MySQL中去重方法小结,包含DISTINCT、GROUPBY、聚合函数、子查询、临时表、窗口函数、GROUP_CONCAT这些方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 浅谈Mysql8和mysql5.7的区别

    浅谈Mysql8和mysql5.7的区别

    本文主要介绍了Mysql8和mysql5.7的区别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论