美文网首页
SQL JOIN 操作总结

SQL JOIN 操作总结

作者: youthcity | 来源:发表于2018-08-01 00:02 被阅读38次

    前言

    SQL中,JOIN 操作用于将多个表连接起来。我们工作中,常用的join方式有 INNER JOINLEFT JOIN。虽然 JOIN的方式有如下图所示的7种,实际上其实可以分为3种,分别是 INNER JOINLEFT JOINFULL OUTER JOIN,其余4种都是前三种的变种。

    SQL JOINS

    1)LEFT JOIN

    LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

    SQL

    SELECT column_name(s)
    FROM table1
    LEFT JOIN table2
    WHERE table1.column_name = table2.column_name
    

    SELECT column_name(s)
    FROM table1
    LEFT OUTER JOIN table2
    WHERE table1.column_name = table2.column_name
    
    LEFT JOIN 图示

    2)INNER JOIN

    INNER JOIN 关键字在表中存在至少一个匹配时返回行。

    SQL

    SELECT column_name(s)
    FROM table1
    INNER JOIN table2
    ON table1.column_name=table2.column_name;
    
    INNER JOIN

    3)FULL OUTER JOIN (FULL JOIN) (MySQL 不支持)

    FULL OUTER JOIN 结合了 LEFT JOINRIGHT JOIN的结果。

    SQL

    SELECT column_name(s)
    FROM table1
    FULL OUTER JOIN table2
    ON table1.column_name=table2.column_name;
    
    FULL OUTER JOIN

    4) FULL OUTER JOIN BUT a.Key is null or b.Key is null

    SELECT * FROM table_a
    FULL OUTER JOIN table_b
    on table_a.column_name = table_b.column_name
    where table_a.column_name is null or table_b.column_name is null
    
    FULL OUTER JOIN BUT a.key is null or b.key is null

    5) LEFT JOIN BUT b.key is null

    SELECT * from table_a
    LEFT OUTER JOIN table_b
    on table_a.column_name= table_b.column_name
    where table_b.column_name is null
    
    LEFT JOIN BUT b.key is null

    6)RIGHT JOIN

    SELECT * FROM table_a
    RIGHT JOIN table_b
    ON table_a.column_name = table_b.column_name
    
    image.png

    7)RIGHT JOIN BUT a.key is null

    SELECT * FROM table_a
    RIGHT JOIN table_b
    ON table_a.column_name = table_b.column_name
    WHERE table_a.column_name is null
    

    总结

    在平时的实践中,使用最多的还是 inner joinleft joinleft joinright join可以看作为同一类型的join操作。好比,乘数与被乘数。也就是说,我们完全可以使用 left join 替代 right join。在我们公司NodeJS项目中,使用到了一个ORMTypeORM),这库就只提供left join

    关于joinwhere语句 与 ON 语句,我们常常困惑将什么条件放到 where 合适 还是放到 on 中合适。当为 inner join时,放在 whereON 中,查询结果都一样。当为 outer(left、right) join 时,放在 whereON 就有区别。当需要对交际做筛选时放在 where 中,当需要对单张表做筛选然后进行 join操作时,放在 ON 中。

    参考资料

    相关文章

      网友评论

          本文标题:SQL JOIN 操作总结

          本文链接:https://www.haomeiwen.com/subject/ntekvftx.html