前言
在 mysql 中,union 和 join 是多表查询的两种主要方式。它们有不同的适用场景和语法
两者的差异如下:
特性 | join | union |
---|---|---|
数据组合 | 横向组合,合并两表数据到一个行内 | 纵向组合,合并两表数据到多个行 |
数据结构要求 | 表间需有关联条件,如外键等 | 列数和数据类型需一致 |
结果数据量 | 结果记录数量通常小于表数据量 | 结果记录数量可能增加 |
常用场景 | 数据关联,如订单与用户信息查询 | 数据汇总,如多表的类似记录组合 |
具体的使用选择:
- 使用 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论