자격증/SQLD 자격증 정리

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

sjoo 2021. 7. 20. 23:42

집합 연산자 (SET OPERATOR)

- 집합 연산자

두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터 조회

2개 이상의 질의 결과를 하나의 결과로 만들어준다.

1. UNION

   : 합집합, 중복된 행 하나로 표시

SELECT * FROM TB1
UNION
SELECT * FROM TB2;

TB1과 TB2를 UNION 함수를 사용하려고 한다.

강호동과 홍길동은 데이터가 중복되기 때문에 중복이 제거되서 한 행만 표시된다.

 

 ※ 컬럼의 개수가 같아야하고, 각 컬럼의 데이터 타입이 같아야한다.

     

 

 

2. UNION ALL

   : 합집합, 중복된 행 그대로 표시

SELECT * FROM TB1
UNION ALL
SELECT * FROM TB2;

TB1과 TB2를 UNION ALL 함수를 사용하려고 한다.

중복된 데이터가 그대로 표시된다.

 

 

 

3. INTERSECT

   : 교집합, 중복된 행 하나로 표시

SELECT * FROM TB1
INTERSECT
SELECT * FROM TB2;

TB1과 TB2를 INTERSECT 함수를 사용하려고 한다.

중복된 값의 결과가 하나로 표시된다.

 

 

 

4. EXCEPT

   : 앞의 SQL 결과에서 뒤의 결과를 뺀 차집합, 중복 행 하나로 표시(Oracle에서는 MINUS 사용)

SELECT * FROM TB1
MINUS
SELECT * FROM TB2;

TB1과 TB2를 MINUS 함수를 사용하려고 한다.

TB1에서 TB2의 결과를 빼서 TB1에 정두준만 표시된다.

 

 

계층형 질의와 셀프 조인

- 계층형 질의

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

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 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터(부모->자식) 방향으로 전개하는 순방향 전개 (반대는 역방향 전개)

오라클은 계층형 질의를 사용할 때 다음과 같은 가상 칼럼(Pseudo Column)을 제공한다.

 

 

- 셀프조인

한 테이블 내에서 두 컬럼이 연관관계가 있는 경우, 동일한 테이블 사이의 조인으로 FROM 절에 동일 테이블이 2번이상 나타난다.

 

※ 반드시 테이블 별칭을 사용해야 한다.

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