Mega Code Archive

 
Categories / Oracle PLSQL / Table Joins
 

Self join for employees and their managers

SQL> SQL> SQL> CREATE TABLE employees   2  ( employee_id          number(10)      not null,   3    last_name            varchar2(50)      not null,   4    email                varchar2(30),   5    hire_date            date,   6    job_id               varchar2(30),   7    department_id        number(10),   8    salary               number(6),   9    manager_id           number(6)  10  ); Table created. SQL> SQL> SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salary,department_id ,manager_id)   2                values ( 1001, 'Lawson', 'lawson@g.com', '01-JAN-2002','MGR', 30000,1 ,1004); 1 row created. SQL> SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salary, department_id ,manager_id)   2                values ( 1002, 'Wells', 'wells@g.com', '01-JAN-2002', 'DBA', 20000,2, 1005 ); 1 row created. SQL> SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salary, department_id ,manager_id)   2                 values( 1003, 'Bliss', 'bliss@g.com', '01-JAN-2002', 'PROG', 24000,3 ,1004); 1 row created. SQL> SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salary, department_id, manager_id)   2                 values( 1004,  'Kyte', 'tkyte@a.com', SYSDATE-3650, 'MGR',25000 ,4, 1005); 1 row created. SQL> SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salary, department_id, manager_id)   2                 values( 1005, 'Viper', 'sdillon@a .com', SYSDATE, 'PROG', 20000, 1, 1006); 1 row created. SQL> SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salary, department_id,manager_id)   2                 values( 1006, 'Beck', 'clbeck@g.com', SYSDATE, 'PROG', 20000, 2, null); 1 row created. SQL> SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salary, department_id, manager_id)   2                 values( 1007, 'Java', 'java01@g.com', SYSDATE, 'PROG', 20000, 3, 1006); 1 row created. SQL> SQL> insert into employees( employee_id, last_name, email, hire_date, job_id, salary, department_id, manager_id)   2                 values( 1008, 'Oracle', 'wvelasq@g.com', SYSDATE, 'DBA', 20000, 4, 1006); 1 row created. SQL> SQL> select * from employees; EMPLOYEE_ID LAST_NAME                                          EMAIL                          HIRE_DATE JOB_ID                         DEPARTMENT_ID     SALARY MANAGER_ID ----------- -------------------------------------------------- ------------------------------ --------- ------------------------------ ------------- ---------- ----------        1001 Lawson                                             lawson@g.com                   01-JAN-02 MGR                                        1      30000       1004        1002 Wells                                              wells@g.com                    01-JAN-02 DBA                                        2      20000       1005        1003 Bliss                                              bliss@g.com                    01-JAN-02 PROG                                       3      24000       1004        1004 Kyte                                               tkyte@a.com                    13-JUN-98 MGR                                        4      25000       1005        1005 Viper                                              sdillon@a .com                 10-JUN-08 PROG                                       1      20000       1006        1006 Beck                                               clbeck@g.com                   10-JUN-08 PROG                                       2      20000        1007 Java                                               java01@g.com                   10-JUN-08 PROG                                       3      20000       1006 EMPLOYEE_ID LAST_NAME                                          EMAIL                          HIRE_DATE JOB_ID                         DEPARTMENT_ID     SALARY MANAGER_ID ----------- -------------------------------------------------- ------------------------------ --------- ------------------------------ ------------- ---------- ----------        1008 Oracle                                             wvelasq@g.com                  10-JUN-08 DBA                                        4      20000       1006 8 rows selected. SQL> SQL> select employee_id, last_name, job_id, manager_id   2        from employees   3       order by employee_id   4  / EMPLOYEE_ID LAST_NAME                                          JOB_ID                         MANAGER_ID ----------- -------------------------------------------------- ------------------------------ ----------        1001 Lawson                                             MGR                                  1004        1002 Wells                                              DBA                                  1005        1003 Bliss                                              PROG                                 1004        1004 Kyte                                               MGR                                  1005        1005 Viper                                              PROG                                 1006        1006 Beck                                               PROG        1007 Java                                               PROG                                 1006 EMPLOYEE_ID LAST_NAME                                          JOB_ID                         MANAGER_ID ----------- -------------------------------------------------- ------------------------------ ----------        1008 Oracle                                             DBA                                  1006 8 rows selected. SQL> select e1.last_name "Employee",   2             e2.last_name "Reports To"   3        from employees e1 left outer join employees e2   4          on e1.manager_id = e2.employee_id   5       order by e1.employee_id   6  / Employee                                           Reports To -------------------------------------------------- -------------------------------------------------- Lawson                                             Kyte Wells                                              Viper Bliss                                              Kyte Kyte                                               Viper Viper                                              Beck Beck Java                                               Beck Employee                                           Reports To -------------------------------------------------- -------------------------------------------------- Oracle                                             Beck 8 rows selected. SQL> SQL> SQL> drop table employees; Table dropped. SQL>