MySQL学习第五天

本文详细介绍了数据库查询中的内连接和外连接概念及其区别,通过实例展示了左连接和右连接的用法。此外,还讲解了三张表及以上的连接查询,并给出了子查询在不同位置的应用,包括在WHERE子句中、FROM子句后以及SELECT后的使用方式。通过这些示例,读者可以深入理解数据库复杂查询的操作技巧。
摘要由CSDN通过智能技术生成

1、外连接
什么是外连接,和内连接有什么区别?
内连接:
假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。
AB两张表没有主副之分,两张表是平等的。

外连接:
假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

*例子:*找出每个员工的上级领导?(所有员工必须全部查询出来。)
左连接:表示左边的这张表是主表。
select
a.ename ‘员工’, b.ename ‘领导’
from
emp a
left outer join // outer可以省略,表示外连接
emp b
on
a.mgr = b.empno;

右连接:表示右边的这张表是主表。
select
a.ename ‘员工’, b.ename ‘领导’
from
emp b
right outer join // outer可以省略 ,表示外连接
emp a
on
a.mgr = b.empno;

外连接最重要的特点是:主表的数据无条件的全部查询出来。
2、三张表及以上表的连接查询
格式:

A
join
B
join
C
on

表示:A表和B表先进行表连接,连接之后A表继续和C表进行连接。
例子:找出每一个员工的部门名称、工资等级、以及上级领导。
select
e.ename ‘员工’,d.dname,s.grade,e1.ename ‘领导’
from
emp e
join
dept d
on
e.deptno = d.deptno
join
salgrade s
on
e.sal between s.losal and s.hisal
left join
emp e1
on
e.mgr = e1.empno;
3、子查询
(1)where子句中使用子查询
例子:找出高于平均薪资的员工信息。
select * from emp where sal > avg(sal); //错误的写法,where后面不能直接使用分组
select * from emp where sal > (select avg(sal) from emp);

(2)from后面嵌套子查询
例子:找出每个部门平均薪水的等级。
第一步:找出每个部门平均薪水(按照部门编号分组,求sal的平均值)
select deptno,avg(sal) as avgsal from emp group by deptno;
第二步:将以上的查询结果当做临时表t,让t表和salgrade s表连接,条件是:t.avgsal between s.losal and s.hisal
select
t.*,s.grade
from
(select deptno,avg(sal) as avgsal from emp group by deptno) t
join
salgrade s
on
t.avgsal between s.losal and s.hisal;

(3)在select后面嵌套子查询。(一般不用)
例子:找出每个员工所在的部门名称,要求显示员工名和部门名。
select
e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname
from
emp e;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值