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

本文主要介绍了MySQL中的左连接、右连接和内连接。左连接以左表为主,显示所有记录,不匹配的显示为NULL。右连接则以右表为主,反之。内连接只返回满足条件的联合记录。并通过一个实际例子说明了如何使用这些连接类型进行查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

左连接,右链接和内连接

在自己做项目的过程中,遇到了相关的数据库的查询的问题,在这里做一下简短的记录和总结
其中左连接和右链接属于外连接:
左连接: 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`
补充

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值