mysql的各种连接查询

(left join, right join, inner join, cross join)

  • 声明:

1.左连接 left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种,两种写法的效果一样。

2.右连接 right join是right outer join的简写,它的全称是右外连接,是外连接中的一种,两种写法的效果一样。

3.mysql不支持全外链接 FULL OUTER JOIN,Oracle支持FULL OUTER JOIN全外链接。

  • 左连接left join

left join是以左表为基础,左表(l_table)的记录将会全部表示出来,而右表(r_table)只会显示符合搜索条件的记录,右表记录不足的地方均为NULL。

 select * from l_table a
    left join r_table b on a.aID = b.bID 
  • 右连接right join

right join和left join的结果刚好相反,这次是以右表(r_table)为基础的,左表不足的地方用NULL填充。

select * from l_table a
    right join r_table b on a.aID = b.bID 
  • 内连接inner join

inner join只显示符合条件的数据,并不以哪个表为基础。

select * from l_table a
    inner join r_table b on a.aID = b.bID 

 等价于
    
select * from l_table a, r_table b 
    where a.aID = b.bID 
  • 交叉连接cross join

交叉连接生成笛卡尔积(纯关系代数的乘运算),它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配。比如l_table有3条记录,r_table表中有7条记录,则cross join会产生21条数据。交叉连接中没有on条件子句。

select * from l_table a
    cross join r_table b
  • mysql如何实现全外连接full outer join        

包含两个数据集合中的全部行,不管另外一边的表中是否存在与它们匹配的行。

相当于将两个数据集合分别进行左外连接和右外连接,然后再使用并操作将上述两个结果集合并为一个结果集(消去重复行)。

根据功能上的描述,虽然mysql不支持全外连接,但我们可以使用“左外 UNION 右外”来实现全外连接。

select * from l_table a
    left join r_table b on a.aID = b.bID 
    union 
    select * from l_table a
    right join r_table b on a.aID = b.bID 


    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值