JOIN 和 OUTER JOIN,SQL中常见的连接方式

1. INNER JOIN(简称 JOIN)

INNER JOIN 是 SQL 中最常用的一种连接方式,默认的 JOIN 就是 INNER JOIN。它返回两个表中满足连接条件的匹配记录。

  • 作用:返回两个表中所有满足 ON 条件的记录。
  • 特性:如果表中的某些行在连接条件下没有匹配的行,那么这些行将不会出现在结果集中。

例子

SELECT * FROM TableA JOIN TableB ON TableA.ID = TableB.ID;

这将只返回 TableATableBID 字段匹配的记录。

2. OUTER JOIN

OUTER JOIN 分为三种类型:LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN,它们的主要特点是即使某些行在连接条件下没有匹配的行,仍然会出现在结果集里。

  • LEFT OUTER JOIN(左外连接):返回左表(即 JOIN 中左边的表)中的所有记录,即使右表中没有匹配的行。如果右表没有匹配的行,右表的列会显示 NULL

  • RIGHT OUTER JOIN(右外连接):返回右表(即 JOIN 中右边的表)中的所有记录,即使左表中没有匹配的行。如果左表没有匹配的行,左表的列会显示 NULL

  • FULL OUTER JOIN(全外连接):返回两个表中的所有记录。如果左表没有匹配的行,左表的列会显示 NULL;如果右表没有匹配的行,右表的列会显示 NULL

2.1 LEFT OUTER JOIN (左外连接)

LEFT OUTER JOIN 返回左表的所有记录以及右表中与之匹配的记录。如果右表中没有匹配的记录,则结果中相应的右表列会显示为 NULL

例子

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.ID = TableB.ID;

这将返回 TableA 中的所有记录,即使 TableB 中没有匹配的记录。如果 TableB 中没有与 TableA 中的某条记录匹配的行,TableB 中的字段将显示为 NULL

2.2 RIGHT OUTER JOIN (右外连接)

RIGHT OUTER JOIN 返回右表的所有记录以及左表中与之匹配的记录。如果左表中没有匹配的记录,则结果中相应的左表列会显示为 NULL

例子

SELECT * FROM TableA RIGHT OUTER JOIN TableB ON TableA.ID = TableB.ID;

这将返回 TableB 中的所有记录,即使 TableA 中没有匹配的记录。如果 TableA 中没有与 TableB 中的某条记录匹配的行,TableA 中的字段将显示为 NULL

2.3 FULL OUTER JOIN (全外连接)

FULL OUTER JOIN 返回左表和右表的所有记录。如果某一表中没有匹配的记录,则对应的字段将显示为 NULL

例子

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.ID = TableB.ID;

这将返回 TableATableB 中的所有记录。如果某一表中的记录没有匹配,另一个表的列将显示为 NULL

3. 总结对比:

连接类型返回记录说明
INNER JOIN只有满足连接条件的匹配记录只有在两个表中都有匹配的记录才会被返回。
LEFT JOIN返回左表的所有记录,右表的匹配记录左表的所有记录都返回,右表没有匹配的会显示 NULL
RIGHT JOIN返回右表的所有记录,左表的匹配记录右表的所有记录都返回,左表没有匹配的会显示 NULL
FULL JOIN返回左右表的所有记录,左表和右表的匹配记录左右表所有记录都返回,没匹配的字段会显示 NULL

4. 使用场景

  • INNER JOIN:当你只关心两张表中有匹配记录的情况时,使用 INNER JOIN
  • LEFT JOIN:当你需要保留左表的所有记录,并且想知道左表记录是否在右表中有匹配时,使用 LEFT JOIN
  • RIGHT JOIN:当你需要保留右表的所有记录,并且想知道右表记录是否在左表中有匹配时,使用 RIGHT JOIN
  • FULL JOIN:当你需要保留两张表的所有记录时,使用 FULL JOIN,即使它们没有匹配的记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值