게시글
질문&답변
ORDER BY 자료 및 강의 내용에 문제가 있는 것 같은데, 체크 부탁드립니다.
안녕하세요. 최준호님. 교재의 내용은 아래와 같습니다.(사진)위의 쿼리를 실행하면, comm 기준으로 먼저 정렬이 되고, 그 다음 정렬 기준으로 sal 가 적용이 됩니다.그래서 실제 쿼리의 결과는 좌측 옆의 이미지 처럼 나오게 되는 겁니다. 아마도 두가지 이유 때문에 혼란스러우셨을거 같은데요. 그 외의 직원들은 급여로 정렬된다라는 말 때문에 혼란을 드린 것 같네요. 이 부분은 명확하게 작성 하자면 다음과 같이 쓰는게 좋겠네요. 이 쿼리는 1차 정렬 기준으로 comm이 NULL인 직원들을 맨 위에 배치한 후 오름차순 정렬한다. 그 다음 2차 기준인 sal을 기준으로 다시 오름차순 정렬한다.보완해둘게요. 정말 감사드려요. 🙂 그다음에 쿼리에 comm 뒤에 nulls first 만 있고 asc가 생략 되어 있어서 좀 혼란스러울거 같긴 합니다. 만약에 이쿼리에서 asc를 생략하지 않는다면 아래와 같은 쿼리가 작성됩니다. SELECT ename, sal, comm FROM scott.emp WHERE sal BETWEEN 1000 AND 2000 and ename != 'MILLER' ORDER BY comm asc NULLS FIRST, sal asc;이 쿼리는 comm 기준으로 asc 정렬을 하되, 널 값을 먼저 출력하라는 말이구요. 그 다음 정렬 기준이 sal(급여)이 되는 것입니다. 제 답변이 도움이 되셨으면 좋겠네요. 감사합니다.
- 1
- 2
- 29
질문&답변
실전모의고사 2회 42번 문제
안녕하세요. KOKODAE.KO 님. 이 문제는 가장 적절한 쿼리를 구하는 문제입니다. 보기 1번도 4번과 같이 동일한 결과를 나타냅니다. 하지만 쿼리 자체가 최적화 되어 있지는 못합니다. 그래서 가장 적절한 쿼리는 4번이 적합하다고 할 수 있습니다. 실제 문제도 이런 식으로 나올 수 있습니다. 동일한 결과를 나타내기 때문에 실전 시험에서도 이슈를 제기할 수도 있습니다만, 가급적이면 가장 적절해 보이는 것으로 선택하는 게 더 좋을 거 같습니다. 아래는 실습 쿼리입니다. 참고하십시오. 감사합니다. -- 1. 기존 테이블이 있다면 삭제 (선택 사항) DROP TABLE EMPLOYEE; -- 2. EMPLOYEE 테이블 생성 CREATE TABLE EMPLOYEE ( EMP_ID VARCHAR2(5) PRIMARY KEY, NAME VARCHAR2(50) NOT NULL, DEPT_ID VARCHAR2(5) NOT NULL, SALARY NUMBER(10) NOT NULL ); -- 3. 데이터 삽입 INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E001', '홍길동', 'D001', 5000); INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E002', '김철수', 'D001', 5500); INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E003', '이영희', 'D002', 4500); INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E004', '박민수', 'D002', 6000); INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES ('E005', '정대현', 'D002', 5000); -- 4. 변경사항 반영 COMMIT; -- 4번 쿼리 WITH DEPT_AVG AS ( -- 1. 각 부서의 평균 연봉 계산 SELECT DEPT_ID, AVG(SALARY) AS AVG_SAL FROM EMPLOYEE GROUP BY DEPT_ID ) SELECT E.* FROM EMPLOYEE E JOIN DEPT_AVG D ON E.DEPT_ID = D.DEPT_ID WHERE E.SALARY > D.AVG_SAL -- 2. 부서 평균보다 높은 직원만 필터링 AND E.SALARY = ( -- 3. 필터링된 전체 직원 중에서 최소 연봉을 찾음 SELECT MIN(E2.SALARY) FROM EMPLOYEE E2 JOIN DEPT_AVG D2 ON E2.DEPT_ID = D2.DEPT_ID WHERE E2.SALARY > D2.AVG_SAL ); -- 1번 쿼리 SELECT E.* FROM EMPLOYEE E WHERE E.SALARY > ( SELECT AVG(SALARY) FROM EMPLOYEE WHERE DEPT_ID = E.DEPT_ID ) AND E.SALARY = ( SELECT MIN(SALARY) FROM EMPLOYEE E2 WHERE E2.SALARY > ( SELECT AVG(SALARY) FROM EMPLOYEE WHERE DEPT_ID = E.DEPT_ID ) ); /* 기대 결과: EMP_ID | NAME | DEPT_ID | SALARY -------|------|---------|------- E002 | 김철수 | D001 | 5500 */
- 0
- 2
- 36
질문&답변
도커 설치 오류
안녕하세요. 박재훈님.도커 가상화에 문제가 있어서 답답하셨겠네요. 잘 해결 되면 좋겠습니다. 우선, 이미지의 로그를 보니 가상화 지원이 안되는 pc 이거나, 혹은 설정이 꺼져 있는거 같습니다.제가 드린 교안의 목차: 03 오라클 설치(on 컨테이너) 를 참고하셔서 처리해야 합니다. (교안 356 페이지)교안에서 안내하는 가이드는 아래의 순서로 확인을 하도록 되어 있습니다. 이미지가 포함되어 있으니 가이드에 따라 진행해보십시오. 가상화 가능 여부 확인 - 작업 관리자>성능>가상화 사용 확인 가상 머신 플랫폼 기능 확인 - 윈도우 기능 켜기/끄기 > 가상머신 플랫폼 체크 상태 확인 그리고, 혹시 확인했는데 가상화를 지원하지 않는 pc거나, 설정 작업이 너무 번거러우시다면.., livesql을 사용하시길 권해드립니다. livesql.oracle.com 에 접속해서 사용하실 수가 있습니다. 사용방법은 제 교안(목차-05 Live SQL 활용 (Oracle 미설치), 367페이지)에 있습니다. livesql은 oracle 에서 제공하는 sql 환경입니다. 오라클을 설치하지 않고 충분히 sqld 시험준비를 하실 수 있습니다. 그럼 처리해보시구요. 잘 안되면 질문 다시 남겨주세요. 감사합니다.
- 0
- 2
- 31
질문&답변
3강 노랭이 문제 SQL 실습 스크립트 다운로드 파일 오류
안녕하세요. sniperkdw 님. 알려주셔서 감사합니다. 압축된 파일에 약간의 문제가 있었네요. (참, 이상하네요.. 😅 ) 다시 압축해서 올려두었습니다. 다운로드 받아서 이상이 없는 것을 확인했어요. 혹시 다운로드 받으신 후 이상이 있으면 번거로우시겠지만, 다시 메세지 남겨주시길 부탁 드릴게요. 감사합니다.
- 0
- 1
- 47
질문&답변
노랭이 기출
안녕하세요. dussud159 님. 이 강의는 노랭이 문제 풀이 강의와 다른 내용입니다. 노랭이 문제는 난이도가 높은 것들이 많기 때문에 기본 내용을 모르고는 풀기가 어렵습니다. 기본 내용을 알려주는 강의가 이 강의입니다. 혹시 강의 내용을 오해하셨을까 염려되네요. 괜찮으시면 leader.bettermind@gmail.com 으로 메일 한 통주세요. 도움을 드릴 방법을 찾아보겠습니다. 감사합니다.
- 0
- 2
- 38
질문&답변
실전문제 2회차 24번문제
안녕하세요. kokodae.ko 님. 질문 주셔서 감사합니다. 질문에 답을 드리자면.. 24번 문제는 아래와 같고, 문제에서 요구하는 것은 '연속된 3일 이상' 입니다.24. 아래의 테이블에서 연속된 3일 이상 결제금액이 10만원을 초과한 고객을 찾으려고 한다. 가장 적절한 SQL문은? 문제에서 요구하는 '3일 이상' 이라는 기준으로 접답을 찾으면 3번입니다. 보기 1번은 3일 '이상' 이라는 기준을 충족하기 어렵습니다. 작성된 쿼리는 정확히 3일을 기준으로 데이터를 조회하게 되어 있습니다. 보기 3번은 3일 이상이라는 조건을 충족합니다. 물론 제시된 데이터만 가지고 보면, 1번도 답이 맞는 것 같다고 할 수 있습니다. 하지만 문제는 가장 적절한 것을 찾는 것이기 때문에 보기 중에서 가장 적절한 것을 선택하는 것이 좋습니다. 아래는 24번 문제의 실습 데이터와 쿼리입니다. 문제에서 제시된 데이터 외에 추가로 몇 건을 더 입력합니다. 실습 해보시면, 이해가 더 잘 되실 겁니다. CREATE TABLE PAYMENT ( CUSTOMER_ID VARCHAR(10) NOT NULL, PAYMENT_DATE DATE NOT NULL, AMOUNT INT NOT NULL, PRIMARY KEY (CUSTOMER_ID, PAYMENT_DATE) ); INSERT INTO PAYMENT (CUSTOMER_ID, PAYMENT_DATE, AMOUNT) VALUES ('A001', DATE '2024-01-01', 120000), ('A001', DATE '2024-01-02', 150000), ('A001', DATE '2024-01-03', 130000), -- A001은 3일 연속 (1/1~1/3) 조건을 만족 ('A001', DATE '2024-01-04', 80000), -- 10만원 이하로 연속 종료 ('A002', DATE '2024-01-01', 110000), ('A002', DATE '2024-01-02', 90000), -- 10만원 이하로 연속 실패 ('A002', DATE '2024-01-03', 120000), ('A003', DATE '2024-01-05', 110000), ('A003', DATE '2024-01-07', 120000), -- 1일씩 간격이 있어 연속 실패 ('A003', DATE '2024-01-09', 130000), ('A004', DATE '2024-02-10', 105000), ('A004', DATE '2024-02-11', 106000), ('A004', DATE '2024-02-12', 107000), ('A004', DATE '2024-02-13', 108000); -- A004는 4일 연속 (1/10~1/13) 조건을 만족 -- DBMS에 따라 DATE 'YYYY-MM-DD' 형식이 지원되지 않을 경우 TO_DATE('YYYY-MM-DD', 'YYYY-MM-DD') 등을 사용해야 할 수 있습니다. -- 1번 보기 : 정확하게 3일간 10만 이상인 데이터를 찾음. 문제에서는 3일 이상을 요구하고 있음 SELECT DISTINCT P1.CUSTOMER_ID FROM PAYMENT P1 JOIN PAYMENT P2 ON P1.CUSTOMER_ID = P2.CUSTOMER_ID JOIN PAYMENT P3 ON P2.CUSTOMER_ID = P3.CUSTOMER_ID WHERE P2.PAYMENT_DATE = P1.PAYMENT_DATE + 1 AND P3.PAYMENT_DATE = P2.PAYMENT_DATE + 1 AND P1.AMOUNT > 100000 AND P2.AMOUNT > 100000 AND P3.AMOUNT > 100000; -- 2번 보기 : 10만 이상인 고객 중 거래가 3건 이상인 고객 아이디를 반환함 SELECT CUSTOMER_ID FROM PAYMENT WHERE AMOUNT > 100000 GROUP BY CUSTOMER_ID HAVING COUNT(*) >= 3; -- 3번 : 연속된 날짜를 그룹화 하는 '차이 분석 기법' 방식 -- With 내부의 Select 구문을 실행하면, 연속된 날짜인 경우 동일한 GRP 날짜가 생깁니다. 연속되지 않은 경우 동일한 GRP 날짜가 생기지 않고요. WITH CONSECUTIVE_DAYS AS ( SELECT CUSTOMER_ID, PAYMENT_DATE, AMOUNT, ROW_NUMBER() OVER (PARTITION BY CUSTOMER_ID ORDER BY PAYMENT_DATE) AS RN, PAYMENT_DATE - ROW_NUMBER() OVER (PARTITION BY CUSTOMER_ID ORDER BY PAYMENT_DATE) AS GRP FROM PAYMENT WHERE AMOUNT > 100000 ) SELECT DISTINCT CUSTOMER_ID FROM ( SELECT CUSTOMER_ID, GRP, COUNT(*) AS CNT FROM CONSECUTIVE_DAYS GROUP BY CUSTOMER_ID, GRP HAVING COUNT(*) >= 3 ); -- 4번: 3일 이상 연속 조건을 확인하기 어려움. 금액이 10만 이상인 것 기준으로 조회 SELECT DISTINCT CUSTOMER_ID FROM ( SELECT CUSTOMER_ID, AMOUNT, LAG(AMOUNT, 1) OVER (PARTITION BY CUSTOMER_ID ORDER BY PAYMENT_DATE) AS PREV_AMOUNT, LAG(AMOUNT, 2) OVER (PARTITION BY CUSTOMER_ID ORDER BY PAYMENT_DATE) AS PREV2_AMOUNT FROM PAYMENT )일 WHERE AMOUNT > 100000 AND PREV_AMOUNT > 100000 AND PREV2_AMOUNT > 100000;
- 0
- 2
- 32
질문&답변
실전문제3회 41번문제
안녕하세요. kokodae.ko 님. 질문 남겨주셔서 감사합니다. 이 문제는 가장 적절한 sql 을 찾는 문제입니다. 말씀하신 것 처럼 보기 1, 3은 해당 데이터 내에서는 동일한 결과가 나옵니다. 하지만 3번 같은 경우, Lag 에 4 라는 값을 하드코딩 해두었기 때문에 데이터가 누락된 경우에는 완전히 잘 못된 값을 출력하게 됩니다. 예를 들어 한 개 쿼터의 값이 없는 경우에도 4개 이전의 값을 가지고 계산을 하게 됩니다. 그래서 가장 적절한 sql은 1번으로 선택하는 것이 좋습니다. 물론 실제시험에서도 이런 경우가 있을 수 있습니다. 실제로 제시된 데이터를 기준으로 정답을 선택하는 것이기 때문에 3번이 정답이라고 이의를 제기할 수 있습니다. (이런 경우가 종종 존재합니다) 이의를 제기해서 점수를 받을 수도 있겠지만 리스크 관리차원에서 1번 보기를 선택하는 게 더 좋을 것 같습니다. 아래, 참고하시라고 실습 스크립트를 남겨드립니다. 이미 실습을 해보신 것 같지만, 참고하십시오. 감사합니다. -- SALES 테이블 생성CREATE TABLE SALES ( YEAR INT, QUARTER INT, AMOUNT DECIMAL(10, 0));-- 예시 데이터 삽입INSERT INTO SALES (YEAR, QUARTER, AMOUNT) VALUES (2023, 1, 1000);INSERT INTO SALES (YEAR, QUARTER, AMOUNT) VALUES (2023, 2, 1200);INSERT INTO SALES (YEAR, QUARTER, AMOUNT) VALUES (2023, 3, 1500);INSERT INTO SALES (YEAR, QUARTER, AMOUNT) VALUES (2023, 4, 1800);INSERT INTO SALES (YEAR, QUARTER, AMOUNT) VALUES (2024, 1, 1300);INSERT INTO SALES (YEAR, QUARTER, AMOUNT) VALUES (2024, 2, 1400);-- 추가 데이터를 삽입하여 2024년 3분기/4분기 YoY 비교가 가능하도록 합니다.INSERT INTO SALES (YEAR, QUARTER, AMOUNT) VALUES (2024, 3, 1700);INSERT INTO SALES (YEAR, QUARTER, AMOUNT) VALUES (2024, 4, 2000);commit; -- 보기1 SELECT YEAR, QUARTER, AMOUNT, LAG(AMOUNT) OVER (PARTITION BY QUARTER ORDER BY YEAR) as PREV_AMOUNT, ROUND((AMOUNT - LAG(AMOUNT) OVER (PARTITION BY QUARTER ORDER BY YEAR)) / LAG(AMOUNT) OVER (PARTITION BY QUARTER ORDER BY YEAR) * 100, 2) as GROWTH_RATEFROM SALES;-- 보기2SELECT YEAR, QUARTER, AMOUNT, LAG(AMOUNT) OVER (ORDER BY YEAR, QUARTER) as PREV_AMOUNT, ROUND((AMOUNT - LAG(AMOUNT) OVER (ORDER BY YEAR, QUARTER)) / LAG(AMOUNT) OVER (ORDER BY YEAR, QUARTER) * 100, 2) as GROWTH_RATEFROM SALES;-- 보기3SELECT YEAR, QUARTER, AMOUNT, LAG(AMOUNT, 4) OVER (ORDER BY YEAR, QUARTER) as PREV_AMOUNT, ROUND((AMOUNT - LAG(AMOUNT, 4) OVER (ORDER BY YEAR, QUARTER)) / LAG(AMOUNT, 4) OVER (ORDER BY YEAR, QUARTER) * 100, 2) as GROWTH_RATEFROM SALES;-- 보기4SELECT YEAR, QUARTER, AMOUNT, FIRST_VALUE(AMOUNT) OVER (PARTITION BY QUARTER ORDER BY YEAR) as PREV_AMOUNT, ROUND((AMOUNT - FIRST_VALUE(AMOUNT) OVER (PARTITION BY QUARTER ORDER BY YEAR)) / FIRST_VALUE(AMOUNT) OVER (PARTITION BY QUARTER ORDER BY YEAR) * 100, 2) as GROWTH_RATEFROM SALES;
- 0
- 2
- 38
질문&답변
실전문제 3회차 18번
안녕하세요. 질문 주셔서 감사합니다. 내용 살펴봤습니다. 문제의 보기를 작성할 때 실수가 있었습니다. 18번 문제의 정답은 1, 3번이 모두 해당 하는 것이 맞습니다. 아래 AI 인턴이 남긴 답은 1, 3번 보기의 쿼리가 모두 중복 결과를 리턴하기 때문에 부정확합니다. 실수를 알려주셔서 감사드립니다. 참고로 아래에 쿼리 실습을 할 수 있도록 스크립트를 남깁니다. 문제는 업데이트 해서 다시 올려두었습니다. 감사드립니다. -- EMPLOYEE 테이블 생성CREATE TABLE EMPLOYEE ( EMP_ID INT PRIMARY KEY, NAME VARCHAR(50), DEPT_ID INT, SALARY INT);-- 데이터 삽입INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES (100, '김철수', 10, 5000);INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES (200, '이영희', 10, 4000);INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES (300, '박민수', 20, 4500);INSERT INTO EMPLOYEE (EMP_ID, NAME, DEPT_ID, SALARY) VALUES (400, '최종호', 20, 5500);-- 테이블 전체 확인 (선택 사항)SELECT * FROM EMPLOYEE;commit; SELECT * FROM EMPLOYEE WHERE (DEPT_ID, SALARY) IN ( -- 각 부서별 최대 급여와 부서 ID를 조회 SELECT DEPT_ID, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT_ID);SELECT * FROM EMPLOYEE E WHERE SALARY = ( -- 직원 E의 부서(E.DEPT_ID) 내에서 최대 급여를 조회 SELECT MAX(SALARY) FROM EMPLOYEE WHERE DEPT_ID = E.DEPT_ID);
- 0
- 2
- 36
질문&답변
SQLD 자격증
안녕하세요. spb03240님. 질문 남겨주셔서 감사합니다. SQL을 공부하면 데이터를 이해하고 다룰 수 있는 기본적인 역량을 향상 시킬 수 있습니다. 빅데이터 분석 실무에는 당연히 도움이 되고 필수적입다. 하지만 자격증 획득을 목적으로 할 경우는 좀 다릅니다. 빅데이터 분석기사를 획득하기 위해서 SQL을 공부하는 것이 필수적이지는 않고 시험 범위가 겹치지도 않습니다. 물론 ADsP 처럼 SQL 문제가 간혹 나올 수도 있겠지만 나오더라도 한 두 문제라 당락에 영향을 줄 정도는 아닐거라 짐작합니다. 질문자님께서 자격증 획득에 높은 비중을 둔다면 빅데이터 분석에 바로 도전하시는 걸 권해드리구요. 데이터 관련 분야에 직업을 구하실 계획이라면 SQL을 꼭 공부하셔서 자격증도 획득하시길 권해드립니다. 참고로 저는 SQL과 빅데이터 분석에 대한 실무와 강의를 모두 하고 있다는 걸 알려드립니다. 그럼 도움이 되셨으면 좋겠구요. 행복한 날들 보내십시오. 감사합니다.
- 0
- 1
- 48
질문&답변
계층형 질의 질문입니다.
안녕하세요. 질문에 아래와 같이 답변 드립니다. 답변이 도움이 되었으면 좋겠네요. 감사합니다. 다른 강의에서 Prior 자식 = 부모가 순방향이라고 하는 경우가 있나 보네요. 제가, 해당 강의를 듣지 않았기 때문에 뭐라고 말씀드리기는 어려울 거 같습니다.. 일반적으로 설명하자면, Prior 라는 키워드는 이전 행을 의미합니다. 만약 Prior empno = mgr (Prior 부모 = 자식)과 같이 작성하면, 이전 행의 사원 번호와 현재 행의 매니저 번호가 동일한 값을 찾는 방식으로 전개합니다. 이는 순방향입니다. 이때 시작점은 Start with mgr is null로 표현합니다. 왜냐하면 최상위 매니저 번호에서 아래 쪽으로 찾아 나가기 때문입니다.여기서 사원번호는 부모 칼럼이고 매니저 번호는 자식 칼럼입니다. 사원번호(부모 칼럼)는 주식별자(PK) 이고 매니저번호(자식 칼럼)는 외래참조키(FK) 죠. Emp 테이블은 자기 참조 관계를 가진 엔터티입니다. 자기 스스로 부모 자식 관계를 가진 엔터티인거죠. Prior 부모 = 자식 이라는 말은 엄밀하게 말하자면 Prior 부모 칼럼 = 자식 칼럼입니다. 풀어서 말하자면 이전 행의 부모 칼럼과 현재 행의 자식 칼럼이 일치하는 경우이죠.만약 Prior mgr = empno (Prior 자식 = 부모)와 같이 찾아갈 경우 역방향 전개입니다. 이때 시작점은 특정 지점(ex.start with ename = 'SMITH')을 선택합니다. 왜냐하면 특정 행에서 부터 상위로 찾아나가는 방식으로 이전 행의 매니저 번호와 현재 행의 사원번호가 동일한 값을 기준으로 찾기 때문입니다.순방향 역방향은 단순히 Prior 키워드로 판단하기는 어렵습니다. Start with 구문의 시작점을 보고 함께 판단해야 합니다. 또한 Prior 키워드는 이전 행을 의미한다는 점, 그리고 계층형 쿼리에서 사용하는 부모 자식이란 자기 참조 관계에 있는 엔터티의 부모 칼럼과 자식 칼럼을 의미한다는 점을 기억하고 순방향 역방향읗 판단해야 합니다. 노랭이 문제집의 63번 문제 보기 4번은 2군데가 잘못되어 있습니다. 보기 4번: ④ 오라클의 계층형 질의문에서 PRIOR 키워드는 CONNECT BY 절에서만 사용될 수 있으며, PRIOR 자식 = 부모 형태로 사용하면 순방향 전개로 수행된다.1) 첫 번째 잘못된 부분은 'Prior 키워드가 Connect By 절에서만' 사용될 수 있다고 한 부분입니다. Prior 키워드는 Select 절에서도 사용될 수 있습니다. 이때 Prior 키워드는 현재 행의 부모(이전) 행의 값을 가져오는 용도로 사용합니다. 노랭이 해설지에는 이 부분에 대한 설명만 제공하고 있습니다. 2) 두 번째 잘못된 부분은 'Prior 자식 = 부모 형태로 사용하면 순방향 전개로 수행된다' 라고 한 것입니다. 순방향은 Prior 부모 = 자식입니다. 이전 행의 부모 칼럼을 기준으로 자식을 찾아나가기 때문에 순방향입니다. 역방향은 Prior 자식 = 부모입니다. 이전 행의 자식 칼럼을 기준으로 부모를 찾아나가기 때문에 역방향입니다. (노랭이에서는 Prior 키워드만 가지고 순방향, 역방향을 알기가 어렵기 때문에 위 1)번만 설명한게 아닌가 짐작을 해봅니다.. )참고로.. 위 1번과 2번을 확인할 수 있는 쿼리를 아래에 작성해두었습니다.-- 순방향 전개 SELECT LEVEL,LPAD(' ', (LEVEL-1)*4) || ENAME AS "직원명",EMPNO,MGR,-- (1) 현재 행의 상사(부모)의 ENAME 값을 가져옵니다.PRIOR ENAME AS "직속_상사명"FROMEMP START WITH MGR IS NULL -- 최상위(루트)는 MGR이 NULL인 KINGCONNECT BY PRIOR EMPNO = MGR; -- 순방향 전개 (부모 칼럼 EMPNO = 자식 칼럼 MGR); - 수행 결과 (사진)-- 역방향 전개 SELECT LEVEL,LPAD(' ', (LEVEL-1)*3) || ENAME AS 조직도,EMPNO,MGRFROM EMP START WITH ENAME = 'SMITH' -- SMITH를 최하위 노드로 지정 (LEVEL 1)CONNECT BY PRIOR MGR = EMPNO -- 역방향 전개 (자식 칼럼 MGR = 부모 칼럼 EMPNO). 자식 칼럼(MGR)을 기준으로 부모 칼럼(EMPNO)를 찾으며 위로 전개 (역방향)ORDER SIBLINGS BY EMPNO;- 수행 결과 (사진)emp 테이블 데이터는 아래 링크에서 확인하시면 되겠습니다.https://java7.tistory.com/164
- 1
- 2
- 40




