Mysql 复杂查询丨联表查询

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Mysql 复杂查询丨联表查询


JOIN(联表查询)

联表查询(Join)是一种在数据库中使用多个表进行关联查询的操作。它通过使用 JOIN 关键字将多个表连接在一起,并根据关联条件从这些表中检索数据

INNER JOIN(内连接)

内连接(Inner Join)是一种在联表查询中使用的链接方式,它返回满足关联条件的行

语法
SELECT 列表
FROM 左表
INNER JOIN 右表 ON 关联条件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l1Ociimq-1689851063423)(./image-20230720102802654.png)]

  • 表A:
ID   Name
---------
1    John
2    Mary
3    David
  • 表B:
ID   Age
--------
1    30
2    25
4    40
  • 内连接,可以根据ID列将表A和表B进行关联,并返回满足关联条件的行:
SELECT A.ID, A.Name, B.Age
FROM A
INNER JOIN B ON A.ID = B.ID;
  • 结果集:
ID   Name   Age
--------------
1    John   30
2    Mary   25

LEFT JOIN(左连接)

左连接(Left Join)是一种在联表查询中使用的链接方式,返回左表中的所有行,以及右表中满足关联条件的匹配行

语法
SELECT 列表
FROM 左表
LEFT JOIN 右表 ON 关联条件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7zbJ5fjC-1689851063424)(./image-20230720102956745.png)]

  • 表A:
ID   Name
---------
1    John
2    Mary
3    David
  • 表B:
ID   Age
--------
1    30
2    25
4    40
  • 左连接,可以根据ID列将表A和表B进行关联,并返回满足关联条件的行:
SELECT A.ID, A.Name, B.Age
FROM A
LEFT JOIN B ON A.ID = B.ID;
  • 结果集:
ID   Name   Age
--------------
1    John   30
2    Mary   25
3    David  NULL

左连接返回了表A中的所有行,以及与表B中的ID匹配的行。由于表B中没有ID为3的行,所以返回的Age列为NULL

RIGHT JOIN(右连接)

右连接(Right Join)是一种在联表查询中使用的链接方式,它返回右表中的所有行,以及左表中满足关联条件的匹配行

语法
SELECT 列列表
FROM 左表
RIGHT JOIN 右表 ON 关联条件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ax5cLC4-1689851063424)(./image-20230720102817963.png)]

  • 表A:
ID   Name
---------
1    John
2    Mary
3    David
  • 表B:
ID   Age
--------
1    30
2    25
4    40
  • 右连接,可以根据ID列将表A和表B进行关联,并返回满足关联条件的行:
SELECT A.ID, A.Name, B.Age
FROM A
RIGHT JOIN B ON A.ID = B.ID;
  • 结果集:
ID   Name   Age
--------------
1    John   30
2    Mary   25
NULL NULL   40

右连接返回了表B中的所有行,以及与表A中的ID匹配的行。由于表A中没有ID为4的行,所以返回的ID和Name列为NULL

FULL JOIN(全连接)

全连接(Full Join)是一种在联表查询中使用的连接方式,它返回左表和右表中的所有行,并将它们按照关联条件进行匹配

语法
SELECT 列列表
FROM 左表
FULL JOIN 右表 ON 关联条件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AIDCAe56-1689851063425)(./image-20230720102904341.png)]

  • 表A:
ID   Name
---------
1    John
2    Mary
3    David
  • 表B:
ID   Age
--------
1    30
2    25
4    40
  • 全连接,可以将表A和表B进行关联,并返回左表和右表中的所有行:
SELECT A.ID, A.Name, B.Age
FROM A
FULL JOIN B ON A.ID = B.ID;
  • 结果集:
ID   Name   Age
--------------
1    John   30
2    Mary   25
3    David  NULL
NULL NULL   40

全连接返回了表A和表B中的所有行。由于表A中没有ID为4的行,所以返回的ID、Name和Age列为NULL;同样地,由于表B中没有ID为3的行,所以返回的ID、Name和Age列也为NULL

Cross Join(交叉连接)

交叉连接(Cross Join),也称为笛卡尔积(Cartesian Product),是一种在联表查询中使用的连接方式;返回两个表的所有可能组合,即将左表的每一行与右表的每一行进行组合

语法
SELECT 列列表
FROM 左表
CROSS JOIN 右表;
  • 表 A:
| ID | Name  |
|----|-------|
| 1  | John  |
| 2  | Mary  |
| 3  | David |
  • 表 B:
| ID | Department |
|----|------------|
| 1  | Sales      |
| 2  | Marketing  |
  • 交叉连接表 A 和表 B,我们得到了所有可能的组合
SELECT A.ID, A.Name, B.Department
FROM A
CROSS JOIN B;
  • 结果集:
| ID | Name  | Department |
|----|-------|------------|
| 1  | John  | Sales      |
| 1  | John  | Marketing  |
| 2  | Mary  | Sales      |
| 2  | Mary  | Marketing  |
| 3  | David | Sales      |
| 3  | David | Marketing  |

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
21天前
|
存储 关系型数据库 MySQL
提高MySQL查询性能的方法有很多
提高MySQL查询性能的方法有很多
103 7
|
21天前
|
存储 关系型数据库 MySQL
提高MySQL的查询性能
提高MySQL的查询性能
38 4
|
16天前
|
存储 SQL 关系型数据库
MySQL 给查询结果增列并自定义列数据
MySQL 给查询结果增列并自定义列数据
126 2
|
16天前
|
存储 SQL 关系型数据库
MySQL查询数据库锁表的SQL语句
MySQL查询数据库锁表的SQL语句
50 1
|
16天前
|
SQL 存储 关系型数据库
MySQL能否查询某张表的操作记录
MySQL能否查询某张表的操作记录
121 1
|
16天前
|
关系型数据库 MySQL Serverless
MySQL DATETIME 查询条件
MySQL DATETIME 查询条件
29 1
|
17天前
|
关系型数据库 MySQL 数据库
mysql的查询
MySQL数据库查询语句的基本用法,包括基础查询、条件查询、排序、分组查询、聚合函数的使用以及分页查询的方法。
26 2
|
17天前
|
缓存 关系型数据库 MySQL
MySQL 满足条件函数中使用查询最大值函数
MySQL 满足条件函数中使用查询最大值函数
51 1
|
1月前
|
SQL 缓存 关系型数据库
MySQL高级篇——关联查询和子查询优化
左外连接:优先右表创建索引,连接字段类型要一致、内连接:驱动表由数据量和索引决定、 join语句原理、子查询优化:拆开查询或优化成连接查询
MySQL高级篇——关联查询和子查询优化
|
27天前
|
存储 关系型数据库 MySQL
MySQL索引失效及避免策略:优化查询性能的关键
MySQL索引失效及避免策略:优化查询性能的关键
160 3