[498]left join、inner join、right join的区别
发布日期:2021-05-16 09:28:46 浏览次数:17 分类:精选文章

本文共 1615 字,大约阅读时间需要 5 分钟。

SQL 左联接、右联接与内联接的区别

在SQL中,左联接(Left Join)、右联接(Right Join)和内联接(Inner Join)是常用的三种join操作方式。以下是它们的主要区别及使用场景。

1. 左联接(Left Join)

  • 特点:左联接会返回左表中的所有记录,与右表中有交集的部分。
  • 结果:结果集包含左表的所有记录,只有当右表中存在与左表匹配的值时,才会返回对应的右表记录。
  • 用途:当你希望保留左表所有数据时,左联接是适合的选择。

2. 右联接(Right Join)

  • 特点:右联接会返回右表中的所有记录,与左表中有交集的部分。
  • 结果:结果集包含右表的所有记录,只有当左表中存在与右表匹配的值时,才会返回对应的左表记录。
  • 用途:当你希望保留右表所有数据时,右联接是你的最佳选择。

3. 内联接(Inner Join)

  • 特点:内联接仅返回两个表中同时满足联结条件的记录。
  • 结果:只包含两个表中有交集的那些行。
  • 用途:当你需要同时满足两个表的条件时,内联接是一个有效的选择。

4. 示例说明

假设有如下两个表:t_usert_class,字段为t_user.UserIDt_class.id相互匹配。

  • 左联接

    SELECT u.UserID, u.UserName, c.id, c.name  
    FROM t_user u
    LEFT JOIN t_class c
    ON c.id = u.UserID

    Running结果:包含左表全部信息(即所有用户记录),并与右表匹配的部分连接。

  • 右联接

    SELECT u.UserID, u.UserName, c.id, c.name  
    FROM t_user u
    RIGHT JOIN t_class c
    ON c.id = u.UserID

    Running结果:包含右表全部信息(即所有班级记录),并与左表匹配的部分连接。

  • 内联接

    SELECT u.UserID, u.UserName, c.id, c.name  
    FROM t_user u
    INNER JOIN t_class c
    ON c.id = u.UserID

    Running结果:仅包含两个表中有交集的记录,即既存在于左表又存在于右表的用户-班级对应关系。

5. 虚拟表的更新应用

在实际操作中,构建虚拟表以实现更新时需要特别注意:

UPDATE dmdc.bond_issuser_rela_detail c  
INNER JOIN (SELECT DISTINCT a.com_uni_code, a.com_chi_name, b.com_uni_code as code2, b.com_chi_name as name2
FROM dmdc.bond_issuser_rela_detail a
LEFT JOIN dmdc.t_com_info b
ON a.com_chi_name = b.com_chi_name
WHERE a.com_uni_code IS NULL AND b.com_uni_code IS NOT NULL
ORDER BY b.com_uni_code) d
ON d.com_chi_name = c.com_chi_name
SET c.com_uni_code = d.code2

这一操作通过联接构建虚拟表,并在虚拟表的基础上执行更新操作,确保更新语句独立且安全。

6. 注意事项

  • 虚拟表依赖性:在使用内联接构建虚拟表时,子查询的结果不会直接影响原表数据,确保操作的安全性。
  • 性能考虑:大规模数据处理时,避免不必要的联接操作,以防性能下降。
  • 表结构选择:确保联接的字段在两个表中具有相同的数据类型和约束条件,以防SQL错误。

通过理清以上概念和应用场景,你可以更高效地使用SQL进行数据操作,充分发挥数据库性能。

上一篇:[499]openstack swift 的UI客户端
下一篇:[497]python使用magic模块进行文件类型识别

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月28日 08时25分33秒