用外连接来组合表

    xiaoxiao2021-12-14  20

    2016.12.2

    十二.用外连接来组合表

    内连接的主要限制是要显示任何结果的话,都要在所有的连接的表中有相应的匹配。SQL中把内连接作为默认连接,所以可以只是用JOIN来指定一个内连接,而不是一定要用INNER JOIN

    与内连接不同,外连接有3种类型:左连接(LEFT OUTER JOIN),右连接(RIGHT OUTER JOIN)和全连接(FULL OUTER JOIN)。可以直接表示为:LEFT JOINRIGHT JOINFULL JOIN

    12.1 左连接

    SELECT

    table1.columnlist

    Table2.columnlist

    Table3.columnlist

    FROM table1

    LEFT JOIN table2

    ON table1.column1=table2.column2

    LEFT JOIN table3

    ON table2.column2=table3.column3

    ORDER BY table1.columnlist,table2.columnlist

    对于关键字LEFT JOIN来说,表排列的顺序是非常重要的,当指定一个LEFT JOIN时,LEFT JOIN左边的表一定是主表,LEFT JOIN右边的是从表。当连接主从表时,我们需要主表的所有行,即使从表中没有行与之匹配。

    12.2 WHERE一起使用判断NULL

    SELECT

    table1.columnlist

    Table2.columnlist

    Table3.columnlist

    FROM table1

    LEFT JOIN table2

    ON table1.column1=table2.column2

    LEFT JOIN table3

    ON table2.column2=table3.column3

    WHERE conditionlist

    ORDER BY table1.columnlist,table2.columnlist

    12.3 右连接

    右连接与左连接的不同在于列出两个表的顺序不同。右连接中,主表出现在RIGHT JOIN的右边,从表出现在RIGHT JOIN的左边,

    SELECT

    table1.columnlist

    Table2.columnlist

    Table3.columnlist

    FROM table3

    RIGHT JOIN table2

    ON table3.column2=table2.column2

    RIGHT JOIN table1

    ON table2.column1=table1.column1

    ORDER BY table1.columnlist,table2.columnlist

    RIGHT JOIN前后列出表的顺序至关重要,但是ON后面列出的列的顺序则并不重要。建议使用左连接,人的直觉上,先列出的表更重要。

    12.4 全连接(MySql中没有)

    在内连接中,两个表都是主表,当匹配两个表时,对于选中的行数据,在两个表中必须有一个匹配。在左连接或者右连接中,一个主表,一个从表(可选)。

    在全连接中,两个表都是从表,如果表A和表B进行全连接,则会显示:

    (1)A 的所有行,即使它在表B中没有匹配的行

    (2)B的所有行,即使它在表A中没有匹配的行

    SELECT

    table1.columnlist

    Table2.columnlist

    FROM table1

    FULL JOIN table2

    ON table1.column1=table2.column1

    ORDER BY table1.columnlist,table2.columnlist

    全连接显示了两个表之间双向都没有匹配的数据,这中表之间的关系很少见,所以,全连接很少用到。

     

    转载请注明原文地址: https://ju.6miu.com/read-962808.html

    最新回复(0)