内连接、左右连接和全连接的区别

博客以两个单列表为例,介绍了SQL中的表连接方式。包括内连接,是A表与B表行相交的结果集;左外连接,是A表所有行匹配B表的结果集;右外连接,是B表所有行匹配A表的结果集;全连接,是A表与B表行相并的结果集。

举例说明

  • 假设您有两个表,每个表只有一个列,表数据如下
    A    B
    -    -
    1    3
    2    4
    3    5
    4    6
    

    注意,(1,2)是A表唯一的,(3,4)是公共的,并且(5,6)是B表独有的

    内连接

    内连接是A表的所有行交上B表的所有行得出的结果集

    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
    

    左外连接

    左外连接是A表的所有行匹配上B表得出的结果集

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

右外连接

右外连接是B表的所有行匹配上A表得出的结果集

select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a(+) = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

全连接

全连接是A表的所有行并上B表的所有行得出的结果集

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

 

### 数据库连接类型的区别 在数据库查询中,不同的连接类型用于将多个表的数据组合在一起。以下是左连接、右连接全连接内连接的详细区别: #### 1. 内连接(Inner Join) 内连接返回两个表中满足连接条件的所有行。只有当两个表中的数据匹配时,结果才会被返回。换句话说,它只返回交集部分的数据[^2]。 ```sql SELECT a.column1, b.column2 FROM table1 a INNER JOIN table2 b ON a.id = b.id; ``` #### 2. 左连接(Left Join 或 Left Outer Join) 左连接返回左表中的所有记录以及右表中与之匹配的记录。如果右表中没有匹配的记录,则返回 NULL 值。它确保左表中的所有数据都会出现在结果集中[^3]。 ```sql SELECT a.column1, b.column2 FROM table1 a LEFT JOIN table2 b ON a.id = b.id; ``` #### 3. 右连接(Right Join 或 Right Outer Join) 右连接返回右表中的所有记录以及左表中与之匹配的记录。如果左表中没有匹配的记录,则返回 NULL 值。它确保右表中的所有数据都会出现在结果集中[^3]。 ```sql SELECT a.column1, b.column2 FROM table1 a RIGHT JOIN table2 b ON a.id = b.id; ``` #### 4. 全连接(Full Join 或 Full Outer Join) 全连接返回左表右表中的所有记录。如果某一行在另一个表中没有匹配的记录,则用 NULL 填充。它是左连接连接的结合,返回两个表的并集[^3]。 ```sql SELECT a.column1, b.column2 FROM table1 a FULL JOIN table2 b ON a.id = b.id; ``` ### 总结 - **内连接**:返回两个表中匹配的数据。 - **左连接**:返回左表的所有数据,以及右表中匹配的数据;若无匹配,则为 NULL。 - **右连接**:返回右表的所有数据,以及左表中匹配的数据;若无匹配,则为 NULL。 - **全连接**:返回两个表的所有数据,无论是否匹配。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值