mysql 笔记13 ---联表查询

7种join理论

实际操作
select a.*,b.name as rolename from `users` a left JOIN `roles` b on  b.id=a.role_id

查询用户拥有的权限
select * from role_node as a LEFT JOIN `nodes` as b on a.node_id=b.id WHERE a.role_id=(select role_id FROM `users` where `id`=4)
或者
select c.name from `users` a left JOIN `role_node` b on a.role_id=b.role_id LEFT JOIN `nodes` as c on b.node_id=c.id WHERE a.id=4 ;

 在实际开发中

 最常用的就是left join

其次right join、inner join

七种join理论。

内连接(两表的共有部分)
SELECT * FROM tbl_dep d INNER JOIN tbl_emp e ON d.id=e.deptId;

左连接(左表的全部,右表不满足补NULL)
SELECT * FROM tbl_dep d LEFT JOIN tbl_emp e ON d.id=e.deptId;

右连接(右表的全部,左表不满足的补NULL)
SELECT * FROM tbl_dep d RIGHT JOIN tbl_emp e ON d.id=e.deptId;

特殊的左连接,(显示为左表的独有的数据)
说明:查询tbl_dep 表中跟tbl_emp 表无关联关系的数据,即tbl_dep 独占,且tbl_emp 表的显示列补NULL;
SELECT * FROM tbl_dep d LEFT JOIN tbl_emp e ON d.id=e.deptId WHERE e.deptId IS NULL;

特殊的右连接(显示为右表的独有的数据 )
说明:查询tbl_emp 表中跟tbl_dep 表无关联关系的数据,即tbl_emp 独占,且tbl_dep 表的显示列补NULL;
SELECT * FROM tbl_dep d RIGHT JOIN tbl_emp e ON d.id=e.deptId WHERE d.id IS NULL;

全连接(显示全部数据)(mysql 不支持 full outer join)
UNION :有去重的功能。
SELECT * FROM tbl_dep d LEFT JOIN tbl_emp e ON d.id=e.deptId UNION
SELECT * FROM tbl_dep d RIGHT JOIN tbl_emp e ON d.id=e.deptId;

显示两表的独有的数据
SELECT * FROM tbl_dep d LEFT JOIN tbl_emp e ON d.id=e.deptId WHERE e.deptId IS NULL UNION
SELECT * FROM tbl_dep d RIGHT JOIN tbl_emp e ON d.id=e.deptId WHERE d.id IS NULL;


了解即可

左外连接:得到的结果,显示所有公共部分数据,显示所有左表数据,左表没有的用null补充

跟左连接一样

select * from dept left outer join emp on dept.id=emp.dept_id

同理右外连接也一样推


在 SQL 的 JOIN 语句中,通常可以这样理解:

  • JOIN 关键字左边的表是左表(Left Table)。
  • JOIN 关键字右边的表是右表(Right Table)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值