MySQL中的多表查询

MySQL中的多表查询

单表查询一般不能满足项目的需求,在真实的开发过程中,有很多需求都是要涉及到多表查询,

在此总结一下MySQL中的多表查询:

一、内连接查询

指所有的查询出的结果都能在连接表中有对应的记录;
以员工表和部门表为例:
element表:
img
department表:
img

可以发现在人力资源部没有员工,赵七没有对应的部门,
如果要查询员工姓名和相关部门名称,此时应该使用内连接,关键字(inner join)
在此说一下关联查询sql编写的思路:

  1. 确定所连接的表
  2. ——要查询的字段
  3. ——连接条件和连接方式
select e.empName, d.deptName 
	from t_employee e 
	INNER JOIN t_dept d 
	ON e.dept = d.id;

查询结果:没有赵七
img

内连接的特点:只查询在连接表中能够有对应的记录(就是在员工表中有外键对应)

二、左外连接查询

指以左边的表中的数据为基准,去匹配右面表中的数据,
如果匹配到就显示出来,如果匹配不到就显示为null;
例如:在上一个例子中,我要显示赵七,怎么办???关键字( left outer join)

SELECT e.empName, d.deptName
	from t_employee e
	LEFT OUTER JOIN t_dept d 
	on d.id = e.dept;

查询结果:赵七没有对应部门img

三、右外连接

如:查询所有部门的对应员工。。。关键字( right outer join)

SELECT e.empName, d.deptName
	from t_employee e
	RIGHT OUTER JOIN t_dept d 
	on d.id = e.dept;

查询结果:人力部门没人:
img

四、全外连接

将两张表中的所有字段都查出来,没有对应的值就显示null,
如果要达到全外连接的效果,可以使用union关键字连接左外连接和右外连接。关键字( union)
例如:

select e.empName,d.deptName
     FROM t_employee e 
     left JOIN t_dept d
     ON e.dept = d.id
UNION
select e.empName,d.deptName
     FROM t_employee e 
     RIGHT JOIN t_dept d
     ON e.dept = d.id;

查询结果:
img
如果在oracle中,直接就使用 full outer join 关键字连接两表就行了;

五、自连接查询

自连接:当前表与自身的连接查询, 关键点:虚拟化一张表给别名
例如:查询员工以及他的上司的名称。。。关键字:left join
由于上司也是员工,所以虚拟化出一张上司表

SELECT e.empName, b.empName
     from t_employee e
     LEFT JOIN t_employee b
     ON e.bossId = b.id;

查询结果:
img

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值