Mysql 复杂查询丨联表查询

在这里插入图片描述

wei_shuo的个人主页

wei_shuo的学习社区

Hello World !


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,数据库)