zoukankan      html  css  js  c++  java
  • 基本SQL查询语句

    使用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.列出各种工作的最低工资。

    18.列出各个部门的MANAGER(经理)的最低薪金。

    19.列出所有员工的年工资,按年薪从低到高排序。

      1 1.
      2 select distinct dname
      3 from dept 
      4 where deptno in 
      5           (select distinct deptno 
      6            from emp);
      7 --要查部门编号如果存在于emp 表中,说明这个部门有员工。
      8 2.
      9 select ename,job,mgr,hiredate,sal
     10 from emp
     11 where sal>
     12         (select sal
     13          from emp
     14          where ename='SMITH');
     15 3.
     16 select e.ename, e.mgr , w.ename
     17 from emp e, emp w
     18 where e.mgr=w.empno;
     19 4.
     20 select e.ename, e.mgr , e.hiredate,w.ename,w.hiredate
     21 from emp e, emp w
     22 where e.mgr=w.empno
     23 and e.hiredate< w.hiredate;
     24 5.
     25 select e.ename,e.hiredate, d.dname,d.deptno
     26 from emp e, dept d
     27 where e.deptno (+)=d.deptno;
     28 --本例子使用的是外连接, 也可以用右连接。
     29 select e.ename,e.hiredate, d.dname,d.deptno
     30 from emp e right join dept d 
     31 on e.deptno=d.deptno;
     32 6.
     33 select e.ename,e.hiredate,e.job, d.dname,d.deptno
     34 from emp e, dept d
     35 where e.deptno =d.deptno
     36 and e.job=upper('clerk');
     37 7.
     38 select job, min(sal)
     39 from emp
     40 group by job
     41 having min(sal)>1500;
     42 8.
     43 select e.ename,d.dname
     44 from emp e,dept d
     45 where e.deptno=d.deptno
     46 and d.dname=upper('sales');
     47 --或者:
     48 select ename
     49 from emp 
     50 where deptno =
     51       (select deptno 
     52        from dept
     53        where dname=upper('SALES'));
     54 9.
     55 select ename, job, sal
     56 from emp
     57 where sal> 
     58         (select avg(sal)
     59          from emp );
     60 10.
     61 select ename, job
     62 from emp
     63 where job =
     64        (select job 
     65         from emp 
     66         where ename=upper('scott'));
     67 11.
     68 select ename, sal,job
     69 from emp
     70 where sal in
     71        (select sal
     72         from emp 
     73         where deptno=30);
     74 12.
     75 select ename, sal,job
     76 from emp
     77 where sal >all
     78        (select sal
     79         from emp 
     80         where deptno=30);
     81 --或者
     82 select ename ,sal 
     83 from emp 
     84 where sal>
     85        (select max(sal)
     86         from emp
     87         where deptno=30);
     88 13.
     89 select d.deptno,d.dname, count(e.ename), avg(e.sal), avg(months_between(sysdate,e.hiredate))
     90 from emp e, dept d
     91 where e.deptno(+)= d.deptno
     92 group by d.deptno,dname;
     93 --或者下面的方法,这种方法更好理解,把需要汇总的生成一个视图e。
     94 select e.*,d.dname ,
     95 from (select deptno, count(ename) ,avg(sal),avg(months_between(sysdate,hiredate)) 
     96       from emp 
     97       group by deptno) e, dept d
     98 where e.deptno =d.deptno;
     99 14.
    100 select d.dname, e.ename, sal+nvl(comm,0)
    101 from emp e, dept d
    102 where d.deptno=e.deptno;
    103 15.
    104 select e.ename,e.job, e.deptno ,d.job, d.deptno
    105 from emp e, emp d
    106 where e.job=d.job and e.deptno<>d.deptno;
    107 16.
    108 select count(e.ename),d.dname
    109 from emp e, dept d
    110 where e.deptno(+)= d.deptno
    111 group by e.deptno,d.dname;
    112 --或者写成
    113 select d.deptno,e.*,d.dname 
    114 from (select deptno,count(ename) 
    115      from emp 
    116      group by deptno) e,dept d
    117 where e.deptno(+)= d.deptno;
    118 17.
    119 select job,min(sal+nvl(comm,0))from emp group by job;
    120 18.
    121 select deptno,min(sal) from emp where job=upper('manager')
    122 group by deptno ;
    123 19.
    124 select ename , (sal+nvl(comm,0))*12   yearsal
    125 from emp
    126 order by yearsal ;

     

     

     

     

     

     

  • 相关阅读:
    【二分图】HEOI2012 朋友圈
    【转载】动态规划—各种 DP 优化
    【默哀】京阿尼纵火案一周年
    【暑假集训】HZOI2019 Luogu P1006 传纸条 二三四维解法
    【暑假集训】HZOI2019 水站 多种解法
    最小二乘法求线性回归方程
    51Nod 最大M子段和系列 V1 V2 V3
    【博弈论】51Nod 1534 棋子游戏
    【最短路】CF 938D Buy a Ticket
    51nod1524 最大子段和V2
  • 原文地址:https://www.cnblogs.com/nqdxt/p/11418929.html
Copyright © 2011-2022 走看看