티스토리 뷰
Programming/SQL
[Oracle] 계층형 질의 (START WITH, CONNECT BY) 예제 ORDER SIBLINGS BY, ORDER BY 차이
감성적인 개발자 2022. 7. 6. 23:14계층형 질의
계층형 질의를 이용해 EMP 테이블에서 사원간의 서열을 출력한다.
START WITH와 CONNECT BY 절을 이용하면 LEVEL을 출력할 수 있다. START WITH절은 루트노드를 지정하며 CONNECT BY 절은 부모노드와 자식노드 간의 관계를 지정한다.
SELECT rpad(' ', (level-1)*3) || ename as employee
, level
, sal
, job
FROM EMP
START WITH ename='KING'
CONNECT BY PRIOR empno = mgr;

CONNECT BY 조건
BLAKE와 이를 부모노드로 가진 사원을 제외하여 노드를 구성한다.
CONNECT BY PRIOR empno = mgr AND ename != 'BLAKE';

START WITH
루트노드를 지정해준다. 같은 쿼리라도 루트노드를 지정해주는 것에 따라 출력결과는 달라진다.
KING이 아닌 JONES를 루트노드로 하면 JONES 하위 노드들만 출력된다.
START WITH ename='JONES'

CONNECT BY
부모 노드와 자식노드간의 관계를 지정한다. 왼쪽에 부모노드가 되는 컬럼을 오른쪽에 자식 노드가 되는 컬럼을 지정한다.
CONNECT BY PRIOR empno = mgr;

정렬 : ORDER SIBLINGS BY 와 ORDER BY
ORDER SIBLINGS BY를 이용하면 루트노드와 자식노드 간의서열을 유지하면서 정렬이 이루어진다.
ORDER SIBLINGS BY sal ASC;
ORDER SIBLINGS BY sal DESC;

반면, ORDER BY 절을 그대로 사용하게되면 루트노드와 자식노드간의 서열을 무시하고 정렬이 이루어진다.
ORDER BY sal ASC;
ORDER BY sal DESC;

'Programming > SQL' 카테고리의 다른 글
| [Oracle] 오라클 LISTAGG 함수로 테이블 결과 가로로 출력하기, 줄바꿈 출력 예제 (0) | 2022.08.03 |
|---|---|
| [Oracle] 계층형 질의 CONNECT_BY_PATH 예제 (0) | 2022.07.07 |
| [Oracle] 테이블 정의서(코멘트, 타입, PK, NULL여부, 디폴트 값) 조회 (0) | 2022.06.30 |
| [Oracle] CREATE TABLE ORA-00907: 누락된 우괄호 (0) | 2022.06.15 |
| [Oracle] 오라클 설치 버전 확인 쿼리 (0) | 2022.06.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C++
- 인턴
- 네트워크
- Thymeleaf
- 개발용어
- 오류
- 부트스트랩
- 프로그래머스
- 이클립스
- C
- CSS
- 넥사크로
- SQL
- 오라클
- 환경설정
- JVM
- 스프링
- Open API
- Java
- 국비교육
- CS
- 데이터베이스
- HeidiSQL
- JSP
- 백준
- svn
- 스프링부트
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
글 보관함
