mysql 中的左连接,右链接和内连接

左连接,右链接和内连接

在自己做项目的过程中,遇到了相关的数据库的查询的问题,在这里做一下简短的记录和总结
其中左连接和右链接属于外连接:
左连接: left (outer) join
右链接: right (outer) join
外连接的特点是:查询出来结果存在不满足条件的可能

左连接

左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL

select * from Menu1 m1 left join Menu2 m2 on m1.id = m2.id;

右连接

右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。

select * from Menu1 m1 right join Menu2 m2 on m1.id = m2.id;

在这里插入图片描述

内连接

查询结果必须满足条件,返回同时满足两个表的部分

select * from Menu1 m1 inner join Menu2 m2 on m1.id = m2.id;

在这里插入图片描述

举个栗子

已知员工的rid,通过rid去表hr_role中去查询hrid,通过查询到的hrid去表menu_role中去查询mid,最后通过mid查询menu表中的符合条件的项,并且通过parentId和其父级条目平成一个项
在这里插入图片描述
目前的有两种想法:
(1)通过右连接 加 子查询:

select * from menu as m1 
inner join 
(select id id2, component component2,  name name2, iconCls iconCls2, keepAlive keepAlive2, requireAuth requireAuth2, parentId parentId2, Enabled enabled2, path path2 from menu where menu.id in 
(select mid from menu_role where menu_role.rid in 
(select rid from hr_role where hr_role.hrid = 10))) 
as m2 
on m1.id = m2.parentId2 ;

(2)通过笛卡尔积的方式,再加上需要的条件:

select distinct m1.*,m2.`id` as id2,m2.`component` as component2,m2.`enabled` as enabled2,m2.`iconCls` as iconCls2,m2.`keepAlive` as keepAlive2,m2.`name` as name2,m2.`parentId` as parentId2,m2.`requireAuth` as requireAuth2,m2.`path` as path2 
from menu m1,menu m2,hr_role hrr,menu_role mr 
where m1.`id`=m2.`parentId` and hrr.`hrid`= 10 and hrr.`rid`=mr.`rid` and mr.`mid`=m2.`id` and m2.`enabled`=true 
order by m1.`id`,m2.`id`
补充

笛卡尔积:没有连接条件的表关系返回的结果是笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值