zoukankan      html  css  js  c++  java
  • Oracle高级查询练习4.7

    高级查询(做参考,语句不唯一):

    一、已知emp表和dept表的结构说明如下:

    emp员工表

    (empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)

    dept部门表

    (deptno部门编号/dname部门名称/loc地点)

    工资 = 薪金 + 佣金

    二、查询表数据

    1.查询至少有一个员工的所有部门。

    2.查询薪金比“SMITH”多的所有员工。

    3.查询所有员工的姓名及其直接上级的姓名。

    4.查询受雇日期早于其直接上级的所有员工。

    5.查询部门名称和这些部门的员工信息,同时查询那些没有员工的部门。

    6.查询所有“CLERK”(办事员)的姓名及其部门名称。

    7.查询最低薪金大于1500的各种工作。

    8.查询在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

    9.查询薪金高于公司平均薪金的所有员工。

    10.查询与“SCOTT”从事相同工作的所有员工。

    11.查询薪金等于部门30中员工的薪金的所有员工的姓名和薪金。

    12.查询薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

    13.查询在每个部门工作的员工数量、平均工资和平均服务期限。

    14.查询所有员工的姓名、部门名称和工资。

    15.查询所有部门的详细信息和部门人数。

    16.查询各种工作的最低工资。

    17.查询各个部门的MANAGER(经理)的最低薪金。

    18.查询所有员工的年收入,按年薪从低到高排序。

    三,实验过程:

    (1)建表:

    说明:字段可以设置为唯一键(我的表没有设置):unique,如:dname char(20) unique;
    1,create table dept(
    deptno char(20) primary key,
    dname char(20) not null,
    loc char(20)
    );

    2,create table emp(
    empno char(20) primary key,
    ename char(10) not null,
    job char(20) not null,
    mgr char(20) ,
    hiredate date,
    sal number(7,2),
    comm number(7,2),
    deptno char(20) not null
    constraint deptno_fk references dept
    );

    (2)添加数据(结构一致):

    说明:部门编号是外键,所以两个表的deptno内容要一致。


    insert into dept values (1001,'营业部','重庆');
    insert into dept values (1002,'客服部','四川');
    insert into dept values (1003,'物流部','上海');

    ........

    说明:员工表中,上级编号(可以为空)如果非空,必须是已经创建好的,存在的,不然添加数据的时候会报错,比如,王进的上级编号是12132,则12132对应的员工王迪是存在的。


    insert into emp values(12131,'王进','clerk',12132,to_date('1982-12-3','yyyy-mm-dd'),800,null,1002);

    insert into emp values(12132,'王迪','经理',null,to_date('1982-12-3','yyyy-mm-dd'),800,null,1002);
    .......

    (3)查询语句:

    --1.列出至少有一个员工的所有部门。
    select dname from dept where deptno in(select deptno
    from emp);

    2,select * from emp where emp.sal>(select sal from emp where emp.ename='smith');

    --3.列出所有员工的姓名及其直接上级的姓名。
    select a.ename,(select b.ename from emp b where b.empno=a.mgr)as boss from emp a;
    
    --4.列出受雇日期早于其直接上级的所有员工。
    select a.ename from emp a where a.hiredate<(select b.hiredate from emp b where b.empno=a.mgr);

    5,select d.dname,e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.deptno from dept d left join emp e on d.deptno=e.deptno;


    6,select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno and e.job='clerk';

    --7.列出最低薪金大于1500的各种工作。
    select distinct job as 工作 from emp group by job having min(sal)>1500;

    --8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
    select ename from emp where deptno=(select deptno from dept where dname='销售');

    --9.列出薪金高于公司平均薪金的所有员工。
    select emp.ename from emp where emp.sal>(select avg(sal) from emp);

    --10.列出与“SCOTT”从事相同工作的所有员工。
    select emp.ename from emp where emp.job=(select emp.job from emp where emp.ename='SCOTT');

    --11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。
    select e.deptno,e.ename,e.sal from emp e where e.sal in(select e1.sal from emp e1 where e1.deptno=1008) and e.deptno<>1008;


    --12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
    select e.deptno,e.ename,e.sal from emp e where e.sal >(select max(sal) from emp e1 where e1.deptno=1007) and e.deptno<>1007;


    --*13.列出在每个部门工作的员工数量、平均工资和平均服务期限。
    select (select d.dname from dept d where e.deptno=d.deptno) as deptname ,count(deptno) as deptcount,avg(sal) as deptavgsal from emp e group by deptno;


    --14.列出所有员工的姓名、部门名称和工资。
    select ename,sal,(select dname from dept d where d.deptno=e.deptno)as dname from emp e;

    --*15.列出所有部门的详细信息和部门人数。
    select d.deptno,d.dname,d.loc,(select count(deptno) from emp e where e.deptno=d.deptno group by e.deptno) as deptcount from dept d;

    --16.列出各种工作的最低工资。
    select job,min(sal) from emp group by job;

    --17.列出各个部门的MANAGER(经理)的最低薪金。
    select deptno,min(sal) as 最低薪金 from emp where job='经理' group by deptno;

    --18.列出所有员工的年工资,按年薪从低到高排序。
    select emp.ename, (emp.sal*12+nvl(comm,0)) as yearsal from emp order by yearsal;

     

  • 相关阅读:
    Ubuntu
    SSH
    Markdown
    Mac OS 上的一些骚操作
    Linux Bash
    JConsole
    IDEA
    Groovy
    Github
    Git
  • 原文地址:https://www.cnblogs.com/gongsuiqing/p/12653663.html
Copyright © 2011-2022 走看看