当前位置: 代码网 > it编程>数据库>Mysql > MySQL中UNION 和 JOIN 多表联合查询方式

MySQL中UNION 和 JOIN 多表联合查询方式

2024年11月21日 Mysql 我要评论
前言在 mysql 中,union 和 join 是多表查询的两种主要方式。它们有不同的适用场景和语法两者的差异如下:特性joinunion数据组合横向组合,合并两表数据到一个行内纵向组合,合并两表数

前言

在 mysql 中,union 和 join 是多表查询的两种主要方式。它们有不同的适用场景和语法

两者的差异如下:

特性joinunion
数据组合横向组合,合并两表数据到一个行内纵向组合,合并两表数据到多个行
数据结构要求表间需有关联条件,如外键等列数和数据类型需一致
结果数据量结果记录数量通常小于表数据量结果记录数量可能增加
常用场景数据关联,如订单与用户信息查询数据汇总,如多表的类似记录组合

具体的使用选择:

  • 使用 join:

当需要将两表数据按照某种逻辑相关联时,选择 join

  • 使用 union:

当需要合并多表中具有相同结构但无直接关系的数据时,选择 union

1. join

join 用于在多个表之间按一定条件关联数据

join 查询通过指定的条件(如外键关系)将表横向组合

select column_names
from table1
[inner|left|right] join table2
on table1.column_name = table2.column_name
where conditions;

基本的类型有如下:

join 类型

  • inner join(内连接)

只返回两个表中满足 on 条件的记录
若某条记录在任一表中没有匹配项,则不会包含在结果中
常用于提取相关数据

  • left join(左连接)

返回左表中的所有记录,以及右表中与左表记录匹配的记录
如果右表中没有匹配项,则结果中该记录右表的字段为 null
常用于查找左表中的数据即使右表没有匹配项时

  • right join(右连接)

返回右表中的所有记录,以及左表中与右表记录匹配的记录
如果左表中没有匹配项,则结果中该记录左表的字段为 null
不如 left join 常用

  • full outer join(全连接) (mysql 不直接支持,但可通过 union 模拟)

返回两个表中所有记录,不论是否有匹配项
不支持时用以下替代:

select ...
from table1
left join table2 on condition
union
select ...
from table1
right join table2 on condition;

2. union

union 用于将两个或多个查询结果纵向组合为一个结果集。它对查询的列数和数据类型有要求

基本的语法如下:

select column_names
from table1
where conditions
union [all]
select column_names
from table2
where conditions;

注意事项有如下:

  • 默认去重:

union 会去掉结果集中重复的记录
若需要保留所有重复记录,使用 union all

  • 列数和数据类型要求:

所有参与查询的 select 语句必须有相同的列数
每列的数据类型必须兼容

  • 结果排序:

可以通过在 union 之后的结果集中加 order by 对整体结果排序

到此这篇关于mysql中union 和 join 多表联合查询方式的文章就介绍到这了,更多相关mysql union和join内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com