집합연산자란 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법이다.
테이블에서 select한 컬럼의 수와 각 컬럼의 데이터 타입이 테이블간 일치해야 오류가 나지 않는다.
select name,email from class_a
union
select name,email from class_b
두 개의 테이블에서 겹치는 부분을 추출한다.(교집합)
추출 후에는 중복된 결과를 제거한다.
select name, email from class_a
intersect
select name, email from class_b
두 개의 테이블에서 겹치는 부분을 앞의 테이블에서 제외하여 추출한다.(차집합)
추출 후에는 중복된 결과를 제거한다.
select name, email from class_a
except
select name, email from class_b
계층형 질의란 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용하는 것이다.
대표적인 데이터베이스로는 ORACLE, SQL SERVER가 있다.
select level, 자식 column, 부모 column, 타겟 column
from 테이블 이름
start with 부모 column is NULL
-- 부모 컬럼이 NULL 인 행이 루트가 된다 --
connect by prior 자식 column = 부모 column
-- 상위 데이터와 하위 데이터의 연결 방식--
WITH REVURSIVE CTE(member_id, manager_id, lvl)
AS (
SELECT member_id, manager_id, 0 AS lvl
FROM MEMBER
WHERE manager_id IS NULL
UNION ALL
SELECT a.member_id, a.manager_id, b.lvl + 1
FROM MEMBER a
JOIN CTE AS b
ON a.manager_id = b.memeber_id
)
SELECT member_id, manager_id, lvl
FROM CTE
ORDER BY member_id, lvl;