我怎样才能找到收入比他们的经理少的员工? - ORACLE - 斯科特数据库

How can I get employess who earn less money than their managers? - ORACLE - SCOTT database

我正在尝试获取收入低于其经理的雇员的姓名。三个部门都有经理。括号 returns 中的子查询 salary of this managers 正确。我也尝试接收所有没有经理的工人,但我的代码总是错误的。你知道我应该纠正什么吗?

SELECT sal
FROM SCOTT.emp
WHERE NOT EXISTS (SELECT sal
                  FROM SCOTT.emp
                  WHERE job LIKE 'MANAGER');

这是我的 table:

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10

看来自己加入我了。

SQL> select e.ename employee, e.sal sal_employee,
  2         m.ename manager , m.sal sal_manager
  3  from emp e join emp m on e.mgr = m.empno
  4  where e.sal < m.sal;

EMPLOYEE   SAL_EMPLOYEE MANAGER    SAL_MANAGER
---------- ------------ ---------- -----------
JAMES               950 BLAKE             2850
TURNER             1500 BLAKE             2850
MARTIN             1250 BLAKE             2850
WARD               1250 BLAKE             2850
ALLEN              1600 BLAKE             2850
MILLER             1300 CLARK             2450
ADAMS              1100 SCOTT             3000
CLARK              2450 KING              5000
BLAKE              2850 KING              5000
JONES              2975 KING              5000
SMITH               800 FORD              3000

11 rows selected.

SQL>

您可以使用分层查询:

SELECT ename,
       PRIOR ename AS mgr_ename,
       sal,
       PRIOR sal AS mgr_sal
FROM   emp
WHERE  (LEVEL = 2 AND sal < PRIOR sal) -- salary is less than manager's salary
OR     (LEVEL = 1 AND mgr IS NULL) -- has no manager
CONNECT BY PRIOR empno = mgr

输出:

ENAME MGR_ENAME SAL MGR_SAL
ADAMS SCOTT 1100 3000
SMITH FORD 800 3000
MILLER CLARK 1300 2450
ALLEN BLAKE 1600 2850
JAMES BLAKE 950 2850
TURNER BLAKE 1500 2850
MARTIN BLAKE 1250 2850
WARD BLAKE 1250 2850
KING 5000
JONES KING 2975 5000
CLARK KING 2450 5000
BLAKE KING 2850 5000

db<>fiddle here