MySQL多表联查

在MySQL中,如果你想从多个表中选择数据,可以使用联接(JOIN)。联接使你能够结合两个或更多个表的数据,基于这些表之间的逻辑关系。
MySQL 中的内链接和外链接是用于将不同表中的行组合到一起的。这是根据两个表中的某一列(或一组列)之间的关系进行的。

内链接(INNER JOIN)

内链接返回所有满足连接条件的行。只有当两个表中都有匹配的行时,结果集中才会包含这些行。如果有不匹配的行,那么结果集中就不会包含这些行。

比如有两个表,table1 和 table2,他们有共同的列 column。使用内链接的 SQL 查询可能如下:

SELECT *
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

这将返回所有 table1 的 column 值与 table2 的 column 值相同的行。

外链接(OUTER JOIN)

外链接返回至少在一个表中满足连接条件的行。它包括左外链接(LEFT OUTER JOIN)、右外链接(RIGHT OUTER JOIN)和全外链接(FULL OUTER JOIN)。

  • 左外链接(LEFT OUTER JOIN):结果集包括左表的所有行,如果右表中没有匹配的行,则右表中的列将为空(NULL)。

  • 右外链接(RIGHT OUTER JOIN):结果集包括右表的所有行,如果左表中没有匹配的行,则左表中的列将为空(NULL)。

  • 全外链接(FULL OUTER JOIN):结果集包括两个表中的所有行。如果左表或右表中没有匹配的行,那么该表中的列将为空(NULL)。但是需要注意的是,MySQL并不直接支持全外链接。

左外链接的 SQL 查询可能如下:

SELECT *
FROM table1
LEFT OUTER JOIN table2
ON table1.column = table2.column;

这将返回所有的 table1 行,以及任何与 table1 的 column 值相同的 table2 行。如果在 table2 中没有匹配的行,那么结果集中 table2 的列将为空(NULL)。

总的来说,内链接和外链接是关系数据库中非常重要的工具,用于组合和查询数据。选择内链接还是外链接取决于你要从查询中获取什么类型的信息。

区别

下面是对 MySQL 中内链接和外链接的简要总结:

内链接(INNER JOIN):

  • 返回两个表中满足连接条件的行。
  • 只有当两个表中都有匹配的行时,结果集中才会包含这些行。
  • 如果有不匹配的行,那么结果集中就不会包含这些行。

外链接(OUTER JOIN):

  • 返回至少在一个表中满足连接条件的行。
  • 下面我将使用两个简单的表来说明左外链接(LEFT OUTER JOIN)和右外链接(RIGHT OUTER JOIN)。

假设我们有以下两个表:

Students 表:

IDName
1Alice
2Bob
3Charlie

Grades 表:

Student_IDGrade
190
285

下面是一个左外链接的例子:

SELECT Students.Name, Grades.Grade
FROM Students
LEFT OUTER JOIN Grades
ON Students.ID = Grades.Student_ID;

这将返回以下结果:

NameGrade
Alice90
Bob85
CharlieNULL

你可以看到,尽管 Charlie 在 Grades 表中没有匹配的行,但是由于我们使用的是左外链接,Charlie 仍然出现在了结果中,而且 Grade 列显示为 NULL。

下面是一个右外链接的例子:

SELECT Students.Name, Grades.Grade
FROM Students
RIGHT OUTER JOIN Grades
ON Students.ID = Grades.Student_ID;

这将返回以下结果:

NameGrade
Alice90
Bob85

在这个例子中,由于我们使用的是右外链接,只有在 Grades 表中有匹配行的学生(Alice 和 Bob)出现在了结果中,Charlie 没有出现。

这就是左外链接和右外链接在处理未匹配行时的差异。

  • 包括左外链接(LEFT OUTER JOIN)、右外链接(RIGHT OUTER JOIN)和全外链接(FULL OUTER JOIN)。
  • 左外链接返回左表的所有行,如果右表中没有匹配的行,则右表中的列将为空(NULL)。
  • 右外链接返回右表的所有行,如果左表中没有匹配的行,则左表中的列将为空(NULL)。
  • 全外链接返回两个表中的所有行,如果左表或右表中没有匹配的行,那么该表中的列将为空(NULL)。需要注意的是,MySQL并不直接支持全外链接。

总的来说,内链接和外链接是关系数据库中非常重要的工具,用于组合和查询数据。选择内链接还是外链接取决于你要从查询中获取什么类型的信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值