관계 대수와 관계 해석의 차이?
관계 대수와 관계 해석은 원하는 결과를 얻기 위한 처리 절차를 얼마나 자세히 기술하느냐에서 큰 차이를 보인다.
- 관계 대수 : 원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술하는 절차 언어
- 관계 해석 : 원하는 결과를 얻기 위해 처리를 원하는 데이터가 무엇인지만 기술하는 비절차 언어
관계 대수와 관계 해석을 공부하는 이유?
새로운 데이터 언어가 제안되면 해당 데이터 언어의 유용성을 검증해야 하는데 검증의 기준 역할을 하는 것이 관계 대수와 관계 해석임. 기술할 수 있는 모든 질의를 새로 제안된 데이터 언어로 기술할 수 있으면 관계적으로 완전하다고 하고 이를 통해 해당 언어가 어느정도 검증됐다고 판단함. 그중 관계 대수에 대해서 알아볼 예정이다.
관계 대수
관계 대수에 속하는 대표적인 연산자 8개는 특성에 따라 일반 집합 연산자와 순수 관계 연산자로 분류할 수 있음
일반 집합 연산자 | |||
연산자 | 기호 | 표현 | 의미 |
합집합 | $\cup$ | R $\cup$ S | 릴레이션 R과 S의 합집합을 반환 |
교집합 | $\cap$ | R $\cap$ S | 릴레이션 R과 S의 교집합을 반환 |
차집합 | - | R - S | 릴레이션 R과 S의 차집합을 반환 |
카티션 프로덕트 | $\times$ | R $\times$ S | 릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플을 모두 연결하여 만들어진 새로운 튜플을 반환함 |
순수 관계 연산자 | |||
연산자 | 기호 | 표현 | 의미 |
셀렉트 | $\sigma$ | $\sigma_{조건}$ (R) | 릴레이션 R에서 조건을 만족하는 튜플들을 반환 |
프로젝트 | $\pi$ | $\pi_{속성리스트}$ (R) | 릴레이션 R에서 주어진 속성들의 값으로만 구성된 튜플들을 반환 |
조인 | $\bowtie$ | R $\bowtie$ S | 공통 속성을 이용해 릴레이션 R과 S의 튜플들을 연결하여 만들어진 새로운 튜플들을 반환 |
디비전 | $\div$ | R $\div$ S | 릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플을 모두 연결하여 만들어진 새로운 튜플을 반환함 |
일반 집합 연산자
다음 2가지 조건을 만족해야 2개의 릴레이션은 합병이 가능하다.
- 두 릴레이션의 차수가 같다. 즉, 두 릴레이션은 속성 개수가 같다.
- 2개의 릴레이션에서 서로 대응되는 속성의 도메인이 같다. (카티션 프로덕트 제외)
카티션 프로덕트
R $\times$ S는 릴레이션 R에 속한 각 튜플과 릴레이션 S에 속한 각 튜플을 모두 연결하여 만들어진 새로운 튜플로 결과 릴레이션을 구성함
번호[INT] | 이름[CHAR(20)] |
100 | 김가가 |
200 | 박나나 |
300 | 이다다 |
번호[INT] | 나이[INT] |
100 | 15 |
101 | 26 |
102 | 24 |
위의 두 릴레이션을 카티션 프로덕트 한 결과
R.번호[INT] | R.이름[CHAR(20)] | S.번호[INT] | S.나이[INT] |
100 | 김가가 | 100 | 15 |
100 | 김가가 | 101 | 26 |
100 | 김가가 | 102 | 24 |
200 | 박나나 | 100 | 15 |
200 | 박나나 | 101 | 26 |
200 | 박나나 | 102 | 24 |
300 | 이다다 | 100 | 15 |
300 | 이다다 | 101 | 26 |
300 | 이다다 | 102 | 24 |
순수 관계 연산자
셀렉트
릴레이션에서 주어진 조건을 만족하는 튜플만 선택하여 결과 릴레이션을 구성
릴레이션 where 조건식
프로젝트
릴레이션에서 선택한 속성에 해당하는 값으로 결과 릴레이션을 구성
릴레이션[속성 리스트]
조인
릴레이션 하나로 원하는 데이터를 얻을 수 없어 관계가 있는 여러 릴레이션을 함께 사용해야 될 때
디비전
나누어지는 릴레이션에서 나누는 릴레이션의 모든 튜플과 관련이 있는 튜플을 구함
Join
조인이란, 두 개이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법
1. Inner Join
교집합으로, 기준 테이블과 Join 테이블의 중복된 값을 보여준다.
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
2. LEFT OUTER JOIN
기준 테이블 값과 조인 테이블과 중복된 값을 보여준다. (왼쪽 테이블을 기준으로 Join을 한다 생각)
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
3. RIGHT OUTER JOIN
위와 반대
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
RIGHT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
4. FULL OUTER JOIN
합 집합을 의미함
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
5. SELF JOIN
자기 자신과 자기자신을 조인하는 것으로 하나의 테이블을 여러번 복사해서 조인한다고 생각 (자신이 갖고 있는 컬럼을 다양하게 변형시켜 활용할 때 자주 사용)
SELECT
A.NAME, B.AGE
FROM EX_TABLE A, EX_TABLE B
💖 참고 자료 💖
김연희, [데이터베이스 개론], 한빛아카데미(2019)