SQL子查询

-- 子查询
-- 子查询语句可以在select, from where 中
-- 查询工资高于平均工资的雇员名字和工资。
select ename, sal from emp where sal > (select avg(sal) as avg_sal from emp);
-- 查询和scott同一部门且工资比他低的雇员名字和工资

select t1.ename, t2.sal from emp as t1 join (select deptno, sal from emp where ename = 'scott') as t2 on t1.deptno = t2.deptno and t1.sal < t2.sal;

select ename, sal from emp where emp.deptno = (select deptno from emp where ename = 'scott') and sal < (select sal from emp where ename = 'scott');



-- 查询工资低于任何一个clerk的工资的雇员信息
select * from emp where sal < all (select sal from emp where job='clerk');
-- 查询工资比所有的salesman都高的雇员编号、名字和工资
select empno, ename, sal from emp where sal > all (select sal from emp where job = 'salesman');
-- 查询部门20中职务同部门10的雇员一样的雇员信息
select * from emp where job in (select job from emp where deptno = 10) and deptno = 20;
-- 查询职务和scott相同,比scott雇佣时间早的雇员信息
select t2.* from (select job, hiredate from emp where ename = 'scott') as t1 join emp as t2 on t1.job = t2.job and t1.hiredate > t2.hiredate;
-- 查询每个部门的详细信息及该部门平均工资和等级
-- 1、先查询每个部门的平均工资和详细信息
select t3.*, t4.grade from (select t2.*, avg(sal) as avg_sal from emp as t1 right join dept as t2 on t1.deptno = t2.deptno group by deptno) as t3 left join salgrade as t4 on avg_sal between t4.losal and t4.hisal;


-- 求平均薪水的等级最低的部门名称
-- 1、先求出每个部门的平均薪水和信息
select t1.* from (select dept.*, avg(emp.sal) as avg_sal from emp join dept on emp.deptno = dept.deptno group by dept.deptno) as t1 join salgrade as t2 on t1.avg_sal between t2.losal and t2.hisal order by t1.avg_sal limit 1;
-- 找出部门编号为20的所有员工中收入最高的职员
select * from emp where deptno = 20 and job = 'clerk' order by sal desc limit 1;
-- 查询在雇员中有哪些人是领导
select * from emp where job = 'manager' or job = 'president';
-- 求平均薪水最高的部门的部门编号
-- 1、先求出所有部门的平均薪水,再排序
select t1.deptno from (select dept.deptno,avg(sal) as avg_sal from emp join dept on emp.deptno = dept.deptno group by dept.deptno order by avg_sal desc limit 1) as t1
-- 求比普通员工的最高薪水还要高的经理名字
-- 1、先求普通员工的最高薪水
select ename from emp where sal > (select max(sal) as max_sal from emp where job = 'clerk') and job = 'manager';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值