Oracle综合测试题

  1. 将emp表的职员信息按雇佣日期由早到晚的先后顺序列出
    select * from emp order by hiredate;

  2. 查询职员表中没有奖金的员工信息
    select * from emp where comm is null;

  3. 查询工资高于所有员工平均工资的员工
    select * from emp where sal>(select avg(sal) from emp);

  4. 构造sql语句,查询emp表的信息,格式为“员工编码empno,姓名ename,月收入(工资+奖金)”
    select ‘员工编码’||empno||’,姓名’||ename||’,月收入’||nvl(sal+comm,sal) from emp;

  5. 查找员工姓名的长度是五个字符的员工信息
    select * from emp where length(ename)=5;

  6. 查询每个部门的职位种类,要去掉重复的职位
    select deptno,job from emp group by deptno,job order by deptno;

  7. 查询每个部门中每种职位的最高薪水
    select deptno,job,max(sal) from emp group by deptno,job;

  8. 查询员工的姓名和他在公司工作的年限(以月份数表示)
    select ename,months_between(sysdate,hiredate) from emp;

  9. 查询工资大于2000的员工的姓名,雇佣日期和薪水,其中雇佣日期以“1980年12月17日”这样的形式显示,薪水值以“rmb5000.00”这样的形式显示,查询结果按薪水的降序排序select ename,to_char(hiredate,‘yyyy"年"mm"月"dd"日"’) chusheng,‘rmb’||to_char(sal,‘9999.99’) from emp order by sal desc;

  10. 列出工资比smith多的所有员工
    select * from emp where sal>(select sal from emp where ename=‘SMITH’);

  11. 列出所有员工的姓名及其直接上级的姓名
    select e.ename yuangong,m.ename lingdao from emp e,emp m where e.mgr=m.empno;

  12. 列出最低工资大于1500的各种工作
    select job ,min(sal) from emp group by job having min(sal)>1500;

  13. 列出所有部门的详细信息和部门人数。
    select d.*,renshu from dept d,(select deptno,count(empno) renshu from emp group by deptno) de where d.deptno=de.deptno;

  14. 找出部门 10 中既不是经理也不是普通员工,而且工资大于等于 2000 的员工
    select * from emp where deptno=10 and job<>‘MANAGER’ AND job<>‘CLERK’ AND SAL>=2000;

  15. 找出部门 30 中得到最多奖金的员工姓名
    select ename from emp where deptno=30 and comm=(select max(comm) from emp where deptno=30);

  16. 分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金)
    select deptno,job,avg(nvl(comm,0)),sum(nvl2(comm,sal+comm,sal)) from emp group by deptno,job;

  17. 查找出工资等级不为 4 级的员工的员工名字,部门名字,部门地点。
    select grade,ename,dname,loc from emp e join dept d on e.deptno=d.deptno join salgrade on sal between losal and hisal where grade<>4;

  18. 生成一个1—20之间的随机数,再对其进行四舍五入处理,保留一位小数点。
    select round(dbms_random.value(1,20),1) from dual;

  19. 列出受雇日期早于其直接上级的所有员工。
    select e.hiredate,e.ename yuangong,m.hiredate,m.ename lingdao from emp e join emp m on e.mgr=m.empno where e.hiredate<m.hiredate;

  20. 查询每个部门中有同样工资的员工的统计信息, 列出他们的部门号,工资,人数。
    select deptno,sal,count(empno) from emp e where (deptno,sal)in(select deptno,sal from emp where empno<>e.empno) group by deptno,sal;

  21. 计算“1929-02-14”与当前日期之间相差的年份
    select extract(year from sysdate)-extract(year from to_date(‘1929-02-12’,‘yyyy-mm-dd’)) from dual;

  22. 查询不是领导的员工
    select * from emp where empno not in(select mgr from emp where mgr is not null);

  23. 查询第6条到第10条的员工记录
    select * from (select rownum r,e.* from emp e where rownum<=10) e1 where r>=6;

  24. 查询最高工资员工的名字和工作岗位
    select ename,job,sal from emp where sal=(select max(sal) from emp );

  25. 显示没有上级的雇员的情况
    select * from emp where mgr is null;

上一篇:数据库的常用命令


下一篇:MySQL数据库—— 索引(Indexes)