图说SQL Join

作者: 华恒Ryan | 来源:发表于2017-04-22 23:28 被阅读120次

    原文:图说SQL Join

    如果你也曾经被SQL语言中各种Join操作:Left Join, Right Join, Inner Join等搞晕了头,那么这篇文章比较适合你。本文通过维恩图演示各种Join语句的执行效果,简单直白容易记忆。
    假如有两张表 Table ATable B, 表数据如下:
    Table A:

    id name
    1 Pirate
    2 Monkey
    3 Ninja
    4 Spaghetti

    Table B:

    id name
    1 Rutabaga
    2 Pirate
    3 Darth Vader
    4 Ninja

    下面我们来看看各种Join的执行效果

    1. INNER JOIN

    Inner Join会根据Join的On条件拿左表(Table A)的行与右表(Table B)的行进行匹配, 只有当左右表中 至少同时 存在一条匹配数据时才返回到结果集. 也就是说Inner Join求的是两个表之间的交集.

    SELECT * FROM TableA
    INNER JOIN TableB
    ON TableA.name = TableB.name
    

    结果集:

    id name id name
    1 Pirate 2 Pirate
    2 Ninja 4 Ninja

    2. Full JOIN

    在某些数据库中, FULL JOIN被称之为FULL OUTER JOIN (注意: MySQL不支持带ON条件的FULL JOIN, 也不支持FULL OUTER JOIN关键字). FULL OUTER JOIN关键字会从左表(Table A)和右表(Table B)中返回所有符合条件的行, 如果Table A中的行在Table B中没有匹配或者Table B中的行在Table A中没有匹配, 则相关列返回NULL.

    SELECT * FROM TableA
    FULL OUTER JOIN TableB
    ON TableA.name = TableB.name
    

    结果集:

    id name id name
    1 Pirate 2 Pirate
    2 Monkey null null
    3 Ninja 4 Ninja
    4 Spaghetti null null
    null null 1 Rutabaga
    null null 3 Darth Vader

    另外一个例子:

    SELECT * FROM TableA
    FULL OUTER JOIN TableB
    ON TableA.name = TableB.name
    WHERE TableA.id IS null
    OR TableB.id IS null
    

    结果集:

    id name id name
    2 Monkey null null
    4 Spaghetti null null
    null null 1 Rutabaga
    null null 3 Darth Vader

    3. LEFT JOIN

    LEFT JOIN在某些数据库中称之为LEFT OUTER JOIN. 该关键字会从左表中返回所有符合条件的行, 并且如果右表有匹配的行则一并返回, 如果右表中没找到匹配的行, 则与右表相关的结果列返回NULL

    SELECT * FROM TableA
    LEFT OUTER JOIN TableB
    ON TableA.name = TableB.name
    

    结果集:

    id name id name
    1 Pirate 2 Pirate
    2 Monkey null null
    3 Ninja 4 Ninja
    4 Spaghetti null null

    另外一个例子:

    SELECT * FROM TableA
    LEFT OUTER JOIN TableB
    ON TableA.name = TableB.name
    WHERE TableB.id IS null
    

    结果集:

    id name id name
    2 Monkey null null
    4 Spaghetti null null

    4. RIGHT JOIN

    RIGHT JOIN在某些数据库中称之为RIGHT OUTER JOIN, 与LEFT JOIN相反, 该关键字返回右表中所有符合条件的行, 并且如果左表有匹配的行则一并返回, 如果左表没找到匹配的行, 则与左表相关的结果列返回NULL。
    由于RIGHT JOIN的原理与LEFT JOIN大致相同, 这里就不再赘述。

    参考文章

    相关文章

      网友评论

      • 知识学者:内连接, 外连接(全连接 。左连接,右连接)
        :flushed: 这是 sql serve吧。

        应该还有 across join,笛卡尔集的概念这篇文章 就完美了。
        华恒Ryan:@东风冷雪 内外连接是SQL语言层面的概念,不涉及到具体某一厂商的数据库,当然不同厂商对语言的支持程度以及实现程度有所差别

      本文标题:图说SQL Join

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