zoukankan      html  css  js  c++  java
  • 数据库学习7-25

    课堂练习1

    1.查询和simth一个部门的其他员工姓名。

     select ename from emp  where deptno=(select deptno from emp where ename='SMITH')and ename !='SMITH';

    2.查询存在员工的部门的工作地点。

     select loc from dept   where deptno in(select distinct deptno from emp);

    3.查询工资为全公司最高工资的员工的部门名称。

     select dname from dept   where deptno in (select deptno from emp where sal=(select max(sal) from emp ));

    4.查询高于公司平均高工资的员工的岗位。

     select job from emp  where sal=(select avg(sal) from emp);

    课堂练习2

    1.查询所有员工工资都大于1000的部门的信息

     select * from dept where deptno in   (select deptno from emp having min(sal)>1000 );

    2.查询所有员工的工资都大于1000的部门信息及其员工信息

     select *from dept , emp where emp.deptno=dept.deptno and emp.sal>1000;

    3.查询所有员工工资都在900~3000之间的部门信息

     select * from dept where deptno in (select deptno from emp where sal in (900,3000));

    4.查询所有工资都在900~3000之间的员工所在部门的员工信息

     select * from emp where deptno in (select deptno from emp where sal in (900,3000));

    课堂练习3

    1.查询出每个人的名字,岗位,部门编号,所在部门的最低工资。

     select ename,job,emp.deptno,minsal  from emp,(select deptno,min(sal) minsal from emp group by deptno) dmp  where emp.deptno=dmp.deptno;

    2.查询每个人的工资等级和姓名还有所在岗位的平均薪资  

    select grade,ename,jobavgsal  from emp,salgrade,(select avg(sal) jobavgsal from emp group by job) jobsal  where sal between losal and hisal and emp.job=jobsal.job;

    3.查询出各个部门工资最高的人信息  

     select * from emp   where  (deptno,sal) in (select deptno,max(sal) from emp group by deptno);

    oracle

    第七章

    练习1

     1.查询入职日期最早的员工姓名

     select ename from emp where hiredate=(select min(hiredate) from emp );

     2.查询工资比Jones工资高的员工姓名,工资  

    select ename,sal from emp where sal> (select sal from emp where ename ='JONES');

     select ename,sal  from emp a,emp b  where a.sal>b.sal and b.ename='JONES';  

     select ename,sal  from emp a  where exists(select 1 from emp b where a.sal>b.sal and b.name='JONES';)

     3.查询工资最低的员工姓名

     select ename from emp where sal =(select min(sal) from emp );

     4.查询部门人数大于所有部门平均人数的的部门编号,部门名称,部门人数

     select emp.deptno,dname,count(ename)  from emp,dept  where emp.deptno=dept.deptno   having  count(ename)>(select avg(count(ename)) from emp group by deptno)  group by emp.deptno,dname;

    练习2

     1.查询入职日期比20部门任何一个员工晚的员工姓名、入职日期,不包括20部门员工  

    select ename,hiredate from emp  where hiredate>(select min(hiredate) from emp )where deptno!= 20;

     select ename,hiredate from emp  where hiredate>any(select hiredate from emp) where deptno!= 20;

     select ename,hiredate  from emp a  where exists(select 1 from emp b where b.deptno=20 having a.hiredate >min(hiredate))and a.deptno;

     2.查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工

     select ename,hiredate from emp  where hiredate>(select max( hiredate) from emp)where deptno!= 10;

     select ename,hiredate from emp  where hiredate>all(select hiredate from emp) where deptno!= 10;

     3.查询职位和20部门任何一个员工职位相同的员工姓名,职位,不包括10部门员工  

    select ename,job from emp  where job in (select job from emp where deptno=20) and deptno!=10;

     4.查询比本职位平均工资高的员工姓名、职位,部门名称,部门平均工资

     select ename,  a.job,  (select dname from dept c where a.deptno = c.deptno),   deptnoAvgSal  

     from emp a,   (select deptno, avg(sal) deptnoAvgSal from emp group by deptno) b,  (select job, avg(sal) jobAvgSal from emp group by job) d  

      where a.deptno = b.deptno        

      and a.job = d.job        

      and a.sal > d.jobAvgSal;

         select ename,   job,   (select dname from dept c where a.deptno = c.deptno),   (select avgsal   from (select avg(sal) avgsal, deptno from emp group by deptno) e            

       where e.deptno = a.deptno)      

      from emp a     

      where exists       (select 1   from emp b      where a.job = b.job having a.sal > avg(b.sal));

     5.查询职位和经理同SCOTT或BLAKE相同的员工姓名、职位,不包括SCOOT和BLAKE本人。

     select ename,job from emp  where job,mgr in (select job,mgr from emp where ename in('SCOTT','BLAKE'))   and not ename in ('SCOTT','BLAKE');

     select a.ename,a.job  from emp a  where a.job=(select job from emp b where a.mgr=b.mgr and b.ename in ('SCOTT','BLAKE'))  and not ename in ('SCOTT','BLAKE');    

     6.查询不是经理的员工姓名,及他所管理的员工人数。

     select a.ename ,count(b.ename) from emp a,emp b  where a.job !='MANAGER' and  b.mgr=a.empno  group by a.ename;

    练习3

     1.查询入职日期最早的前5名员工姓名,入职日期。

     select ename,hiredate  from emp a  where exists (select 1 from emp b where a.hiredate>b.hiredate having count(1)<5);

     2.查询工资最高的前5名员工姓名、工资、部门名称。

    select ename, sal, (select dname from dept where A.deptno = dept.deptno) dname, job
      from emp a
     where ename not in ('SCOTT', 'BLAKE') and exists (select 1
              from emp b where ename not in ('SCOTT', 'BLAKE') and a.sal < b.sal having count(1) < 5);

    练习4

     1.按照每页显示5条记录,分别查询第1页,第2页,第3页信息,要求显示员工姓名、入职日期、部门名称。

     select ename,hiredate,dname    from dept,(select rownum rn,ename,hiredate,deptno from emp where rownum<(1*5)+1 ) hd    where rn>(1-1)*5 and dept.deptno=hd.deptno ;

     2.按照每页显示5条记录,分别查询工资最高的第1页,第2页,第3页信息,要求显示员工姓名、入职日期、部门名称、工资。

     select ename,hiredate,sal,dname  from dept,(select rownum rn,ename,hiredate,sal,deptno from (select * from emp order bysal) where rownum <(1*5)+1) hs  where rn>(1-1)*5 and dept.deptno=hs.deptno;

    课后作业

     1.查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。

     select sal,deptno,ename  from emp  where sal>(select sal from emp where empno=7782) and job=(select job from emp where empno=7369);

     2.查询工资最高的员工姓名和工资。

     select ename,sal from emp  where sal=(select max(sal) from emp);

     3.查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。

     select emp.deptno,dname,min(sal)   

    from emp,dept    

    where emp.deptno=dept.deptno  

     having min( sal) >(select min(sal) from emp where deptno=10)  

     group by emp.deptno,dname;

     4.查询员工工资为其部门最低工资的员工的编号和姓名及工资。

     select empno,ename,sal  from emp,(select min(sal)  minsal,deptno from emp group by deptno) a  where sal in minsal and emp.deptno=a.deptno;

     5.显示经理是KING的员工姓名,工资。

     select a.ename,a.sal  

     from emp a,emp b  

     where a.mgr=b.empno and a.mgr=(select empno from emp where ename='KING');

     6.显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。

     select ename,sal,hiredate

     from emp

     where hiredate >(select hiredate from emp where ename ='SMITH');

     7.使用子查询的方式查询哪些职员在NEW YORK工作。

     select ename  

    from emp

     where deptno=(select deptno from dept where loc='NEW YORK');

     8.写一个查询显示和员工SMITH工作在同一个部门的员工姓名,雇用日期,查询结果中排除SMITH。

     select ename,hiredate

     from emp

     where ename!='SMITH' and deptno=(select deptno from emp where ename='SMITH');

     9.写一个查询显示其工资比全体职员平均工资高的员工编号、姓名。

     select empno,ename   from emp    where sal>(select avg(sal) from emp);

     10.写一个查询显示其上级领导是King的员工姓名、工资。

     select ename,sal  from emp  where mgr=(select empno from emp where ename='KING');

     11.显示所有工作在RESEARCH部门的员工姓名,职位。

     select ename,job  from emp  where deptno=(select deptno from dept where dname='RESEARCH');

     12.查询每个部门的部门编号、平均工资,要求部门的平均工资高于部门20的平均工资。

      select deptno,avg(sal)    from emp    having avg(sal)>(select avg(sal) from emp where deptno=20)    group by deptno ;

     13.查询大于本部门平均工资的员工姓名,工资,所在部门平均工资,高于部门平均工资的额度。

     select ename,sal,deptnoavgsal,sal-deptnoavgsal  from emp a,(select avg(sal) deptnoavgsal,deptno from emp group by deptno) b  where a.deptno=b.deptno and a.sal>b.deptnoavgsal;

     14. 列出至少有一个雇员的所有部门

     select * from dept a where exists(select 1 from emp b where a.deptno = b.deptno );

     15. 列出薪金比"SMITH"多的所有雇员

     select ename  from emp  where sal>(select sal from emp where ename='SMITH');

     16. 列出入职日期早于其直接上级的所有雇员

     select a.ename  from emp a,emp b  where a.hiredate< b.hiredate and b.empno=a.mgr;

     17. 找员工姓名和直接上级的名字  

    select a.ename,b.ename  from emp a,emp b  where a.mgr=b.empno(+);

     18. 显示部门名称和人数  

    select dname,count(1)  from emp,dept  where emp.deptno=dept.deptno  group by dname;

     19. 显示每个部门的最高工资的员工

     select ename   from emp ,(select max(sal) maxsal,deptno from emp group by deptno) a    where sal=maxsal and emp.deptno=a.deptno;

     select ename  from emp  where (deptno,sal) in (select deptno,max(sal) from emp group by deptno);

     20. 显示出和员工号7369部门相同的员工姓名,工资  

    select ename,sal  from emp  where deptno=(select deptno from emp where empno=7369);

     21. 显示出和姓名中包含"W"的员工相同部门的员工姓名

     select ename  from emp  where deptno=(select deptno from emp where ename like '%W%');

     22. 显示出工资大于平均工资的员工姓名,工资

     select ename,sal  from emp  where sal>(select avg(sal) from emp);

     23. 显示出工资大于本部门平均工资的员工姓名,工资

     select ename,sal    from emp,(select avg(sal) avgsal ,deptno from emp group by deptno) a    where sal>avgsal and emp.deptno=a.deptno;

     24. 显示每位经理管理员工的最低工资,及最低工资者的姓名  

    select ename,minsal   from emp a,(select min(sal) minsal ,mgr from emp b group by mgr) b    where job='MANAGER' and a.mgr=b.mgr and a.sal=b.minsal;

     25. 显示比工资最高的员工参加工作时间晚的员工姓名,参加工作时间  

    select ename,hiredate  from emp  where hiredate>(select hiredate from emp where sal=(select max(sal) from emp));

     26. 显示出平均工资最高的的部门平均工资及部门名称  

     select dname,avg(sal) avgsal  

       from dept,emp,(select  deptno from emp  where sal=(select max(sal) from emp)) a   

     where dept.deptno=a.deptno  and emp.deptno=dept.deptno     

        group by dname;

    mysql

    练习1
    1.查询部门20的员工,每个月的工资总和及平均工资。
    select sum(sal),avg(sal)
    from emp
    where deptno=20;

    2.查询工作在CHICAGO的员工人数,最高工资及最低工资。
    select count(1),max(sal),min(sal)
    from emp,dept
    where emp.deptno=dept.deptno and loc='CHICAGO';

    3.查询员工表中一共有几种岗位类型
    select distinct job
    from emp;

    练习2

    1.查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
    select emp.deptno,dname,count(emp.deptno),max(sal),min(sal),sum(sal),avg(sal)
    from emp,dept
    where emp.deptno=dept.deptno
    group by emp.deptno,dname;

    2.查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均工资。
    select emp.deptno,dname,job,count(emp.deptno),max(sal),min(sal),sum(sal),avg(sal)
    from emp,dept
    where emp.deptno=dept.deptno
    group by emp.deptno,dname,job;

    3.查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。
    select count(a.ename),a.empno,a.ename,b.*
    from emp a,emp b
    where a.empno=b.mgr
    group by a.empno,a.ename;

    练习3

    1.查询部门人数大于2的部门编号,部门名称,部门人数。
    select deptno,dname,count(1)
    from dept
    having count(2)>2;

    2.查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门人数升序排序。
    ????
    select emp.deptno,dname,count(1),avg(sal)
    from emp,dept
    where emp.deptno=dept.deptno and sal>(select avg(sal) from emp where avg(sal)=2000)
    having count(1)>2
    group by emp.deptno,dname
    order by count(1);
    练习4
    1.查询入职日期最早的员工姓名,入职日期
    select ename,min(hiredate)
    from emp
    group by ename;

    2.查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称
    select ename,sal,dname
    from emp,dept
    where emp.deptno=dept.deptno and loc='CHICAGO' and sal>(select sal from emp where ename='SMITH');

    3.查询入职日期比20部门入职日期最早的员工还要早的员工姓名,入职日期
    select ename,hiredate
    from emp
    where hiredate<(select min(hiredate) from emp where deptno=20);

    4.查询部门人数大于所有部门平均人数的的部门编号,部门名称,部门人数
    select emp.deptno,dname,count(emp.deptno)
    from emp,dept
    where emp.deptno=dept.deptno
    having count(emp.deptno)>(select avg(emp.deptno) from emp);


    练习5
    1.查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工
    select ename,hiredate
    from emp
    where deptno!=10 and hiredate>any(select hiredate from emp where deptno=10);

    2.查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工
    select ename,hiredate
    from emp
    where deptno!=10 and hiredate>all(select hiredate from emp where deptno=10);

    3.查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员工
    select ename,job
    from emp
    where deptno!=10 and job=any(select job from emp where deptno=10);

    课后作业
    1.查询部门平均工资在2500元以上的部门名称及平均工资。
    select dname,avg(sal)
    from emp,dept
    where emp.deptno=dept.deptno
    having avg(sal)>2500;

    2.查询员工岗位中不是以“SA”开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序。
    select avg(sal)
    from emp
    where ename not like "SA%"
    having avg(sal)>2500
    order by avg(sal);

    3.查询部门人数在2人以上的部门名称、最低工资、最高工资,并对求得的工资进行四舍五入到整数位。
    select dname,minsal,round(maxsal)
    from dept d ,(select min(sal) minsal ,max(sal) maxsal from emp ) a
    where d.deptno=a.deptno
    having count(d.deptno)>2;

    4.查询岗位不为SALESMAN,工资和大于等于2500的岗位及每种岗位的工资和。
    select job,sumsal
    from emp a,(select sum(sal) sumsal from emp having sum(sal)>=2500) b
    where job<>"SALESMAN" and a.deptno=b.deptno;

    5.显示经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序。
    select a.empno,a.ename,minsal
    from emp a left outer join emp b on a.deptno=b.deptno
    join (select min(sal) minsal from emp having min(sal)>3000) con a.deptno=c.deptno
    order by minsal desc;

    6.查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。
    select sal,empno,ename
    from emp
    where sal>(select sal feom emp where empno=7782) and job in(select job from emp where wmpno=7369);

    7.查询工资最高的员工姓名和工资。
    select ename,sal
    from emp
    where sal>(select max(sal) from emp );

    8.查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。
    select d.deptno,dname,minsal
    from emp a,dept d,(select min(sal) from emp having min(sal) >(select min(sal) from emp where deptno=10)) c
    where a.deptno=d.deptno and a.deptno=c.deptno;

    9.查询员工工资为其部门最低工资的员工的编号和姓名及工资。
    select empno,ename,sal
    from emp a
    where sal in (select min(sal) from emp group by deptno);

    10.显示经理是KING的员工姓名,工资。
    select a.ename,a.sal
    from emp a,emp b
    where a.deptno=b.deptno and a.mgr=b.empno and b.ename="KING";

    11.显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。
    select ename,sal,hiredate
    from emp
    where hiredate>(select hiredate from emp where ename="SMITH");

    12.使用子查询的方式查询哪些职员在NEW YORK工作。
    select ename
    from emp
    where ename in (select ename from emp where deptno in (select deptno from dept where loc ="NEW YORK"));

    13.写一个查询显示和员工SMITH工作在同一个部门的员工姓名,雇用日期,查询结果中排除SMITH。
    select ename,hiredate
    from emp
    where ename not like "SMITH" and deptno in (select deptno from emp where ename ="SMITH");

    14.写一个查询显示其工资比全体职员平均工资高的员工编号、姓名。
    select empno,ename
    from emp
    where sal>(select avg(sal) fom emp );

    15. 显示部门名称和人数
    select dname,count(1)
    from emp,dept
    where emp.deptno=dept.deptno
    group by dname;

    16. 显示每个部门的最高工资的员工
    select *
    from emp a
    where sal=(select max(sal) from emp b where a.deptno=b.deptno);

    17. 显示出和员工号7369部门相同的员工姓名,工资。
    select ename,sal
    from emp
    where deptno in (select deptno from emp where empno =7369);

    18. 显示出和姓名中包含“W”的员工相同部门的员工姓名
    select ename
    from emp
    where deptno in (select deptno from emp where ename like %W%);

  • 相关阅读:
    基于STM32F103C8T6的超声波测距示例
    ST-LINK 到 SWD接线图
    MDK破解版下载
    CompletableFuture Quasar 等并发编程
    c++中参数传递和函数返回简析
    c++中冒号(:)和双冒号(::)的用法
    c++中,size_typt, size_t, ptrdiff_t 简介
    c++中,保证头文件只被编译一次,避免多重包含的方法
    时间序列分析之一次指数平滑法
    Openv2.1基本数据类型
  • 原文地址:https://www.cnblogs.com/hole/p/11251856.html
Copyright © 2011-2022 走看看