六、SQL–表连接⑦(全外部连接)

全外部连接并不是所有数据库系统都支持,最常使用的MYSQL就不支持全外部连接。

全外部连接:是左外部连接和右外部连接的合集,因为即使在右表中不存在匹配连接条件的数据,左表中的所有记录也将被放到结果集中,同样即使在左表中不存在匹配连接条件的数据,右表中的所有记录也将被放到结果集中。

如:使用全外部连接查询每张订单的信息以及对应的客户信息

SELECT o.FNumber,o.FPrice,o.FCustomerId,c. FROM T_Order o FULL OUTER JOIN T_Customer c ON o.FCustomerId=c.FId

执行结果:

FNUMBER FPRICE FCUSTOMERID FNAME FAGE
K001 100.00 1 TOM 21
K002 200.00 1 TOM 21
T003 300.00 1 TOM 21
N002 100.00 2 MIKE 24
N003 500.00 3 JACK 30
T001 300.00 4 TOM 25
<NULL> <NULL> <NULL> LINDA <NULL>
T002 100.00 <NULL> <NULL> <NULL>

可以看到前6条记录都是符合连接条件的,而T_Customer表中姓名为LINDA的客户没有对应的订单,但是仍然被放到了结果集中,其无法匹配的字段填充的都是NULL,同样订单号为T002的订单没有匹配任何一个客户,但是仍然被放到了结果集中。

虽然在MYSQL中不支持全外部连接,不过由于全外部连接是左外部连接和右外部连接的合集,所以可以使用左外部连接和右外部连接来模拟实现全外部连接:使用左外部连接和右外部连接分别进行匹配查询,然后使用UNION运算符来取两个查询结果集的合集。比如可以在MYSQL中执行下面的SQL来实现T_Order表和T_Customer表的全外部连接:

SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,
c.FAge FROM T_Order o LEFT OUTER JOIN T_Customer c ON o.FCustomerId=c.FId
UNION
SELECT o.FNumber,o.FPrice,o.FCustomerId,c.FName,
c.FAge FROM T_Order o RIGHT OUTER JOIN T_Customer c ON o.FCustomerId=c.FId

执行结果:

FNUMBER FPRICE FCUSTOMERID FNAME FAGE
K001 100.00 1 TOM 21
K002 200.00 1 TOM 21
T003 300.00 1 TOM 21
N002 100.00 2 MIKE 24
T001 300.00 4 TOM 25
N003 500.00 3 JACK 30
<NULL> <NULL> <NULL> LINDA <NULL>
T002 100.00 <NULL> <NULL> <NULL>

可以看到和全外部连接的执行结果是完全一致的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

媛媛要加油呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值