SQL Query用于检索相同列的数据两次

时间:2015-05-09 07:13:06

标签: oracle

查询:

显示所有员工的员工编号,姓名,经理编号,经理姓名。

EMP

Name                            Type            Constraints
------------------------------- -------- ----
 EMPNO                         NUMBER(4)    Primary Key
 ENAME                         VARCHAR2(10)
 JOB                               VARCHAR2(9)
 MGR                             NUMBER(4)
 HIREDATE                   DATE
 SAL                               NUMBER(7,2)  Must be greater then ZERO
 COMM                          NUMBER(7,2)
 DEPTNO                      NUMBER(2)      Foreign Key dept(deptno)

示例数据:

EMPNO   ENAME   JOB MGR HIREDATE    SAL COMM    DEPTNO
7369    SMITH   CLERK   7902    17-DEC-80   800     20
7499    ALLEN   SALESMAN    7698    20-FEB-81   1600    300 30
7521    WARD    SALESMAN    7698    22-FEB-81   1250    500 30
7566    JONES   MANAGER 7839    02-APR-81   2975        20
7654    MARTIN  SALESMAN    7698    28-SEP-81   1250    1400    30
7698    BLAKE   MANAGER 7839    01-MAY-81   2850        30
7782    CLARK   MANAGER 7839    09-JUN-81   2450        10
7788    SCOTT   ANALYST 7566    09-DEC-82   3000        20
7839    KING    PRESIDENT       17-NOV-81   5000        10
7844    TURNER  SALESMAN    7698    08-SEP-81   1500    0   30
7876    ADAMS   CLERK   7788    12-JAN-83   1100        20
7900    JAMES   CLERK   7698    03-DEC-81   950     30
7902    FORD    ANALYST 7566    03-DEC-81   3000        20
7934    MILLER  CLERK   7782    23-JAN-82   1300        10

1 个答案:

答案 0 :(得分:0)

你应该先学习基础知识。

在此SQL中,您需要先自行加入表。因为,经理本人是经理身份的员工。

但最终,一名员工将成为TOP,而他没有经理,所以我们在这里进行了一次OUTER加入.. INNER JOIN将获取所有合格的记录,但是通过外部联接,我们只需要匹配的记录。

SELECT E1.EMPNO,
       E1.ENAME,
       E2.EMPNO AS MANAGER_NUMBER,
       E2.ENAME AS MANAGER_NAME
FROM EMP E1
LEFT OUTER JOIN EMP E2 
ON (E1.MGR = E2.EMPNO)