//查询每个部门里面最高工资的人
这里可以用连接查询,思路:
(1)得到每个部门的最高薪水:
select max(sal),deptno from emp group by deptno;
(2)把(1)查询出来的数据当成一个虚拟表t,再用emp去连接这个虚拟表t:
select ename,sal from emp join (select max(sal) as maxsal,deptno from emp g
roup by deptno)t on (emp.sal=t.maxsal and emp.deptno=t.deptno);
或者用=连接也是可以的:
select ename,sal from emp,(select max(sal) as maxsal,deptno from emp group
by deptno)t where emp.deptno=t.deptno and emp.sal=t.maxsal;
//查询每个部门的平均薪水的等级:
select t1.deptno,t1.maxsal,t2.grade from((select deptno,avg(sal) maxsal fro
m emp group by deptno)t1 join salgrade t2 on t1.maxsal between t2.losal and t2.h
isal);
//用一条select语句把某个人的人名和它的上级的名字查询出来
分析:某人和其经理人都是在一个表里面,这时是否考虑自连接
SELECT T1.ENAME,T2.ENAME FROM EMP T1 JOIN (SELECT ENAME,EMPNO FROM EMP)T2 ON T1.MGR=T2.EMPNO;
或者是:
select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno;
上面这两种查询中,由于King没有上级,在e2中找不到对应的连接,所以只查询出13行,就算右表中也没有我也有显示出来怎么办呢,可以用左连接.
SELECT T1.ENAME,T2.ENAME FROM EMP T1 LEFT JOIN (SELECT ENAME,EMPNO FROM EMP
)T2 ON T1.MGR=T2.EMPNO;
SELECT T1.ENAME,T2.ENAME FROM EMP T1 RIGHT JOIN (SELECT ENAME,MGR FROM EMP)
T2 ON T2.MGR=T1.EMPNO;
(A)select ename,dname from emp,dept where emp.deptno=dept.deptno;
(B)select ename,dname from emp join dept on(emp.deptno=dept.deptno);
select ename,dname from emp join dept using (deptno);
(A)和(B)的区别:(A)是1992年的标准,(B)是1999的新标准,在老的标准中,where子句中带有两个表的连接条件,在新的标准中,表与表的连接用join,left join...,where只用于过滤数
查找每个员工的工资等级:
select ename,sal,grade from emp e join salgrade s on(e.sal between s.losal
and s.hisal);
查找工资大于2000的员工的姓名,部门名称和薪水等级:
select dname, ename,sal,grade from emp e join dept d on(d.deptno=e.deptno)
join salgrade s on(e.sal between s.losal and s.hisal) where sal>2000;
查找每个人的姓名及其经理人的名称:
select e1.ename,e2.ename from emp e1 (left) join emp e2 on(e1.mgr = e2.empno);
查找每个人的姓名及其所在的部门(部门下面没有员工也要显示出此部门来):
select dname,ename from emp e right join dept d on(e.deptno=d.deptno);
查找每个人的姓名及其所在的部门(部门下面没有员工也要显示出此部门来,员工没有对应部门的也查询出来,呵呵,师出无门,当然这是不可能的,因为作了外键约束):
select dname,ename from emp e full join dept d on(e.deptno=d.deptno);
//查询每个部门的平均薪水等级
select deptno,avg(grade) from (select deptno,ename,grade from emp join salg
rade s on (emp.sal between s.losal and s.hisal))t group by deptno;
//查询哪些是经理人
select ename from emp where empno in (select distinct mgr from emp);
//不用组函数求最大值
(1)用自连接过滤最大值
select distinct e1.sal from emp e1 join emp e2 on (e1.sal<e2.sal);
(2)用not in就搞定了
//平均薪水最高部门编号
(1)求每个部门的平均薪水
select avg(sal) avg_sal,deptno from emp group by deptno;
(2)求平均薪水最高的部门的平均薪水:
select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by
deptno);
(3)看哪个部门的平均薪水等于(2)求出来的值
select deptno,avg_sal from (select avg(sal) avg_sal,deptno from emp group by deptno) where avg_sal=(select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno);
//进而可以求平均薪水最高部门名称
//求平均薪水的等级最低的部门的名称
大概思路:
(1)求每个部门的平均薪水
(2)求每个部门的平均薪水的等级
(3)求最低薪水等级的部门的编号
(4)求最低薪水等级的部门的名称
分享到:
相关推荐
马士兵老师spring框架学习笔记
马士兵JAVA笔记(全).docx
jvm java虚拟机 调优 马士兵 笔记 让你对java虚拟机调优有初步的认识
马士兵oracle笔记,浅显易懂。
linux 马士兵笔记
马⼠兵Python基础版2020教程P98-P134PPT笔记+课堂代码 "还未学完,持续更新中。。。" 96-101 Bug lst=[{'rating':[9.7,206287],'id':'129052','type':['剧情','犯罪'],'title':'肖申克的救赎','actors':['蒂姆.罗宾...
马士兵Spring课堂笔记(超级详细版).pdf
马士兵老师mybatis相关学习笔记
马士兵Shopping项目源代码,马士兵Shopping项目源代码,马士兵Shopping项目源代码,马士兵Shopping项目源代码,
马士兵j2se源码和ppt马士兵j2se源码和ppt马士兵j2se源码和ppt马士兵j2se源码和ppt马士兵j2se源码和ppt
马士兵老师HashMap学习笔记
以前学java时候看的马士兵老师的教程,老师讲的较快,有些不适应,自己做些笔记巩固练习,效果还不错,贴出来分析大家把,配图+示例。。。
MySQL简介、安装、配置、主要命令参考马士兵MySQL简明教程视频汇编.pdf
马士兵Spring课堂笔记(详细版) 马士兵spring视频笔记
是自己根据马士兵的NewShopping模仿着一步步做的,对项目的界面进行了美化,更加漂亮美观,并对视频中项目一些细节不足的地方进行了一些修正,并添加了部分功能进行完善,但是对于视频中报表和文件上传的功能我并...
马士兵 struts2 操作手册
java 马士兵 网上商城 源代码 可以运行的购物系统
一.java内存结构 2 二 垃圾收集算法: 3 三 JVM参数 4 四 JVM的垃圾回收集器 7 五 常用参数设置 7
马士兵hibernate文档.doc