SQL的多表联查

这里我先附上两张表的数据:

Orders 表:

OrderIDCustomerID
13
21
32
4NULL

Customers 表:

CustomerIDCustomerName
1Alice
2Bob
3Charlie
4David

INNER JOIN 🤝

概念: INNER JOIN(内连接)返回两个表中匹配的记录。如果某条记录在其中一个表中没有匹配项,那么它就不会出现在结果集中。

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

结果:

OrderIDCustomerName
1Charlie
2Alice
3Bob

解释: 只显示了在两个表中都存在的匹配记录。订单4因为CustomerID为NULL,在Customers表中没有匹配,所以不显示。

LEFT JOIN 👈

概念: LEFT JOIN(左连接)返回左表(LEFT JOIN关键字左边的表)的所有记录,即使在右表中没有匹配。如果右表中没有匹配,则结果为NULL。

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

结果:

OrderIDCustomerName
1Charlie
2Alice
3Bob
4NULL

 解释: 显示了Orders表中的所有记录,对于CustomerID为NULL的订单4,CustomerName为NULL,因为没有匹配的顾客信息。

RIGHT JOIN 示例 👉

概念: RIGHT JOIN(右连接)与LEFT JOIN相反,它返回右表(RIGHT JOIN关键字右边的表)的所有记录,即使左表中没有匹配。如果左表中没有匹配,则结果为NULL。

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

结果:

OrderIDCustomerName
1Charlie
2Alice
3Bob
NULLDavid

 解释: 显示了Customers表中的所有记录,对于顾客David,因为没有对应的订单(OrderID为NULL),依然会被列出

FULL JOIN 示例 ↔️ (以支持的数据库为例)

由于不是所有数据库都直接支持FULL JOIN,这里提供一个概念上的说明和一个可能的解决方案(比如在MySQL中使用UNION)。

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
FULL JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

概念上的结果:

OrderIDCustomerName
1Charlie
2Alice
3Bob
4NULL
NULLDavid

解释: 显示了OrdersCustomers表中的所有记录,两边没有匹配的部分用NULL填充。

总结:

  • INNER JOIN:匹配两边的记录,无匹配则不显示。
  • LEFT JOIN:以左表为主,左表所有记录均显示,右表无匹配则NULL。
  • RIGHT JOIN:以右表为主,右表所有记录均显示,左表无匹配则NULL。
  • FULL JOIN:展示两边所有记录,任一边无匹配则对应侧为NULL。
  • 22
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值