[SQLD] #11. SQL 활용 - 집합 연산자/계층형 질의와 셀프 조인

김정인·2021년 2월 22일
0

SQLD

목록 보기
11/16

집합 연산자 (SET OPERATOR)

💡 집합 연산자

    두개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중 하나로, 2개 이상의 질의 결과를 하나의 결과로 만들어줌

  • SELECT절의 칼럼 수가 동일하고 동일 위치에 존재하는 칼럼의 데이터타입이 상호 호환 가능해야 함

💡 집합 연산자의 종류

집합 연산자의미
UNION합집합, 중복된 행 하나로 표시
UNION ALL- 합집합, 중복된 행 그대로 표시
- 중복 없을 시 UNION과 결과가 동일
INTERSECT교집합, 중복된 행 하나로 표시
EXCEPT앞의 SQL 결과에서 뒤의 결과를 뺀 차집합, 중복 행 하나로 표시
( Oracle에서는 MINUS 사용 )

계층형 질의와 셀프 조인

💡 계층형 질의


   테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용

  • 동일 테이블에 계층적으로 상/하위 데이터가 포함된 데이터를 계층형 데이터라 함 (사원 테이블의 사원들 사이에 하위 사원과 상위 사원 관계)
SELECT ...
FROM 테이블
WHERE condition AND condition...
START WITH condition
CONNECT BY [NOCYCLE] condition AND condition...
[ORDER SIBILINGS BY colum, column...]
  • CONNECT BY : 트리 형태의 구조로 쿼리 수행 (루트 노드부터 하위 노드의 쿼리를 실행함) 상사 이름과 사람 이름을 조인하여 상사 밑에 넣기
  • START WITH : 시작 조건 지정
  • CONNECT BY PRIOR : 조인 조건 지정
  • NOCYCLE : 순환구조의 발생지점까지만 전개
  • PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터(부모->자식) 방향으로 전개하는 순방향 전개 (반대는 역방향 전개)
가상칼럼의미
LEVEL검색 항목의 깊이, 최상위 계층의 레벨은 1
CONNECT_BY_ISLEAF리프데이터면 1, 그렇지 않으면 0
CONNECT_BY_ISCYCLE부모 노드와 자식 노드가 같을 때 1. 아니면 0

함수의미
CONNECT_BY_ROOT전개할 데이터의 루트 데이터 표시
SYS_CONNECT_BY_PATH현재 전개할 데이터의 루트 데이터 표시

💡 셀프 조인


한 테이블 내에서 두 칼럼이 연관 관계가 있는 경우. 동일 테이블 사이의 조인으로 FROM 절에 동일 테이블이 2번 이상 나타남. 반드시 테이블 별칭을 사용해야 함

SELECT ALIAS명1.칼럼명, ALIAS명2.칼럼명, ...
FROM 테이블1 ALIAS명1, 테이블2 ALIAS명2
WHERE ALIAS명1.칼럼명2 = ALIAS명2.칼럼명1;

0개의 댓글

관련 채용 정보