翼度科技»论坛 编程开发 mysql 查看内容

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

11

主题

11

帖子

33

积分

新手上路

Rank: 1

积分
33
前言

在 MySQL 中,UNION 和 JOIN 是多表查询的两种主要方式。它们有不同的适用场景和语法
两者的差异如下:
特性JOINUNION数据组合横向组合,合并两表数据到一个行内纵向组合,合并两表数据到多个行数据结构要求表间需有关联条件,如外键等列数和数据类型需一致结果数据量结果记录数量通常小于表数据量结果记录数量可能增加常用场景数据关联,如订单与用户信息查询数据汇总,如多表的类似记录组合具体的使用选择:

  • 使用 JOIN:
当需要将两表数据按照某种逻辑相关联时,选择 JOIN

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

1. JOIN

JOIN 用于在多个表之间按一定条件关联数据
JOIN 查询通过指定的条件(如外键关系)将表横向组合
  1. SELECT column_names
  2. FROM table1
  3. [INNER|LEFT|RIGHT] JOIN table2
  4. ON table1.column_name = table2.column_name
  5. WHERE conditions;
复制代码
基本的类型有如下:
JOIN 类型

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

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

  • RIGHT JOIN(右连接)
返回右表中的所有记录,以及左表中与右表记录匹配的记录
如果左表中没有匹配项,则结果中该记录左表的字段为 NULL
不如 LEFT JOIN 常用

  • FULL OUTER JOIN(全连接) (MySQL 不直接支持,但可通过 UNION 模拟)
返回两个表中所有记录,不论是否有匹配项
不支持时用以下替代:
  1. SELECT ...
  2. FROM table1
  3. LEFT JOIN table2 ON condition
  4. UNION
  5. SELECT ...
  6. FROM table1
  7. RIGHT JOIN table2 ON condition;
复制代码
2. UNION

UNION 用于将两个或多个查询结果纵向组合为一个结果集。它对查询的列数和数据类型有要求
基本的语法如下:
  1. SELECT column_names
  2. FROM table1
  3. WHERE conditions
  4. UNION [ALL]
  5. SELECT column_names
  6. FROM table2
  7. WHERE conditions;
复制代码
注意事项有如下:

  • 默认去重:
UNION 会去掉结果集中重复的记录
若需要保留所有重复记录,使用 UNION ALL

  • 列数和数据类型要求:
所有参与查询的 SELECT 语句必须有相同的列数
每列的数据类型必须兼容

  • 结果排序:
可以通过在 UNION 之后的结果集中加 ORDER BY 对整体结果排序
到此这篇关于MySQL中UNION 和 JOIN 多表联合查询方式的文章就介绍到这了,更多相关mysql union和join内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/database/33107469y.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具