[홍쌤의 데이터랩, SQLD n과목 완벽 정리] 영상를 개인이 정리하여 [원작자의 허가 이후] 올린 글이며,
[개인이 추가로 정리한 내용]이 포함되어 있습니다.
목차
집합 연산자
- SELECT문 결과를 하나의 집합으로 간주, 그 집합에 대한 합집합, 교집합, 차집합 연산
- SELECT문과 SELECT문 사이에 집합 연산자 정의
- 개별 쿼리에 ORDER BY 불가, GROUP BY 가능
- 전체 집합의 데이터 타입과 컬럼명은 첫번째 집합을 따름
- 대상 테이블이 같아도 조건을 상이하게 해서 활용 가능
- 테이블의 실질적 통합이 아닌, 가상 테이블을 구성
=> 사용되는 집합의 컬럼 타입, 순서가 동일해야 함
=> 컬럼명, 사이즈, 제약조건 동일할 필요 없음
=> 자동 형변환 수행, 형변환 함수를 통한 명시적 변환 권장
JOIN과의 차이
e.g. UNION vs JOIN
UNION - 공통 컬럼기반 행 추가 (수직적 결합)
JOIN - 매개체(공통 컬럼)기반 행/열/행렬 추가 (수평적 결합)
1. 합집합 (UNION, UNION ALL)
- 두 집합의 총 합(전체) 출력
=> UNION은 데이터 중복 제거 후 반환 (DISTINCT)
=> UNION ALL은 데이터 전체 반환
- 중복제거를 위한 정렬을 내부적으로 수행
=> 중복된 데이터가 없음이 확실한 경우 반환은 같으나, UNION ALL이 성능상 유리
2. 교집합 (INTERSECT)
- 두 집합 사이의 공통 행(= 교집합) 반환
3. 차집합 (MINUS)
- 두 집합 사이에의 공통이 아닌 행(= 차집합) 반환
- A-B와 B-A의 반환 순서 다름에 유의
통합 예제
1) UNION - 10번 부서가 아닌 직원과 20번 부서인 직원의 합집합
SELECT ...
FROM A
WHERE DEPTNO != 10
UNION
SELECT ... -- 상위 집합과 컬럼 타입, 순서가 동일 / 컬럼명, 사이즈, 제약조건 동일할 필요 없음
FROM A
WHERE DEPTNO = 20; -- 같은 테이블을 대상으로 조건을 달리하여 활용
2) 개별 쿼리에 ORDER BY 불가
SELECT ...
FROM A
WEHERE ...
ORDER BY ID -- 개별 쿼리에 ORDER BY 불가
UNION ALL
SELECT ...
FROM A
WHERE ...
ORDER BY ID -- 최종 쿼리에 ORDER BY 가능
3) 개별 쿼리에 GROUP BY 가능 (단, 컬럼 타입, 순서가 동일해야 함)
SELECT ...
FROM A
WEHERE ...
GROUP BY ID
INTERSECT
SELECT ...
FROM A
WHERE ...
GROUP BY ID
4) 상이한 테이블에 집합 연산자 적용 가능 (단, 컬럼 타입, 순서가 동일해야 함)
SELECT a1, a2
FROM A
WEHERE ...
GROUP BY ID
MINUS
SELECT b1, b2 -- a1, a2와 컬럼 타입, 순서가 동일해야 함
FROM B
WHERE ...
GROUP BY ID
'CS - 강의, 서적 > [SQLD] 홍쌤의 데이터랩' 카테고리의 다른 글
[SQLD] 2-19. SQL2 (DDL, CTAS, PURGE, 제약 조건) (0) | 2024.09.21 |
---|---|
[SQLD] 2-17~18. SQL1 (DML, TCL, LOCK) (0) | 2024.09.21 |
[SQLD] 2-9. 서브 쿼리 (스칼라 서브 쿼리, 인라인 뷰, WHERE절 서브 쿼리 다수) (0) | 2024.09.18 |
[SQLD] 2-7~8. 조인 (USING/ON, Oracle/ANSI 표준별 조인) (1) | 2024.09.16 |
[SQLD] 2-2~6. SQL (Alias, DUAL Table, SELECT, FROM, WHERE, GROUP/ORDER BY, HAVING) (0) | 2024.09.16 |