1.数据库中有以下两张表:
部门表 - dept  :deptno dname
员工表 - emp  :empno、ename、deptno、sal请按要求写出标准的SQL 语句:
1)列出工资大于2000 的员工所属的部门编号
2)列出员工表中的部门名称 (用左连接)
3)列出员工少于3人的部门编号
4)求各部门的员工工资总额
5)求每个部门中的最大工资值和最小工资值,并且最小值小于5000,最大值大于15000
6)加入现在数据库中有一个和员工表结构相同的空表emp2,请用一条SQL 语句将emp 表中的所有记录插入到emp2 表中

解决方案 »

  1.   

    试试,好久没有写SQL了,
    1:select e.ename,d.dname
    from emp e,dept d
    where d.deptno=e.deptno and sal >2000
    2:select e.ename,d.dname
    from emp e  left join dept d on d.deptno=e.deptno 
    3:
    select d.dname
    from dept d
    where d.deptno in(
    select e.deptno
    from emp e
    group by e.deptno
    having count(*)>3 )
      

  2.   

    4:select sum(sal) from emp 
    group by deptno5:select max(sal),min(sal)
    from emp 
    group by deptno
    having max(sal)>15000 and min(sal)<50006:insert into emp select * from emp2
      

  3.   

    1.数据库中有以下两张表:
    部门表 - dept :deptno dname
    员工表 - emp :empno、ename、deptno、sal请按要求写出标准的SQL 语句:
    1)列出工资大于2000 的员工所属的部门编号  
    ---select distinct deptno from dept a where exisits(select 1 from emp b where a.deptno=b.deptno and b.sal>2000) 
    2)列出员工表中的部门名称 (用左连接)
    select a.deptno,b.dname from emp a,dept b where a.deptno=b.deptno(+)
    3)列出员工少于3人的部门编号
    select deptno from emp group by deptno having count(*)<3
    4)求各部门的员工工资总额
    select sum(sal) from emp group by deptno
    5)求每个部门中的最大工资值和最小工资值,并且最小值小于5000,最大值大于15000
    max(sal),min(sal) from emp group by deptno  
    6)加入现在数据库中有一个和员工表结构相同的空表emp2,请用一条SQL 语句将emp 表中的所有记录插入到emp2 表中
    insert into emp2 select * from emp 
      

  4.   


    SQL> select * from emp;
    /*
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7369 SMITH      CLERK      7902 1980-12-17     800.00               20
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20
     7839 KING       PRESIDENT       1981-11-17    5000.00               10
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               1014 rows selected
    */
    SQL> select * from dept;
    /*
    DEPTNO DNAME          LOC
    ------ -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        */
    --1)列出工资大于2000 的员工所属的部门编号
    SQL> select e.ename,d.dname,e.sal
      2  from emp e,dept d
      3  where e.sal>2000 and
      4        e.deptno=d.deptno;
    /*
    ENAME      DNAME                SAL
    ---------- -------------- ---------
    CLARK      ACCOUNTING       2450.00
    KING       ACCOUNTING       5000.00
    JONES      RESEARCH         2975.00
    FORD       RESEARCH         3000.00
    SCOTT      RESEARCH         3000.00
    BLAKE      SALES            2850.00
    */
    --2)列出员工表中的部门名称 (用左连接)
    SQL> select e.ename,d.deptno,d.dname
      2  from emp e,dept d
      3  where e.deptno=d.deptno(+);
    /*
    ENAME      DEPTNO DNAME
    ---------- ------ --------------
    MILLER         10 ACCOUNTING
    KING           10 ACCOUNTING
    CLARK          10 ACCOUNTING
    FORD           20 RESEARCH
    ADAMS          20 RESEARCH
    SCOTT          20 RESEARCH
    JONES          20 RESEARCH
    SMITH          20 RESEARCH
    JAMES          30 SALES
    TURNER         30 SALES
    BLAKE          30 SALES
    MARTIN         30 SALES
    WARD           30 SALES
    ALLEN          30 SALES
    */
    --3)列出员工少于3人的部门编号
    SQL> select d.deptno
      2  from dept d
      3  where d.deptno in(
      4        select e.deptno
      5        from emp e
      6        group by e.deptno
      7        having count(e.deptno)<3);
    /*
    DEPTNO
    ------*/
    SQL> select d.deptno,nvl(count(e.ename),0) d_person_num
      2  from emp e,dept d
      3  where e.deptno=d.deptno
      4  group by d.deptno;
    /*
    DEPTNO D_PERSON_NUM
    ------ ------------
        10            3
        20            5
        30            6
    */
    --4)求各部门的员工工资总额
    SQL> select d.dname,sum(e.sal)
      2  from emp e,dept d
      3  where e.deptno=d.deptno
      4  group by d.dname;
    /*
    DNAME          SUM(E.SAL)
    -------------- ----------
    ACCOUNTING           8750
    RESEARCH            10875
    SALES                9400
    */
    --5)求每个部门中的最大工资值和最小工资值,并且最小值小于5000,最大值大于15000
    --“并且最小值小于5000,最大值大于15000”这句话理解不了?
    SQL> select deptno,max(sal),min(sal)
      2  from emp
      3  group by deptno;
    /*
    DEPTNO   MAX(SAL)   MIN(SAL)
    ------ ---------- ----------
        10       5000       1300
        20       3000        800
        30       2850        950
    */
    --6)加入现在数据库中有一个和员工表结构相同的空表emp2,
    --请用一条SQL 语句将emp 表中的所有记录插入到emp2 表中
    SQL> create table emp2 as
      2  select * from emp;Table createdSQL> desc emp2;
    Name     Type         Nullable Default Comments 
    -------- ------------ -------- ------- -------- 
    EMPNO    NUMBER(4)    Y                         
    ENAME    VARCHAR2(10) Y                         
    JOB      VARCHAR2(9)  Y                         
    MGR      NUMBER(4)    Y                         
    HIREDATE DATE         Y                         
    SAL      NUMBER(7,2)  Y                         
    COMM     NUMBER(7,2)  Y                         
    DEPTNO   NUMBER(2)    Y                         SQL> select * from emp2;
    /*
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7369 SMITH      CLERK      7902 1980-12-17     800.00               20
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20
     7839 KING       PRESIDENT       1981-11-17    5000.00               10
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               1014 rows selected
    */
    SQL> drop table emp2;Table dropped