create database test    --建立test数据库   
use test   
create table BONUS      --建立   
(   
  ENAME NVARCHAR(10),   
  JOB   NVARCHAR(9),   
  SAL   FLOAT,   
  COMM  FLOAT   
)   
  
create table DEPT            --建立部门表   
(   
  DEPTNO SMALLINT not null,    --部门编号   
  DNAME  NVARCHAR(14),          --部门名   
  LOC    NVARCHAR(13),          --城市   
  primary key (DEPTNO)   
)   
;   
  
create table EMP                --建立员工表   
(   
  EMPNO    SMALLINT not null,  --员工编号   
  ENAME    NVARCHAR(10),    --员工姓名   
  JOB      NVARCHAR(9),     --岗位   
  MGR      SMALLINT,        --经理   
  HIREDATE DATETIME,        --雇佣日期   
  SAL      FLOAT,           --工资   
  COMM     FLOAT,           --通讯费   
  DEPTNO   SMALLINT,        --部门编号   
  primary key (EMPNO),   
  foreign key (DEPTNO) references DEPT (DEPTNO)   
)   
;   
  
create table SALGRADE                       --员工级别   
(   
  GRADE SMALLINT,                           --等级   
  LOSAL SMALLINT,                           --最低工资   
  HISAL SMALLINT                            --最高工资   
)   
;   
  
insert into DEPT (DEPTNO, DNAME, LOC)   
values (10, 'ACCOUNTING', 'NEW YORK');   
insert into DEPT (DEPTNO, DNAME, LOC)   
values (20, 'RESEARCH', 'DALLAS');   
insert into DEPT (DEPTNO, DNAME, LOC)   
values (30, 'SALES', 'CHICAGO');   
insert into DEPT (DEPTNO, DNAME, LOC)   
values (40, 'OPERATIONS', 'BOSTON');   
  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7566, 'JONES', 'MANAGER', 7839, '1981-4-2', 2975, null, 20);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-9-28', 1250, 1400, 30);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-5-1', 2850, null, 30);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7782, 'CLARK', 'MANAGER', 7839, '1981-6-9', 2450, null, 10);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-4-19', 3000, null, 20);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7844, 'TURNER', 'SALESMAN', 7698, '1981-9-8', 1500, 0, 30);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7876, 'ADAMS', 'CLERK', 7788, '1987-5-23', 1100, null, 20);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-3', 950, null, 30);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-3', 3000, null, 20);   
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)   
values (7934, 'MILLER', 'CLERK', 7782, '1982-1-23', 1300, null, 10);   
  
insert into SALGRADE (GRADE, LOSAL, HISAL)   
values (1, 700, 1200);   
insert into SALGRADE (GRADE, LOSAL, HISAL)   
values (2, 1201, 1400);   
insert into SALGRADE (GRADE, LOSAL, HISAL)   
values (3, 1401, 2000);   
insert into SALGRADE (GRADE, LOSAL, HISAL)   
values (4, 2001, 3000);   
insert into SALGRADE (GRADE, LOSAL, HISAL)   
values (5, 3001, 9999);   
  
--9.    ⑩子查询:查询岗位为经理、工资第二高的员工所在的工作城市;查询公司所有的中层员工,既有上司又有手下的员工;  帮我看看怎么解决啊谢了

解决方案 »

  1.   

    --查询岗位为经理、工资第二高的员工所在的工作城市
    select LOC from DEPT where DEPTNO =
    (
    select DEPTNO from EMP e
    where JOB = 'MANAGER'
    and SAL < (select max(SAL) from EMP)
    and not exists (select 1 from EMP where e.JOB = JOB and SAL > e.SAL)
    )
      

  2.   

    --查询公司所有的中层员工,既有上司又有手下的员工
    select * from EMP e
    where MGR is not null
    and exists(select 1 from EMP where MGR = e.EMPNO)
      

  3.   

    1、工资第二的不考虑重复的:
    select * from dept where 
    deptno=( 
    select top 1 deptno from ( 
    select top 2 * from emp where job='manager' order by sal desc)t 
    order by sal)
    2、中层员工:
    select * from emp where empno in (select mgr from emp) and mgr is not null