관계 대수와 관계 연산
관계 연산 Relational Operations
관계형 연산은 하나 또는 그 이상의 테이블(릴레이션) 간의 데이터를 다루는 연산
을 뜻한다. 하나 이상의 릴레이션에서 필요한 데이터를 추출
하는 연산이나, 릴레이션 간 연산을 통해 새로운 릴레이션을 생성
하는 등의 연산을 포함한다.
A relational operation involves manipulating one or more tables, or relations, to result in another table. The three kinds of relational operations are selection, projection, and join. This chapter includes examples of selection, projection, and simple joining.
관계 대수
관계 대수는 관계형 모델에서 데이터를 조작하고 검색하기 위한 절차적 질의 언어이다. 릴레이션의 생성이나 릴레이션으로부터의 데이터 추출, 데이터 변환 등의 알고리즘을 추상화 한 것으로 볼 수 있다. 이러한 관계 대수는 SQL과 같은 쿼리 언어의 이론적 기반
이 된다.
옳은 설명은 아니나, 쉽게 말하자면 DBMS 상에서 사용되는 쿼리를 수식화 한 형태라고 보면 된다. 다시 말하지만 옳은 설명이 아니다. 실제로는 DBMS 의 쿼리가 관계 대수를 하나의 질의 언어로 구현한 것이다.
관계형 모델 | > | DBMS |
---|---|---|
관계형 모델 | 데이터베이스 설계의 이론적 기초가 됨 | |
릴레이션 | 데이터베이스 테이블로 구현됨 | |
릴레이션의 속성(컬럼) | 데이터베이스의 테이블로 구현됨 | |
릴레이션의 튜플(레코드) | 데이터베이스의 레코드로 구현됨 | |
관계 대수 | SQL 질의문을 설계하는 이론적 기초가 됨 |
관계 대수 연산의 종류
관계 대수 연산의 종류
(1) 관계 대수 연산
연산 | 연산자 | 설명 |
---|---|---|
셀렉트 연산 select |
σ | 주어진 릴레이션에서 조건을 만족하는 레코드를 갖는 릴레이션을 생성 쉽게 말해, 조건을 만족하는 레코드(행=튜플)을 선택하는 연산 |
프로젝션 (투영) 연산 projection |
π | 주어진 릴레이션을, 지정한 컬럼들만을 갖는 릴레이션으로 재구성 쉽게 말해, 특정 컬럼만을 반환하는 연산. |
카티시언 프로덕트 (교차곱) cartesian product |
x | 두 릴레이션 에 포함된 레코드 간의 모든 조합 을 생성 |
조인 연산 join |
⋈ | 두 릴레이션에서 조건을 만족하는 레코드 간의 조합 카티시언 프로덕트는 모든 조합을 생성했다면, 조인은 조건을 만족하는 레코드만 조합한다. 관계대수에서 조인 연산은 (1) 카티시언 프로덕트 -> (2) 조건에 맞는 레코드 셀렉트 순으로 진행된다. 다만 DBMS 에서는 이 순서를 따르지 않고, 최적화된 방식으로 처리한다. |
분할 연산 division | ÷ | |
리네임 연산 rename |
ρ | 릴레이션이나 컬럼의 이름을 변경 하는 데 사용되는 연산이름의 가독성을 높이거나 이름 충돌을 방지하기 위해 사용된다. 또한 관계 연산에 따라 생성되는 새로운 릴레이션을 재사용하기 쉽도록 이름을 부여하는 데에도 사용된다. |
합집합 union |
∪ | 릴레이션을 집합, 각 레코드를 원소라고 할 때 두 릴레이션이 포함한 모든 레코드를 갖는 릴레이션을 생성 집합 연산에서 두 릴레이션은 컬럼 수(차수) 가 같아야 하며, 각 릴레이션의 i번째 컬럼의 도메인이 서로 같아야 한다. 주의 : 양쪽 릴레이션에 모두 포함되는 레코드는 ‘레코드 유일성’에 의해 중복이 제거 되고 한 번만 표현된다. |
교집합 intersection |
∩ | 양쪽 릴레이션에 동시에 포함되는 레코드를 갖는 릴레이션을 생성 한다.집합연산이므로 두 릴레이션의 차수와 각 컬럼의 도메인이 같아야 한다. |
차집합 difference |
- | 한 릴레이션에는 포함되지만, 다른 릴레이션에는 포함되지 않는 레코드를 가지는 릴레이션을 생성 한다.역시 집합연산이므로 두 릴레이션의 차수와 각 컬럼들의 도메인이 같아야 한다. |
(2) 확장 연산자
기본 연산자만 사용할 경우, 복잡한 질의를 작성할 때 연산이 길어지고 가독성이 떨어질 수 있다. 이를 해결하기 위해 자주 사용되는 기본 연산자들의 조합을 표현하는 확장 연산자
가 도입되었다. 확장 연산자는 보다 간결하고 직관적으로 표현할 수 있도록 설계되었다.
연산 | 연산자 | 설명 |
---|---|---|
자연 조인 연산자 Natural Join |
⋈ | 조인을 수행하면서 동일한 컬럼으로 판단되는 컬럼을 자동으로 결합한다. 이 때, 결합의 기준이 되는 공통 컬럼의 값을 기준으로 레코드가 조합된다. |
세미 조인 연산자 Semi Join | ⋉ | 조인의 결과 중 첫 번째 릴레이션의 속성(컬럼)만 반환 |
외부 조인 연산자 Outer Join | ⋈⟖ | 조인의 결과에서 NULL 값을 포함하여 모든 레코드 조합을 반환한다. Left Outer Join, Right Outer Join, Full Outer Join 이 있다. |
할당 연산자 Assignment |
← | 관계 대수식의 결과를 임시적으로 변수에 저장하는 연산자. 해당 변수는 다른 관계 대수식에서 마치 하나의 릴레이션처럼 사용될 수 있다. |
(3) 집계 함수 연산
집계함수는 그루핑 기준이 있는 연산과, 그루핑 기준이 없는 연산으로 구분된다. 그루핑 기준이 없는 연산은 릴레이션에 포함된 모든 레코드를 하나의 그룹으로 인식하고 집계함수를 적용한다. 반면 그루핑 기준이 있는 연산의 경우 기준이 되는 컬럼의 값이 같은 레코드를 그룹화하고, 각각의 그룹별로 집계를 수행한다.
연산 | 연산자 | 설명 |
---|---|---|
count |
COUNT | 집계되는 원소(레코드)들의 개수를 반환한다. |
summation |
SUM | 집계되는 값들의 총합을 반환한다. |
average |
AVG | 집계되는 값들의 평균값을 반환한다. |
minimum |
MIN | 집계되는 값들 중 최소값을 반환한다. |
maximum |
MAX | 집계되는 값들 중 최대값을 반환한다. |
SELECT 연산
주어진 릴레이션에서 조건을 만족하는 레코드를 갖는 릴레이션을 생성
하는 연산.
쉽게 말해, 조건을 만족하는 레코드(행=튜플)을 선택하는 연산.
원본 릴레이션
(1) 소속이 영업부인 레코드 SELECT
(2) 소속이 영업부이면서 연봉이 7000 이상인 레코드 SELECT
프로젝션 projection
주어진 릴레이션을, 지정한 컬럼들만을 갖는 릴레이션으로 재구성
하는 연산.
쉽게 말해, 특정 컬럼만을 반환하는 연산.
원본 릴레이션
(1) 릴레이션에서 사원번호, 이름, 직급 컬럼을 프로젝션
(2) 직급이 대리인 직원의 이름 컬럼을 프로젝션
카티시언 프로덕트 cartesian product
두 릴레이션
에 포함된 레코드 간의 모든 조합
을 생성한다.
원본 릴레이션
사원정보 릴레이션과 부서정보 릴레이션 간 카티시언 프로덕트
조인 join
두 릴레이션에서 조건을 만족하는 레코드 간의 조합
으로 이루어진 릴레이션을 생성한다. 카티시언 프로덕트는 모든 조합을 생성했다면, 조인은 조건을 만족하는 레코드만 조합한다.
관계대수에서 조인 연산은 (1) 카티시언 프로덕트 -> (2) 조건에 맞는 레코드 셀렉트 순으로 진행된다. 다만 DBMS 에서는 이 순서를 따르지 않고, 최적화된 방식으로 처리한다.
원본 릴레이션
사원정보 릴레이션과 부서정보 릴레이션 간 부서명이 동일한 레코드 조합 조인
조인은 카티시언 프로덕트와 셀렉트의 조합으로도 표현할 수 있다.
리네임 renaim
릴레이션이나 컬럼의 이름을 변경
하는 데 사용되는 연산이다. 이름의 가독성을 높이거나 이름 충돌을 방지하기 위해 사용된다. 또한 관계 연산에 따라 생성되는 새로운 릴레이션을 재사용하기 쉽도록 이름을 부여하는 데에도 사용된다.
원본 릴레이션
(1) 사원 중 총무부 소속 사원들에 대한 사원정보 릴레이션의 이름을 총무부직원정보라고 명명한다.
(2) 1번에 더해 컬럼값들을 변경한다.
할당 연산 assignment
관계 대수식의 결과를 임시적으로 변수에 저장하는 연산. 해당 변수는 다른 관계 대수식에서 마치 하나의 릴레이션처럼 사용될 수 있다.
원본 릴레이션
(1) 사원정보 릴레이션에서 영업부 소속인 직원들의 정보를 SELECT 하여 릴레이션을 생성하고, 이를 ‘영업사원정보’ 변수에 할당한다.
(2) 영업사원정보 릴레이션에서 직급이 과장인 직원정보를 SELECT 한다.
집계함수
집계함수는 그루핑 기준이 있는 연산과, 그루핑 기준이 없는 연산으로 구분된다. 그루핑 기준이 없는 연산은 릴레이션에 포함된 모든 레코드를 하나의 그룹으로 인식하고 집계함수를 적용한다. 반면 그루핑 기준이 있는 연산의 경우 기준이 되는 컬럼의 값이 같은 레코드를 그룹화하고, 각각의 그룹별로 집계를 수행한다.
원본 릴레이션
(1) 사원 중 총무부 소속 사원들에 대한 사원정보 릴레이션의 이름을 총무부직원정보라고 명명한다.
(2) 1번에 더해 컬럼값들을 변경한다.
(2) 1번에 더해 컬럼값들을 변경한다.
설명을 생략한 연산
합집합 union, 교집합 intersection, 차집합 difference, 자연 조인 natural join