数据库MySQL学习之Mysql之子查询与union用法
小职 2021-01-04 来源 :https://blog.csdn.net/oLengNuanZiZhi12/article/det 阅读 1006 评论 0

摘要:本文主要向大家介绍了数据库MySQL学习之Mysql之子查询与union用法,通过具体的内容向大家展现,希望对大家数据库MySQL学习有所帮助。

本文主要向大家介绍了数据库MySQL学习之Mysql之子查询与union用法,通过具体的内容向大家展现,希望对大家数据库MySQL学习有所帮助。

数据库MySQL学习之Mysql之子查询与union用法


Mysql之子查询与union用法

1>子查询基础


where后面嵌套子查询

from后面嵌套子查询

select后面嵌套子查询

2>union的用法


1>子查询基础

什么是子查询?子查询都可以出现在哪里?
         select语句当中嵌套select语句,被嵌套的select语句是子查询。
          子查询可以出现在哪里?


select

..(select).

from

..(select).

where

..(select).


where后面嵌套子查询

案例:找出高于平均薪资的员工信息

//第一步:找出平均薪资

select avg(sal) from emp;

//第二步:where 过滤

select * from emp where sal;

//第一步与第二步合并

select * from emp where sal >(select avg(sal) from emp);


from后面嵌套子查询

案例:找出每个部门平均薪水的薪资等级。

//第一步:找出每个部门平均薪水

select deptno,avg(sal) 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;


案例:找出每个部门平均的薪水等级。

//第一步:找出每个员工的薪水等级

select e.name,e.sal,e.deptno,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;

//第二步:基于以上结果,继续按照deptno分组,求grade平均值

select

  e.deptno,avg(s.grade)

from 

emp e 

join 

salgrade s 

on

e.sal between s.losal and s.hisal

group by

e.deptno;

//或者根据第一个表的内容创建临时表

select

t.deptno,avg(t.grade) as avg 

from 

(select e.ename,e.sal,e.deptno,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal) t

group by

t.deptno;


启示:不要滥用子查询,效率太低,能不使用就不太使用。

select后面嵌套子查询

案例:找出每个员工所在的部门名称,要求显示员工名和部门名。

select

e.ename,d.name

from

emp e

join

dept d

on

e.deptno = d.deptno;

//简单写法


select

e.name,(select d.dname from dempt d where e.deptno = d.deptno a) as dname

from 

emp e;

//复杂写法,不经常用,但要会读



2>union的用法

可以将查询结果集相加:
案例:找出工作岗位是SALEMAN和MANAGER的员工?

//第一种

select ename,job from emp where job ='MANAGER' or job = 'SALESMAN';

//第二种

select ename,job from emp where job in('MANAGER','SALESMAN');

//第三种

select ename,job from emp where job ='MANAGER'

union

select ename,job from emp where job ='SALESMAN';



//两张不相干的表中的数据拼接在一起

select ename from emp

union

select dname from dept;

//两者都是一列所以合并成一列



如果连列数都不相同,编译会直接报错。




关注“职坐标在线”(Zhizuobiao_Online)公众号,免费获取学习视频资料、技术就业咨询

数据库MySQL学习之Mysql之子查询与union用法

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程