MySqL速成教程笔记系列八

外连接

(1) 例子:
select e.ename,d,dname from emp e right join dept d on e.deptno = d.deptno;
在这里插入图片描述
right 代表:表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表。

带有left的是左外连接。
任何一个右连接都有左连接的写法。
任何一个左连接都有右连接的写法。
左外连接可以写成left outer join
右外连接可以写成right outer join

(2) 例子:查询每个员工的上级领导,要求显示所有员工的名字和领导名。
select a.ename as ‘员工名’ , b.ename as ‘领导名’ from emp a left join emp b on a.mgr = b.empno;
在这里插入图片描述

三张表,四张表怎么连接呢?

select ……
from a
join b on a和b的连接条件
join c on a和c的连接条件
join d on a和d的连接条件

一条SQL中内连接和外连接可以混合,都可以出现

(1)案例:找出每个员工的部门名称以及工资等级,要求显示员工名、部门名、薪资、薪资等级。
select e.ename,e.sal,d.dname,s.grade
from emp e
join dept d
on e.deptno = d.deptno
join salgrade s
on e.sal between s.losal and s.hisal;
在这里插入图片描述

子查询

(1)select 语句中嵌套select 语句,被嵌套的select语句称为子查询

(2)子查询都可以出现在哪里呢?
select……(select)
from……(select)
where……(select)

(3)where子句中的子查询
案例:找出比最低工资高的员工姓名和工资

select ename,sal from emp where sal>min(sal);
会报错!!!
where子句中不能直接使用分组函数

实现思路:
第一步:查询最低工资是多少
select min(sal) from emp;
在这里插入图片描述

第二步:找出>800的
select ename,sal from emp where sal>800;
在这里插入图片描述

第三步:合并
select ename,sal from emp where sal > (select min(sal) from emp);
在这里插入图片描述
(4) from子句中的子查询
注意:from 后面的子查询,可以将子查询的查询结果当作一张临时表

案例:找出每个岗位的平均工资的薪资等级

第一步:找出每个岗位的平均工资(按照岗位分组求平均值)
select job,avg(sal) from emp group by job;
在这里插入图片描述
第二步:将上表和工资等级表进行连接。条件为平均工资在losal和hisal之间
select s.grade,t.* from
(select job,avg(sal) as avgsal from emp group by job
) t
join salgrade s on
t.avgsal between s.losal and s.hisal;
在这里插入图片描述
(5)select后面的子查询
例子:找出每个员工的部门名称,显示员工名,部门名
select e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;
在这里插入图片描述
注意:对于select后面的子查询来说,这个子查询只能一次返回一条结果,多于1条就会报错。
例:
select e.ename,e.deptno,(select dname from dept) as dname from emp e;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值