-
[데이터베이스] 집합연산자 정리개발/데이터베이스 2021. 12. 16. 18:26
ORACLE을 모델 삼아서 작성 하였습니다.
집합연산자를 이용하여 작성 되어 있는 쿼리문에 문제가 있던 프로시저문을 수정 했던 적이 생각나서 이번 기회에 집합연산자에 대해서 간단하게 정리 해 보려고 합니다.
집합연산자
집합연산자는 둘 이상의 구성 요소 query 결과를 하나의 결과로 조합합니다. 집합 연산자가 포함된 query는 복합 query라고 합니다. 그리고 집합연산자는 모두 우선 순위가 같아서 여러개의 집합 연산자가 포함되어 있으면 괄호에 명시적으로 다른 순서가 지정되어있지 않는 이상 왼쪽(위)에서 오른쪽(아래)로 연산자를 평가합니다.
연산자 반환 UNION 중복 행이 제거된 두 query의 행 UNION ALL 중복 행이 포함된 두 query의 행 INTERSECT 두 query에 공통적인 행 MINUS 첫번째 query에 있는 행 중 두번쨰 query에 없는 행 집합연산자 다이얼그램 집합 연산자 규칙
- select 리스트의 표현식은 갯수가 일치해야 한다.
- 후속 query에 있는 각 열의 데이터 유형은 첫번쨰 query에 있는 상응하는 열의 데이터 유형과 일치해야 한다.
- 실행 순서를 변경하는데 괄호를 사용할 수 있다.
- order by 절은 명령문의 맨 끝에만 올 수 있다.(union all의 경우를 제외하고는 기본적으로 오름차순으로 정렬된다.)
UNION 연산자
UNION 연산자는 한쪽 query에 의해 선택된 모든 행을 반환합니다. UNION 연산자를 사용하여 다중 테이블의 모든 행을 반환하고 중복 행을 제거합니다.
특징
- 선택한 열의 갯수가 동일해야 한다.
- 선택한 열의 데이터 유형이 동일한 데이터 유형 그룹(숫자 또는 문자)에 속해야 한다.
- 열 이름은 동일하지 않아도 된다.
- UNION은 선택된 모든 열에 적용된다.
- NULL 값은 중복 검사시 무시되지 않는다.
- 기본적으로 출력은 select 절의 열을 기준으로 오름차순으로 정렬된다.
UNION 다이얼그램 UNION ALL 연산자
UNION ALL 연산자를 사용하여 여러 query에서 모든 행을 반환합니다.
특징
- UNION 연산자와 UNION ALL 연산자에 대한 특징은 동일하다. 단, UNION ALL은 UNION과 달리 중복 행을 제거하지 않고 기본적으로 출력이 정렬되어 있다.
INTERSECT 연산자
INTERSECT 연산자를 사용하여 여러 query에 공통되는 모든 행을 반환합니다.
특징
- query에서 select 문으로 선택된 열의 갯수와 데이터 유형은 query에 사용된 모든 select 문에서 동일해야 한다.
- 열 이름은 동일하지 않아도 된다.
- 교차 테이블 순서를 반대로 해도 결과에는 영향을 주지 않는다.
- INTERSECT에서는 NULL 값이 무시되지 않는다.
INTERSECT 다이얼그램 MINUS 연산자
첫번째 query를 통해 선택 되었으며 두번째 query 결과 집합에는 없는 모든 구분 행을 반환합니다.
특징
- query에 사용되는 모든 select 문에서 열의 갯수가 동일해야 한다.
- 해당 query의 select 문에서 선택된 열의 데이터 유형은 동일한 데이터 유형 그룹에 속해야 한다.
- 열 이름은 동일하지 않아도 된다.
MINUS 다이얼그램 사용시 주의사항 (SELECT 문 일치)
집합연산자를 사용할때 열이 두 테이블 중 하나에 없는 경우에는 TO_CHAR 함수 또는 기타 변환 함수를 사용하여 데이터 유형을 일치 시켜야 합니다.
예시
select first_name, job_id, to_date(hire_date) from employees union select first_name, job_id, to_date(null) from retired_employees;
집합 연산에서 ORDER BY 절 사용
- ORDER BY 절은 복합 query의 맨 끝에 한 번만 올 수 있다.
- 구성 요소 query에 개별적으로 ORDER BY 절을 사용할 수 없다.
- ORDER BY 절은 첫번쨰 select query의 열만 인식한다.
- 기본적으로 첫번째 select query의 첫번째 열을 기준으로 오름차순으로 출력이 정렬된다.
'개발 > 데이터베이스' 카테고리의 다른 글
[Oracle] Lock에 대한 정리 (2) 2022.01.10 [Oracle] Undo(언두)란 (0) 2022.01.03 [데이터베이스] 시퀀스 정리 (1) 2021.12.05 [데이터베이스] 트리거 정리 (0) 2021.11.26 [데이터베이스] 인덱스 정리 (0) 2021.11.21