관계 데이터베이스의 언어
- 관계 대수의 배경 : 먼저 SQL이란 Structure Query Language의 약자로, 데이터베이스에서 질의를 위해 사용되는 언어입니다. 과거에는 이 SQL문 대신 관계 대수라는 것을 이용하였습니다. 관계 대수는 상용 관계 DBMS들에서 널리 사용되는 SQL의 이론적인 기초이면서, SQL을 구현하고 최적화하기 위해 오늘날 DBMS의 내부 언어로서도 사용됩니다.
- 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
- 관계 해석 (Relational calculus) : 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인지는 명시하지 않는 선언적인 언어
- 관계 대수 (Relational algebra) : 어떻게 질의를 수행할 것인가를 명시하는 절차적 언어
- SQL (Structure Query Language)
- 상용 관계 DBMS들의 사실상의 표준 질의어
- 사용자는 SQL을 사용하여 관계 데이터베이스에 릴레이션을 정의하고, DB의 정보를 검색하고, 관계 데이터베이스를 갱신하는 등 여러 가지 무결성 제약조건들을 명시할 수 있다.
관계 대수의 특징
- 기존의 릴레이션들로부터 새로운 릴레이션을 생성한다.
- 릴레이션이나 관계 대수식의 결과 릴레이션에 연산자들을 적용하여 보다 복잡한 결과 릴레이션을 점차적으로 만들 수 있다.
- 기본적인 연산자들의 집합으로 이루어진다.
- 산술 연산자와 유사하게 단일 릴레이션이나 두 개의 릴레이션을 입력으로 받아 하나의 결과 릴레이션을 생성한다.
- 결과 릴레이션은 또 다른 관계 연산자의 입력으로 사용될 수 있다.
관계 연산자들의 종류와 표기법
분류 | 연산자 | 표기법 | 단항 또는 이항 |
필수적인 연산자 | 실렉션 (Selection) |
| 단항 |
프로젝션 (Projection) |
| 단항 | |
합집합 (Union) |
| 이항 | |
차집합 (Difference) | ㅡ | 이항 | |
카티션 곱 (Cartesian Product) |
| 이항 | |
편의를 위해 유도된 연산자 | 교집합 (Intersection) |
| 이항 |
세타 조인 (Theta Join) | ⋈ | 이항 | |
동등 조인 (Equijoin) | ⋈ | 이항 | |
자연 조인 (Natural Join) | * | 이항 | |
세미 조인 (Semijoin) | ⋉ | 이항 | |
디비전 (Division) |
| 이항 |
- Selection 연산자
- 한 릴레이션에서 실렉션 조건(Selection Condition 또는 Predicate)을 만족하는 투플들의 부분 집합을 생성하는 연산자. - 투플이 여러 개 있으나 중복 투플은 존재할 수 없다.
- 결과 릴레이션의 차수는 입력 릴레이션의 차수(열의 수)와 같다.
- 결과 릴레이션의 카디날리티(행의 수)는 항상 입력 릴레이션 것보다 작거나 같다.
- 실렉션 조건은 보통 릴레이션의 임의의 컬럼과 상수, 비교연산자[ =, <>, <=, <, =>, > 등], 부울 연산자[ AND, OR, NOT 등]를 포함한다.
- Projection 연산자
- 한 릴레이션의 애트리뷰트들의 부분 집합을 구하는 연산자
- 결과로 생성되는 릴레이션은 스키마에 명시된 애트리뷰트들만 가진다.
- 결과 릴레이션에는 기본 키가 아닌 애트리뷰트에 한하여 중복된 투플들이 존재할 수 있다.
- 집합 연산자
- 릴레이션이 투플들의 집합이기 때문에 기존의 집합 연산이 릴레이션에 적용된다.
- 합집합(Union), 교집합(Intersection), 차집합(Difference) 연산자
- 집합 연산자의 입력으로 사용되는 두 개의 릴레이션은 합집합 호환이어야 한다.
- 합집합 호환 (Union Compatible) : 집합 연산의 조건으로, 정의는 아래와 같다.
- 두 릴레이션 R1(A1, A2, ..., An)과 R2(B1, B2, ..., Bm)이 합집합 호환일 필요 충분 조건은 n=m이고, 모든 1<=i<=n에 대해 domain(Ai)=domain(Bi)
- 쉽게 말해, 컬럼 수가 동일해야 하고 스키마에서 정의한 컬럼의 데이터 타입이 동일해야 한다.
- 프로젝션 연산의 결과도 릴레이션이므로 합집합 호환이 된다면 두 결과 릴레이션은 집합 연산이 가능하다.
- Union 연산자
- 두 릴레이션 R과 S의 합집합 R S 는 R 또는 S에 있거나 R와 S 모두에 속한 투플들로 이루어진 릴레이션이다.
- 결과 릴레이션에서 중복된 투플들은 제외된다.
- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 애트리뷰트의 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.
- Intersection 연산자
- 두 릴레이션 R과 S의 교집합 R S 는 R과 S 모두에 속한 투플들로 이루어진 릴레이션이다.
- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 결과 릴레이션의 애트리뷰트 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.
- Difference 연산자
- 두 릴레이션 R과 S의 차집합 (R - S) 는 R에는 속하지만 S에는 속하지 않은 투플들로 이루어진 릴레이션이다.
- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 결과 릴레이션의 애트리뷰트 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.
Cartesian Product 연산자
- 카디날리티가 i인 릴레이션 R(A1, A2, ..., An)과 카디날리티가 j인 릴레이션 S(B1, B2, ..., Bm)의 카티션 곱 R S 는 차수가 (n+m)이고, 카디날리티가 (i*j)이고, 애트리뷰트가 (A1, A2, ..., An, B1, B2, ..., Bm)이며, R와 S의 투플들의 모든 가능한 조합으로 이루어진 릴레이션이다.
- 카티션 곱의 결과 릴레이션의 크기는 매우 클 수 있으며, 사용자가 실제로 원하는 것은 카티션 곱의 결과 릴레이션의 일부인 경우가 대부분이므로 카티션 곱 자체는 유용한 연산자가 아니다.
조인 연산자
- 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자
- 관계 데이터베이스에서 두 개 이상의 릴레이션들의 관계를 다루는데 매우 중요한 연산자이다.
세타 조인 (Theta Join) 과 동등 조인 (Equijoin)
- 두 릴레이션 R(A1, A2, ..., An)과 S(B1, B2, ..., Bm)의 세타 조인의 결과는 차수가 (n+m)이고, 애트리뷰트가 (A1, A2, ..., An, B1, B2, ..., Bm)이며, 조인 조건을 만족하는 투플들로 이루어진 릴레이션이다.
- 세타 조인 조건은 { =, <>, <=, <, >=, > } 중 하나이다.
- 동등 조인 조건은 세타 조인 중에서 비교 연산자가 =인 조인이다.
자연 조인 (Natural Join)
- 동등 조인의 결과 릴레이션에서 조인 컬럼의 중복을 제외한 조인
- 여러 가지 조인 연산자들 중에서 가장 자주 사용된다.
- 실제로 관계 데이터베이스에서 대부분의 질의는 실렉션, 프로젝션, 자연 조인으로 표현 가능하다.
Division 연산자
차수가 (n+m)인 릴레이션 R(A1, A2, ..., An, B1, B2, ..., Bm)과 차수가 m인 릴레이션 S(B1, B2, ..., Bm)의 디비전 R S는 차수가 n이고, S에 속하는 모든 투플 u에 대응하는 투플 tu(투플 t와 투플 u가 결합한 것)가 R에 존재하는 투플 t들의 집합
관계 대수의 한계
- 관계 대수는 산술 연산을 할 수 없다.
- 정렬을 나타낼 수 없다.
- 데이터베이스를 수정할 수 없다. -> 레코드 삽입, 삭제, 수정이 불가능
- 프로젝션 연산의 결과에 중복된 투플을 나타내는 것이 필요할 때가 있는데 이를 명시하지 못한다.
추가된 관계 대수 연산자
- 집단 함수
질의 : 모든 사원들의 급여의 평균은 얼마인가?
그룹화
질의 : 각 부서별 사원들의 급여의 평균은 얼마인가?
- 외부 조인
- 상대 릴레이션에서 대응되는 투플을 갖지 못하는 투플이나 조인 컬럼에 널값이 들어 있는 투플들을 다루기 위해서 조인 연산을 확장한 조인이다.
- 두 릴레이션에서 대으오디는 투플들을 결합하면서, 대응되는 투플을 갖지 않는 투플과 조인 컬럼에 널값을 갖는 투플도 결과에 포함시킨다.
'Database > Theory' 카테고리의 다른 글
6. Embeded SQL - 내포된 SQL문 (0) | 2017.12.30 |
---|---|
5. SQL(Structured Query Language) - 데이터 조작어(DML) (1) | 2017.12.30 |
4. SQL(Structured Query Language) - 데이터 정의어(DDL) (0) | 2017.12.29 |
2. 관계 데이터 모델과 제약조건 (0) | 2017.10.13 |
1. 데이터베이스 시스템 (0) | 2017.10.13 |