mysql查询练习(一)

来源:互联网 发布:无法解析主机ubuntu 编辑:程序博客网 时间:2024/04/27 16:39

这套练习题是基于oracle的scott库中的emp,dept,salegrade表来进行的.只不过是用mysql.这个库我已经导出上传到csdn了,下载地址:http://download.csdn.net/detail/llj398110112/9069303


好了,下面是练习题一和答案


--查询,显示所有员工姓名,部门编号,部门名称
select e.ename,d.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno;
--写一个查询,显示所有工作在CHICAGO并且奖金不会空的员工姓名,工作地点,奖金
select e.ename,d.loc,e.comm
from emp e,dept d
where e.deptno = d.deptno
and d.loc = 'CHICAGO'
and e.comm is not null;
--写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点
select e.ename,d.loc
from emp e,dept d
where e.deptno = d.deptno
and ename like '%A%';
--查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序
select e.empno,e.ename,e.sal,s.grade,d.loc
from emp e,dept d,salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal
order by sal asc;
--查询所有工作在new york和chicago的员工姓名,员工编号,以及他们的经理姓名,经理编号
select e.empno,e.ename,m.empno,m.ename
from emp e,emp m,dept d
where e.mgr = m.empno
and e.deptno = d.deptno
and d.loc in('NEW YORK','CHICAGO');
--查询员工SMITH的姓名,部门名称,直接上级名称
select e.ename,d.dname,m.ename
from emp e,emp m,dept d
where e.mgr = m.empno
and e.deptno = d.deptno
and e.ename='SMITH';
--查询员工姓名,部门名称,工资,工资级别,要求工资级别大于四级
select e.ename,d.dname,e.sal,s.grade
from emp e,dept d,salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal
and s.grade>4;
--显示员工KING和FORD管理的员工姓名及其经理姓名
select e.ename,m.ename
from emp e,emp m
where e.mgr = m.empno
and m.ename in ('KING','FORD');
--显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加工作时间比经理早
select e.ename,e.hiredate,m.ename,m.hiredate
from emp e,emp m
where e.mgr = m.empno
and e.hiredate<m.hiredate;
--查询部门人数大于2的部门编号,部门名称,部门人数
select d.deptno,d.dname,count(e.empno)
from emp e,dept d
where e.deptno = d.deptno
group by d.deptno,d.dname
having count(e.empno)>2;
--查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门
人数升序排列
select d.deptno,d.dname,count(e.empno),sum(e.sal)/count(e.empno)
from emp e,dept d
where e.deptno = d.deptno
group by d.deptno,d.dname
having count(e.empno)>2
and sum(e.sal)/count(e.empno)>2000
order by count(e.empno) asc;
--查询部门20的员工,每个月的工资总和及平均工资
select sum(sal),avg(sal)
from emp
where deptno = 20
--查询工作在CHICAGO的员工人数,最高工资及最低工资
select max(sal),min(sal)
from emp,dept
where emp.deptno = dept.deptno
and dept.loc = 'CHICAGO';
--查询员工表中一共有几种岗位类型
select count(distinct job) from emp;
--查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资
select d.deptno,d.dname,count(e.empno),max(e.sal),min(e.sal),sum(e.sal),avg(e.sal)
from emp e,dept d
where e.deptno = d.deptno
group by d.deptno,d.dname;
--查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均
工资
select d.deptno,d.dname,e.job,count(e.empno),max(e.sal),min(e.sal),sum(e.sal),avg(e.sal)
from emp e,dept d
where e.deptno = d.deptno
group by d.deptno,d.dname,e.job;
--查询每个经理管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息
select count(e.empno),m.empno,m.ename
from emp e 
left join emp m 
on e.mgr = m.empno 
group by m.empno,m.ename;
--查询部门平均工资在2500以上的部门名称及平均工资
select d.dname,avg(e.sal)
from emp e,dept d
where e.deptno = d.deptno
group by d.dname
having avg(e.sal)>2500;
--查询员工岗位中不是以"SA"开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序
select e.job,avg(e.sal)
from emp e
where e.job not like 'SA%'
group by e.job
having avg(e.sal)>2500
order by avg(e.sal) desc;
--查询部门人数在2人以上的部门名称,最低工资,最高工资,并对求得的工资进行四舍五入到整数位
select d.dname,round(min(e.sal),0),round(max(e.sal),0)
from emp e,dept d
where e.deptno = d.deptno
group by d.dname
having count(e.empno)>2;
--查询岗位不是SALESMAN,工资和大于等于2500的岗位及每种岗位的工资和
select job,sum(sal)
from emp
where job<>'SALESMAN'
group by job
having sum(sal)>=2500;
--显示经理号码,这个经理所管理的员工最低工资,没有经理的king也要显示,不包括最低工资小与3000的,按最低工资从高到低排列
select m.empno,min(e.sal)
from emp e
left join emp m
on e.mgr = m.empno
group by m.empno
having min(e.sal)>=3000
order by min(e.sal) desc;
--写一个查询,显示每个部门最高工资和最低工资的差额
select max(sal)-min(sal)
from emp
group by deptno;

0 0