

select rpad(' ', level*2) || ename as employee, level, sal, job
from emp
start with mgr is null -- ename='KING'과 같음(KING의 mgr이 null값)
connect by prior empno = mgr;

select rpad(' ', level*2) || ename as employee, level, sal, job
from emp
start with mgr is null
connect by prior empno = mgr and ename != 'BLAKE';
💡 where절을 쓰면 실행순서가 from - start with - connect by - where - select 라서 결과가 BLAKE만 빠짐
-->connect by절에 and를 써서 조건을 써줘야 됨

select rpad(' ', level*2) || ename as employee, level, sal, job
from emp
start with mgr is null
connect by prior empno = mgr
and ename not in ('BLAKE', 'JONES');
not in 사용
오라클 sql로는 안되고 다음과 같이 mysql용으로 작성
select version();
WITH RECURSIVE emp_hierarchy AS (
-- Anchor member: top-level employee(s)
SELECT
empno,
ename,
mgr,
sal,
job,
1 AS level,
LPAD(ename, LENGTH(ename) + 2, ' ') AS employee
FROM emp
WHERE mgr IS NULL
AND ename NOT IN ('BLAKE', 'JONES')
UNION ALL
-- Recursive member
SELECT
e.empno,
e.ename,
e.mgr,
e.sal,
e.job,
eh.level + 1,
CONCAT(RPAD(' ', (eh.level + 1) * 2, ' '), e.ename)
FROM emp e
JOIN emp_hierarchy eh ON e.mgr = eh.empno
WHERE e.ename NOT IN ('BLAKE', 'JONES')
)
SELECT employee, level, sal, job
FROM emp_hierarchy;