Search
🔺

6. 집합연산자 & 계층형질의

1. Standard SQL

관계형 데이터베이스에서 원하는 정보를 유도하기 위한 기본 연산 집합
비 관계형 데이터베이스는 No SQL이라고 함 (ex. mongo DB)
→ 일반 집합 연산
→ 순수 관계 연산

일반 집합 연산

카디션 프로덕트: 두개의 테이블이 있을때 해당 테이블의 데이터에 대해서 모든 경우의 수를 살펴보는 것
→ JOIN과 연관이 있음
일반 집합 연산 SQL
합집합 → UNION
교집합 → INTERSECT
차집합 → EXCEPT
카티션 곱 → CROSS JOIN

순수 관계 연산

셀렉션: 테이블이 있을 때 특정 행들만 조회하는 것
프로젝션: 테이블이 있을 때 특정 컬럼에 대해서 조회하는 것
조인: 두개의 데이터를 공통된것만 새로 출력하는 것
디비전: 두개의 테이블이 있을 때 연관된 데이터만 출력하는 것
→ X, Z 모두가 연관 있는 건 A이기 때문에 A가 출력 따로 사용하지는 않음

2. 집합 연산자 개념

집합 연산자

두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중 하나
테이블에서 select한 컬럼의 수각 컬럼의 데이터 타입이 테이블 간 상호 호환이 가능해야 한다
각 컬럼의 수와 각 컬럼의 데이터 타입 수가 일치해야 한다
아래처럼 컬럼의 수와 데이터 수가 일치하지 않으면 오류남
키워드 정리
합집합: UNION, UNION ALL
교집합: INTERSECT
차집합: EXCEPT

UNION

두 개의 테이블을 하나도 만드는 연산
UNION에 사용할 컬럼의 수와 데이터 형식이 일치해야 함
합친 후에 테이블에서 중복된 데이터는 제거
이를 위해 UNION 테이블을 합칠 때 정렬과정을 발생 시킴
(하지만 최종 결과에 대해 올바른 정렬을 하려면 order by 구문 사용 필요)
관계형 대수의 일반 집합 연산에서 합집합의 역할을 함

UNION ALL

UNION과 거의 같은 기능을 수행
다만, UNION과 달리 중복제거와 정렬을 하지 않음
중복제거를 하지 않는다는 것이 가장 큰 차이점

INTERSECT

MySQL에서는 지원되지 않음
두 개의 테이블에 대해 겹치는 부분을 추출하는 연산
추출후에는 중복된 결과를 제거
관계형 대수의 일반 집합 연산에서 교집합의 역할

EXCEPT

MySQL에서는 지원되지 않음(키워드가 다름 minus로 사용중)
두 개의 테이블에서 겹치는 부분을 앞의 테이블에서 제외하여 추출
추출후에는 중복된 결과를 제거
관계형 대수의 일반 집합 연산에서 차집합역할

3. 계층형 질의

테이블에 계층열 데이터가 존재하는 경우 데이터를 조회하기 위해 사용하는 것
대표적인 데이터베이스 → ORACLE, SQL Server

계층형 데이터

동일 테이블에 계층적으로 상위와 하위 데이터가 포함되어 있는 데이터

계층형 질의 예시(Oracle)

Start with : 최상위 data에 대해서 기준을 잡아 주는 것
Connect by prior : 상위 데이터와 하위 데이터를 어떻게 연결시켜줄 거냐
LPAD('', 4*(level-1)) || 사원번호 → b 갯수만큼 a 문자열을 왼쪽에 배치
→ 좀더 계층적으로 나타낼 수 있다

Connect by 키워드(Oracle)

LEVEL : 계층에서 최상위 레벨 1을 기준으로 아래 레벨 표시
Connect_by_root: 현재 데이터의 가장 최상위 데이터 값을 표시
Connect_by_isleaf: 현재 전개할 데이터가 최사위 데이터인지 0과 1로 표시
0일경우: 최하위 데이터 아님
1일경우: 최하위 데이터 맞음
Sys_connect_by_path(a,b): 최상위 데이터부터 현재까지 경로 표시
예) sys_connect_by_path(사원번호, ':')

계층형 질의 예시(SQL Server)

계층형 질의 예시(MySQL/MariaDB)

WITH RECURSIVE CTE (칼럼, 칼럼, 칼럼) → 호출하고자 하는 칼럼명이 옴
→ 결과 테이블에 나오는 칼럼명들
AS → 뒤에 있는 쿼리를 계속해서 재귀호출해서 CTE 테이블을 만드는 것
오라클에서는 start with 이었던 것을 maria db에서는 'where'로 표현
→ 1번째 순환, 최상위 값이 추출됨
실무에서 응용해서 사용하기 보다는 거의 비슷하게 사용됨