斯O

2020-06-03   阅读量: 661

MYSQL子查询

扫码加入数据分析学习群

标量子查询:

1. 查询基本工资高于公司平均工资的员工信息(where字句不能用聚合函数)

select *

from emp

where sal>(select avg(sal)

from emp);

2.练习:查询和allen同一个领导的员工:empno,ename,job,mgr

select empno,ename,job,mgr

from emp

where mgr=( select mgr from emp where ename='allen') and ename<>'allen';

行子查询

3. 查询和smith同部门同职位的员工:empno,ename,job,deptno

①select *

from emp

where deptno=(select deptno from emp where ename='smith') and job=(select job from emp where ename='smith') and ename<>'smith';

②select empno,ename,job,deptno

from emp

where (deptno,job)=(select deptno,job from emp where ename='smith') and ename<>'smith';

列子查询:(any、(not)in、all)

4. 查询普通员工的工资等级:empno,ename,sal,grade

select empno,ename,sal,grade

from emp

left join salgrade on sal between losal and hisal

where empno not in (select distinct mgr from emp where mgr is not null );

5.练习:查询员工数不少于5人的部门的所有员工:empno,ename,deptno

select deptno,count(empno)

from emp

group by deptno

having count(empno)>=5; -- 员工数不少于5人的部门

select empno,ename,deptno

from emp

where deptno in (select deptno from emp group by deptno having count(empno)>=5); -- 查询员工数不少于5人的部门的所有员工

6. 查询基本工资高于30号部门任意(any)员工的员工信息

select sal from emp where deptno=30; -- 30号部门员工的工资

①select * from emp where sal> any(select sal from emp where deptno=30) and deptno<>30;

②select * from emp where sal> (select min(sal) from emp where deptno=30) and deptno<>30;

7.查询基本工资高于30号部门所有(all)员工的员工信息

select sal from emp where deptno=30; -- 30号部门员工的工资

①select * from emp where sal> all (select sal from emp where deptno=30) and deptno<>30;

②select * from emp where sal> (select max(sal) from emp where deptno=30) and deptno<>30;

8. 练习:查询员工数比CHICAGO少的部门的员工人数

select count(empno)

from emp right join dept on emp.deptno=dept.deptno

where loc='CHICAGO'; -- CHICAGO员工的人数

①select deptno,count(empno)

from emp

group by deptno

having count(empno)<(select count(empno)

from emp right join dept on emp.deptno=dept.deptno

where loc='CHICAGO'); -- 查询员工数比CHICAGO少的部门的员工人数

from子查询

9. 查询各部门最高工资的员工:empno,ename,sal,deptno

select deptno,max(sal) from emp group by deptno;

①select empno,ename,sal,emp.deptno

from emp

left join (select deptno,max(sal) 最高工资 from emp group by deptno) e -- 一定要设置表别名'e'和字段别名'最高工资'

on emp.deptno=e.deptno

where sal=最高工资;

select 子查询

10. 查询各部门的员工人数占比:各部门人数/总人数

select deptno,count(empno)/(select count(empno) from emp) 人数占比

from emp

group by deptno;

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
18.0717 2 1 关注作者 收藏

评论(0)


暂无数据

推荐课程