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

 更新时间:2024年11月20日 15:02:16   作者:码农研究僧  
本文介绍了在MySQL中UNION和JOIN两种多表查询的方式,包括它们的适用场景、语法和特性,JOIN用于关联数据,而UNION用于合并具有相同结构但无直接关系的数据,感兴趣的朋友跟随小编一起看看吧

前言

在 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL8 密码强度评估与配置详解

    MySQL8 密码强度评估与配置详解

    MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提升安全性,本文给大家介绍MySQL8密码强度评估与配置,感兴趣的朋友跟随小编一起看看吧
    2025-08-08
  •  SQL 中 CASE 表达式的使用方式

     SQL 中 CASE 表达式的使用方式

    这篇文章主要介绍了 SQL 中 CASE 表达式的使用方式,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 浅谈MySQL中使用IN会走索引吗

    浅谈MySQL中使用IN会走索引吗

    本文主要介绍了浅谈MySQL中使用IN会走索引吗,通过三个案例分析了MySQL 5.7.34版本中IN操作符的执行情况,感兴趣的可以了解一下
    2025-02-02
  • MySQL提示“too many connections“错误的解决过程

    MySQL提示“too many connections“错误的解决过程

    当大量的connect之后,就会出现Too many connections的错误,下面这篇文章主要给大家介绍了关于MySQL提示“too many connections“错误的解决过程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • mysql下普通用户备份数据库时无lock tables权限的解决方法

    mysql下普通用户备份数据库时无lock tables权限的解决方法

    mysql使用普通用户备份出现无lock tables权限的解决方法,需要的朋友可以参考下。
    2011-10-10
  • Mysql索引的类型和优缺点详解

    Mysql索引的类型和优缺点详解

    这篇文章主要为大家详细介绍了Mysql索引的类型和优缺点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Win10下mysql 8.0.15 安装配置图文教程

    Win10下mysql 8.0.15 安装配置图文教程

    这篇文章主要为大家详细介绍了Win10下mysql 8.0.15 安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • mysql 5.7.18 Archive压缩版安装教程

    mysql 5.7.18 Archive压缩版安装教程

    这篇文章主要为大家详细介绍了mysql 5.7.18 Archive压缩版安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 如何解决局域网内mysql数据库连接慢

    如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。非常急人,有没有办法可以解决局域网内mysql数据库连接慢呢?下面小编带领大家来解决此问题,感兴趣的朋友一起看看吧
    2015-09-09
  • mysql 5.7.24 安装配置方法图文教程

    mysql 5.7.24 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.24 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11

最新评论