您的位置:首页 > 数据库 > MySQL

mysql查询练习(一)

2015-09-01 11:19 525 查看
这套练习题是基于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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: