inner join和outer join的区别

   假设你要join两个没有重复列的表,这是最常见的情况:

  • inner join  A 和 B 获得的是A和B的交集(intersect),即韦恩图(venn diagram) 相交的部分.

  • outer join A和B获得的是A和B的并集(union), 即韦恩图(venn diagram)的所有部分.

    示例

    假定有两张表,每张表只有一列,列数据如下:

    A    B
    -    -
    1    3
    2    4
    3    5
    4    6

    注意(1,2)是A表独有的,(3,4) 两张共有, (5,6)是B独有的。

    Inner join

    使用等号进行inner join以获得两表的交集,即共有的行。

    select * from a INNER JOIN b on a.a = b.b;
    select a.*,b.*  from a,b where a.a = b.b;
    
    a | b
    --+--
    3 | 3
    4 | 4
    

    Left outer join

     left outer join 除了获得B表中符合条件的列外,还将获得A表所有的列。

    select * from a LEFT OUTER JOIN b on a.a = b.b;
    select a.*,b.*  from a,b where a.a = b.b(+);
    
    a |  b  
    --+-----
    1 | null
    2 | null
    3 |    3
    4 |    4
    

    Full outer join

    full outer join 得到A和B的交集,即A和B中所有的行.。如果A中的行在B中没有对应的部分,B的部分将是 null, 反之亦然。

    select * from a FULL OUTER JOIN b on a.a = b.b;
    
     a   |  b  
    -----+-----
       1 | null
       2 | null
       3 |    3
       4 |    4
    null |    6
    null |    5
inner join和outer joinSQL中用于联合查询的两种不同方式。 inner join是通过匹配两个表之间的共同值来返回结果集。它只返回两个表中共有的行,即只返回满足连接条件的行。如果某个表中的行没有匹配的行,则不会包含在结果集中。 outer join是通过匹配两个表之间的共同值来返回结果集,并且还包括没有匹配的行。它分为left outer join和right outer join两种类型。 - left outer join返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,则返回NULL值。 - right outer join返回右表中的所有行,以及左表中与右表匹配的行。如果左表中没有匹配的行,则返回NULL值。 综上所述,inner join只返回两个表中共有的行,而outer join则返回两个表中所有的行,包括没有匹配的行。 范例:<<引用:SELECT * FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;[^1]。引用:SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column_name = table2.column_name;[^2]。引用:SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.column_name = table2.column_name;[^3]。 以下是两个示例查询语句: 1.使用inner join进行联合查询 ```sql SELECT * FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; ``` 2.使用left outer join进行联合查询[^2] ```sql SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column_name = table2.column_name; ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值