SQL中的inner join、left join和right join的区别(补充union/union all)

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

用两个简单的例子来体现一下三者的运行结果:(左边是category表,右边是news表)

 首先:inner join

select * from category c inner join  news n on c.id=n.id

通过运行结果可以看出来,显示出了  c.id=n.id的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

然后是:left join

select * from category c left join  news n on c.id=n.id

 通过运行结果可以看出:left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为:  c.id=n.id)B表记录不足的地方均为NULL.

最后是right join

select * from category c right join  news n on n.id=c.id

其实和left join差不多,只不过此链接是以右表为准的。和left join的结果刚好相反,A表不足的地方用NULL填充. 

如下更清晰一点:执行此语句

select * from category c right join  news n on n.id=7

补充:union和union all的区别

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 

UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。UNION 只选取记录,而UNION ALL会列出所有记录。

也就是union会有一个去重的操作,如果查询的id不会重复的话,考虑用union all效率会高一点

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值