sql之inner join、left join、right join、full join的区别

1、join(内连接):用于两个或多个表中的列之间的关系,只返回表中联结字段相等的行

selec * from table1 t1,table2 t2 ,table3 t3… 

where  t1.id=t2.id=t3.id


2、inner join(内连接) :INNER JOIN 与 JOIN 是相同的

selec * from table1 t1 

inner join table2  t2  

on 条件 and 条件


3、left join(左连接) :从左表(t1)那里返回所有的行,即使在右表(t2)中没有匹配的行,右表中不存在的均为null

select * from table1 t1

left join table2 t2  on  条件  and 条件

left join table3 t3  on 条件  and 条件


4、right join(右连接): 从右表(t2)那里返回所有的行,即使在左表(t1)中没有匹配的行左表中不存在的均为null

select * from table1 t1

right join table2 t2  

on条件 and 条件


5、full join(全连接):只要关联的表中关键字存在值,就会返回行

select * from table1 t1

full join table2 t2  

on 条件 and 条件


----------------------举例如下------------------------------------------------------------------------------------------------------------------------

表:Persons                                                          

Id_P Name phone Address
1 张三 18059861111 厦门思明
2 李四 18059862222 深圳南山
3 王二 18059863333 广州佛山

表:Orders
Id_O OrderNo Id_P
1 OR2017120501 1
2 OR2017120502 1
3 OR2017120503 3
4 OR2017120504 3
5 OR2017120505 10

1.join 实例如下:

select * from Persons p,Orders o where p.id_P= o.id_P

结果如下:

Id_P Name phone Address Id_O OrderNo Id_P
1 张三 18059861111 厦门思明 1 OR2017120501 1
1 张三 18059861111 厦门思明 2 OR2017120502 1
3 王二 18059863333 广州佛山 3 OR2017120503 3
3 王二 18059863333 广州佛山 4 OR2017120504 3


2. inner join 实例如下:
select * from Persons p inner join Orders o  on  p.id_P= o.id_P

结果如下:

d_P Name phone Address Id_O OrderNo Id_P
1 张三 18059861111 厦门思明 1 OR2017120501 1
1 张三 18059861111 厦门思明 2 OR2017120502 1
3 王二 18059863333 广州佛山 3 OR2017120503 3
3 王二 18059863333 广州佛山 4 OR2017120504 3

3.left join实例如下:

select * from Persons p left join Orders o  on  p.id_P= o.id_P

结果如下:

Id_P Name phone Address Id_O OrderNo Id_P
1 张三 18059861111 厦门思明 1 OR2017120501 1
1 张三 18059861111 厦门思明 2 OR2017120502 1
2 李四 18059862222 深圳南山 null null null
3 王二 18059863333 广州佛山 3 OR2017120503 3
3 王二 18059863333 广州佛山 4 OR2017120504 3

4.right join实例如下:

select * from Persons p right join Orders o  on  p.id_P= o.id_P

结果如下:

Id_P Name phone Address Id_O OrderNo Id_P
1 张三 18059861111 厦门思明 1 OR2017120501 1
1 张三 18059861111 厦门思明 2 OR2017120502 1
3 王二 18059863333 广州佛山 3 OR2017120503 3
3 王二 18059863333 广州佛山 4 OR2017120504 3
null null null null 5 OR2017120505 10

5.full join实例如下:

select * from Persons p full join Orders o  on  p.id_P= o.id_P

结果如下:

Id_P Name phone Address Id_O OrderNo Id_P
1 张三 18059861111 厦门思明 1 OR2017120501 1
1 张三 18059861111 厦门思明 2 OR2017120502 1
2 李四 18059862222 深圳南山 null null null
3 王二 18059863333 广州佛山 3 OR2017120503 3
3 王二 18059863333 广州佛山 4 OR2017120504 3
null null null null 5 OR2017120505 10

----------------------举例如下------------------------------------------------------------------------------------------------------------------------



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值