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数据库中,偶尔会遇到需要查找表中出现的重复数据的情况,这种情况下,我们可以通过编写一些SQL查询语句轻松地找到并处理这些重复行,本文将介绍一些常见的方法和技巧,帮助你有效地查询MySQL表中的重复数据,需要的朋友可以参考下
    2023-10-10
  • MySQL时区查看及设置全过程

    MySQL时区查看及设置全过程

    在服务器环境下,MySQL默认时区可能是UTC,需注意应用时区设置,若查询条件使用Now()/sysdate(),会根据MySQL时区查询,导致时间错乱,可使用`selectnow()`检查时间准确性,查看和修改MySQL时区的方法包括使用命令和修改配置文件
    2025-01-01
  • MySQL中TEXT与BLOB字段类型的区别

    MySQL中TEXT与BLOB字段类型的区别

    这篇文章主要介绍了MySQL中TEXT与BLOB字段类型的区别,本文总结了6大区别,需要的朋友可以参考下
    2014-08-08
  • 一文带你了解MySQL之连接原理

    一文带你了解MySQL之连接原理

    搞数据库一个避不开的概念就是Join,翻译成中⽂就是连接,相信很多小伙伴初学连接的时候有些一脸懵,理解了连接的语义之后又可能不明白各个表中的记录到底是怎么连起来的,所以本章就来学习连接的原理,需要的朋友可以参考下
    2023-05-05
  • MySQL多表查询与7种JOINS的实现举例

    MySQL多表查询与7种JOINS的实现举例

    最近学习了多表查询,对此做一些笔记的整理,下面这篇文章主要给大家介绍了关于MySQL多表查询与7种JOINS实现的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • MySQL数据库InnoDB引擎主从复制同步经验总结

    MySQL数据库InnoDB引擎主从复制同步经验总结

    这篇文章主要介绍了MySQL数据库InnoDB引擎主从复制同步经验总结,本文总结了设置主从复制时遇到的一些错误和解决方法,需要的朋友可以参考下
    2015-01-01
  • mySQL中replace的用法

    mySQL中replace的用法

    MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪
    2012-09-09
  • 如何区分MySQL的innodb_flush_log_at_trx_commit和sync_binlog

    如何区分MySQL的innodb_flush_log_at_trx_commit和sync_binlog

    这篇文章主要介绍了如何区分MySQL的innodb_flush_log_at_trx_commit和sync_binlog,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2021-02-02
  • MySQL8的主要目录结构解读

    MySQL8的主要目录结构解读

    这篇文章主要介绍了MySQL8的主要目录结构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • mysql设置默认值无效问题及解决

    mysql设置默认值无效问题及解决

    这篇文章主要介绍了mysql设置默认值无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论