数据库查询中left join,right join 和inner join的区别

在这里插入图片描述
先上图,虽然图中所示有7种情况,但仔细分析后能得到所有的结果其实只有left,right和inner三种情况。
最直白的区别,就是:

  1. left join 只保留左表记录的数据,而且是全部保留
  2. right join 同理,只保留右表记录数据
  3. inner join,只保留双方都记录的数据
    full join就是保留全部数据并将其呈现在一张表中。这中间可能会出现null值。
    反映到图中,就是1和2是一种情况,3是一种情况,4和5是一种情况,6和7又是一种情况。
    联结联结,也就是必须有相同的字段名和记录才能联结的起来。
    1和2 就是添加了一个筛选条件,选中A中没有B的部分,也就是B.key = NULL;
    4和5同理
    6和7就是 full join返回两表全部的结果,如果有的行数据没有联结字段的数据,则会显示null。即A和B的交集中的所有行的数据选出来都是完整的,反之,在剩下集合中的行的数据一定有null值。
    而7在这个基础上添加条件 A.key is null代表联结字段是null,也就是无法联结,那么就是剩下集合。
    注意,这里的key代表的是联结字段,不代表主键,注意理解别混淆。
    (因为只要联结字段不为null,那么一定可以通过这个联结字段去另一张表中获取对应数据)

现在回过来理解left,right和inner也就比较好理解了。

  • left代表左表中无论联结字段key是否为null,都保留下来
  • right代表右表中无论联结字段key是否为null,都保留下来
  • inner表示联结字段必须有值,即非null才可以保留
当使用左连接(left join)时,如果右表没有与左表匹配的数据,那么会将左表的数据保留,并在右表的所有列上填充 NULL 值。这种情况可能有多种原因导致右表无数据的情况,以下是一些可能的原因和解决方法: 1. 数据不存在:右表可能确实没有与左表匹配的数据。这可能是因为数据录入错误、筛选条件不正确或者数据本身不完整导致的。您可以检查右表的数据,确保没有任何问题。 2. 连接条件不正确:左连接需要指定连接条件,确保左表和右表的列可以正确地匹配。如果连接条件不正确,可能导致右表无法与左表匹配。请仔细检查连接条件是否正确,并根据需要进行更正。 3. 索引或键错误:如果右表的列没有索引或键,或者索引/键的值与左表不匹配,可能导致无法正确地进行连接。请确保右表的列有适当的索引或键,并且与左表的列匹配。 4. 数据类型不匹配:左连接需要左表和右表的连接列具有相同的数据类型。如果左表和右表的连接列类型不匹配,会导致连接失败。请检查连接列的数据类型,并确保它们匹配。 5. 数据库权限限制:某些情况下,数据库用户可能没有访问或操作右表的权限,这可能导致左连接时无法获得右表的数据。请检查数据库用户的权限,并确保具有正确的权限。 如果您能提供更多的细节和上下文,我可以给出更具体的建议和解决方案。另外,如果您还有其他相关问题,请随时提问。 相关问题: 1. 如何在 SQL 执行左连接(left join)操作? 2. 左连接和内连接(inner join)有何区别? 3. 什么是索引和键,它们在数据库连接的作用是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值