SQL的left join、right join说明,以及on和where的区别

就一段SQL查询代码展开

select * from product right join
 (select product_id from product_color where color_id=1) as product_color
on
product.id = product_color.product_id

一、数据表如下

product表
idproduct_name
1A
2B
3C
4D
5E
color表
idcolor
1red
2green
3white
4block
7yellow
product_color表
idproduct_idcolor_id
113
234
321
442
531

二、执行结果如下

idproduct_nameproduct_id
2B2
3C3

三、 right join、left join的说明

  • left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
  • right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
  • inner join(等值连接) 只返回两个表中联结字段相等的行
1、right join列子

对于上诉的color表和product表:

select * from color
right join product 
on color.id = product.id
结果
(color)idcolor(product)idproduct_name
1red1A
2green2B
3white3C
4black4D
nullnull5E
left join列子
select * from color
left join product 
on color.id = product.id
结果
(color)idcolor(product)idproduct_name
1red1A
2green2B
3white3C
4black4D
7yellownullnull
inner join列子
select * from color
inner join product 
on color.id = product.id
结果
(color)idcolor(product)idproduct_name
1red1A
2green2B
3white3C
4black4D

四、on、where

1、说明
  • 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
  • 在使用left jion时,on和where条件的区别如下:
    1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
    3、on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后。有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的。但因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的。
    2、列子
执行:
select * from product right join
 (select product_id from product_color where color_id=1) as product_color
on
product.id = product_color.product_id
WHERE product_name='B'
结果
idproduct_nameproduct_id
2B2
将上述的SQL中,where换成and查询结果
idproduct_nameproduct_id
2B2
nullnull3

五、以上部分说明源自其他博客。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值