连接查询

5. select from where join、 on、 group、order、top、having的混合使用

--输出输出姓名中不包含A的所有员工的工资最高的前三名每个员工姓名工资工资等级部门名称
select top 3 "E".ename "员工姓名", "E".sal "员工工资", "S".grade "工资等级", "D".dname "部门名称"
	from emp "E"
	join dept "D"
	on "E".deptno="D".deptno
	join salgrade "S"
	on "E".sal >="S".losal and "E".sal <="S".hisal
	where "E".ename not like '%A%'
	order by "E".sal desc
一般查询格式:
select 
from A
join B
on ...
join C
on ...
where ...
group by ...
having ...
order by .....

6. 习题

1> 求每个员工的姓名 部门编号 薪水 和 薪水等级

		select "E".ename "员工姓名", "E".deptno "部门编号", "E".sal "薪水", "S".grade "薪水等级"
							from emp "E"
							join salgrade "S"
							on "E".sal >="S".losal and "E".sal <="S".hisal;
2> 查找每个部门的编号 该部门所有员工的平均工资 平均工资等级

select "T".deptno, "T".avg_sal, "S".grade
	from
	(
	select "E".deptno, avg(sal) "avg_sal"
		from emp "E"
		group by deptno
	) "T"
	join salgrade "S"
	on "T".avg_sal >="S".losal and "T".avg_sal <="S".hisal; 
--查找每个部门的编号部门名称该部门所有员工的平均工资平均工资等级
select "T".deptno, "D".dname, "T".avg_sal, "S".grade
	from
	(
	select "E".deptno, avg(sal) "avg_sal"
		from emp "E"
		group by deptno
	) "T"
	join salgrade "S"
	on "T".avg_sal >="S".losal and "T".avg_sal <="S".hisal
	join dept "D"
	on "D".deptno="T".deptno
3> 求出emp表中所有领导的姓名

select "E".ename
	from emp "E"
	where empno in (select mgr from emp);
--求出emp表中所有非领导的姓名(oracle中not in 使用null的问题)
select "E".ename
	from emp "E"
	where empno not in (select mgr from emp
				where emp.mgr != null);
4> 求出平均薪水最高的部门的编号和部门的平均工资

                                              select top 1 deptno "部门编号", avg(sal) "部门平均工资"
							from emp 
							group by deptno
							order by avg(sal) desc		
5> 把工资大于所有员工中工资最低的前三个人的姓名 工资 部门编号 部门名称 工资等级输出

select top 3 "T".ename "姓名", "T".sal "工资","T".empno "部门编号","D".dname "部门名称","S".grade "工资等级"
	from (
			select *
				from emp "E"
				where sal> (select min(sal) from emp)
		) "T" 
	join dept "D"
    on "T".deptno = "D".deptno
	join salgrade "S"
	on "T".sal between "S".losal and "S".hisal
	order by T.sal asc
6> 把工资大于的所有员工按部门分组,把部门平均工资大于的最高的前两个部门的部门编号、部门名称、部门平均工资、平均工资等级输出

select "T".deptno "部门编号","D".dname "部门名称","T"."avg_sal" "部门平均工资","S"."grade" "工资等级"
	from dept "D"
	join (
			select top 2 "E".deptno,avg(sal) "avg_sal"
				from emp "E"
				join dept "D"
				on "E".deptno = "D".deptno
				join salgrade "S"
				on "E".sal between "S".losal and "S".hisal
				where "E".sal >1500
				group by "E".deptno
				having avg("E".sal)>2000
				order by avg("E".sal) desc
			) "T"
	on "D".deptno="T".deptno
	join salgrade "S"
	on "T"."avg_sal" between "S".losal and "S".hisal

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值