01. 관계 대수란?
관계 데이터베이스에는 정보를 저장하고 검색하는 언어가 꼭 필요합니다.
이때 관계 데이터 모델에서 지원되는 두 가지 언어가 있습니다.
►관계 데이터 모델에서 지원되는 두 가지 언어
① 관계 해석(relational calculus)
원하는 데이터만 명시하고 질의를 어떻게 수행할 것인가는 명시하지 않는 선언적인 언어
② 관계 대수(relational algebra)
어떻게 질의를 수행할 것인가를 명시하는 절차적인 언어
관계 대수와 관계 해석은 관계 데이터 모델을 제안한 E.F. Codd가 소개한 내용으로,
관계 데이터 모델에서 가장 중요한 관계 대수에 대해 설명합니다.
관계 대수는 하나 이상의 릴레이션에 적용되는 연산자들을 포함합니다.
이 연산자들은 주어진 릴레이션들로부터 새로운 릴레이션을 생성합니다.
관계 대수는 상용 관계 DBMS들에서 널리 사용되는 SQL의 이론적인 기초이며,
SQL을 구현하고 최적화하기 위해 DBMS의 내부 언어로서도 사용됩니다.
① 관계 대수
관계 대수는 관계 해석과 함께 릴레이션을 다루는 대표적인 이론적 방법입니다.
관계 대수는 기존의 릴레이션들로부터 새로운 릴레이션을 생성하여, 릴레이션이나 관계 대수식에
연산자들을 적용하여 보다 복잡한 관계 대수식을 점차적으로 만들어 사용합니다.
관계 대수는 기본적이 연산자들의 집합으로 이루어집니다. 하나의 관계 연산은 한 개 이상의
입력 릴레이션에 연산자를 적용하여 새로운 릴레이션 하나를 결과로 생성합니다.
이는 산술 연산과 원리면과 유사합니다.
예를 들자면, 산술 연산에서 덧셈(+)은 두 개의 수를 입력받아 하나의 수를 결과로 구합니다.
123 + 456
또한, 한 연산식은 다른 연산의 하나의 인수로서 다시 사용될 수 있기 때문에 복잡한 식의 표현이 가능합니다.
123 + 456 - 78 * 9
산술 연산식에서 +, -, *, / 등의 연산자들은 두 개의 수에 적용되어 하나의 수를 결과로 산출하므로,
이항 연산자(binary operator)라고 부릅니다.
그러나 -는 또 다른 의미를 갖는데, -7과 같이 한 개의 수에 적용되어 음수로 바꾼 수를 결과로 산출하므로
단항 연산자(unary operator)라고 부릅니다.
분류 | 연산자 | 표기법 | 단항 또는 이항 |
필수적인 연산자 |
실렉션(selection) | σ | 단항 |
프로젝션(projection) | π | 단항 | |
합집합(union) | ∪ | 이항 | |
차집합(difference) | − | 이항 | |
카티션 곱(Cartesian product) | × | 이항 | |
편의를 위해 유도된 연산자 |
교집합(intersection) | ∩ | 이항 |
세타 조인(theta join) | ⋈ | 이항 | |
동동 조인(equijoin) | ⋈ | 이항 | |
자연 조인(natural join) | * | 이항 | |
세미 조인(semijoin) | ⋉ | 이항 | |
디비전(division) | ÷ | 이항 |
EMPNO | EMPNAME | TITLE | MANAGER | SALARY | DNO |
2106 | 김창섭 | 대리 | 1033 | 2500000 | 2 |
3426 | 박영권 | 과장 | 4377 | 3000000 | 1 |
3011 | 이수민 | 부장 | 4377 | 4000000 | 3 |
1003 | 조민희 | 과장 | 4377 | 3000000 | 2 |
3427 | 최종철 | 사원 | 3011 | 1500000 | 3 |
1365 | 김상원 | 사원 | 3426 | 1500000 | 1 |
4377 | 이성래 | 사장 | ⋀ | 5000000 | 2 |
► 실렉션 연산자
실렉션 연산자는 한 릴레이션에서 실렉션 조건(selection condition)을 만족하는 투플들의 부분 집합을 생성합니다.
실렉션 연산은 주어진 조건을 만족하는 투플들만을 걸러내는 연산으로 생각하면 쉽습니다.
이때, 실렉션 연산자는 하나의 입력 릴레이션에 적용되므로 단항 연산자입니다.
예시) EMPLOYEE릴레이션에서 3번 부서에 소속된 사원들을 검색하세요.
σDNO=3(EMPLOYEE)
EMPNO | EMPNAME | TITLE | MANAGER | SALARY | DNO |
3011 | 이수민 | 부장 | 4377 | 4000000 | 3 |
3427 | 최종철 | 사원 | 3011 | 1500000 | 3 |
► 프로젝션 연산자
프로젝션 연산자는 실렉션과 달리 한 릴레이션의 애트리뷰트들의 부분집합을 구합니다.
[애트리뷰트 리스트]는 입력 릴레이션에 속한 애트리뷰트들이며, 프로젝션의 결과로 생성되는 릴레이션은
[애트리뷰트 리스트]에 명시된 애트리뷰트들만을 가지며, 이 애트리뷰트들은 애트리뷰트 리스트에 열거된 순서와
동일하게 결과 릴레이션에 나타납니다.
새로운 릴레이션의 차수는 애트리뷰트 리스트 내의 애트리뷰트 개수와 같습니다.
예시) EMPLOYEE릴레이션에서 모든 사원들의 직급을 검색하세요.
πTITLE(EMPLOYEE)
TITLE |
대리 |
과장 |
부장 |
사원 |
사장 |
► 집합 연산자
릴레이션이 투플들의 집합이기 때문에 기존의 집합 연산이 릴레이션에 적용됩니다.
집합 연산자에는 합집합, 교집합, 차집합 연산자가 있습니다. 집합 연산자의 입력으로 사용되는 두 개의 릴레이션은
합집합 호환(union compatible)이어야 합니다. 집합 연산자들은 두 개의 릴레이션을 입력으로 받아들이므로
이항 연산자입니다.
(1) 합집합 연산자 : 두 릴레이션 R과 S의 합집합 R ∪ S는 R 또는 S에 있거나 R과 S 모두에 속한 투플들로
이루어진 릴레이션입니다.
(2) 교집합 연산자 : 두 릴레이션 R과 S의 교집합 R∩ S는 R과 S 모두에 속한 투플들로 이루어진 릴레이션입니다.
(3) 차집합 연산자 : 두 릴레이션 R과 S의 차집합 R - S는 R에는 속하지만 S에는 속하지 않은 투플들로 이루어진
릴레이션입니다.
(4) 카티션 곱 연산자 : 실렉션이나 프로젝션을 사용하여 한 릴레이션으로부터 정보를 검색할 수 있지만,
한 릴레이션의 투플들을 다른 릴레이션의 투플들과 연관시키기 위해서 흔히 두 릴레이션의 투플들을
결합할 필요가 있습니다.
► 관계 대수의 완전성
실렉션, 프로젝션, 합집합, 차집합, 카티션 곱은 관계 대수의 필수적인 연산자입니다.
다른 관계 연산자들은 필수적인 관계 연산자를 두 개 이상 조합하여 표현할 수 있습니다.
임의의 질의어가 적어도 필수적인 관계 대수 연산자들만큼의 표현력을 갖고 있으면 관계적으로
완전(relationally complete)하다고 말합니다.
[IT 공부하기/데이터베이스] - SQL과 데이터 정의어와 무결성 제약조건이란?
SQL과 데이터 정의어와 무결성 제약조건이란?
01. SQL개요 왜 데이터베이스 환경에서는 질의어를 필요로 할까요? 복잡한 질의를 자연어로 표현하면 질의가 정확하게 표현되었는지 입증하기 어렵기 때문에 좀 더 구조적인 질의어가 필요합니
soonirism.tistory.com
'💕IT 공부하기 > 데이터베이스' 카테고리의 다른 글
SQL의 SELECT문에 대하여(1) (0) | 2022.08.25 |
---|---|
SQL과 데이터 정의어와 무결성 제약조건이란? (0) | 2022.08.24 |
오라클의 개념과 PL / SQL 에 대하여 (0) | 2022.08.22 |
릴레이션의 특성과 키에 대하여 알아보자 (0) | 2022.08.20 |
관계 데이터 모델 개념의 이해와 제약 조건 (0) | 2022.08.19 |