1 관계 대수와 관계 해석
1.1 관계 해석(Relational Calculus)
- ‘어떻게 검색할 것인가’ 보다 ‘무엇을 검색할 것인가’만을 기술하는 선언적 표현법을 사용하는 비절차적 질의어이다..
- 관계 대수와 함께 릴레이션을 다루는 대표적인 이론적 방법이다.
- SQL을 포함한 많은 상업용 관계 언어들이 관계 해석에 기반을 두고 있다.
- 관계 해석은 튜플 관계 해석(Tuple Relational Calculus)과 도메인 관계 해석(Domain Relational Calculus)으로 구분된다.
- 관계해석과 관계 대수는 관계 데이터베이스를 처리하는 기능과 능력 면에서 동등하며, 관계 대수로 표현한 식은 관계 해석으로 표현할 수 있다.
1.2 관계 대수(Relational Algebra)
- 상용 관계 DBMS들에서 널리 사용되는 SQL의 이론적인 기초이다.
- 어떻게 질의를 수행할 것인가를 명시하는 절차적인 언어이다.
- SQL을 구현하고 최적화하기 위해 DBMS의 내부 언어로서도 사용된다.
- 하나 이상의 릴레이션에 적용되는 연산자들을 포함한다. 이 연산자들은 주어진 릴레이션들로부터 새로운 릴레이션을 생성한다.
1.2.1 필수적인 연산자
1.2.1.1 셀렉션(Selection) 연산자
- 셀렉션 연산자는 한 릴레이션에 실렉션 조건[1]을 만족하는 튜플들의 부분 집합을 생성한다. 즉, 주어진 조건을 만족하는 튜플들만 걸러내는 연산이다.
- 하나의 입력 릴레이션에 적용되므로 단항 연산자이다.
- 셀렉션의 결과로 생기는 릴레이션은 입력 릴레이션과 같은 애트리뷰트들을 가지므로 결과 릴레이션의 차수는 입력 릴레이션의 차수와 같다.
- 또한, 셀렉션 연산의 결과 릴레이션의 카디날리티는 항상 원래 릴레이션의 카디날리티보다 작거나 같다.
1.2.1.2 프로젝션(Projection) 연산자
- 셀렉션과 달리 한 릴레이션의 애트리뷰트들의 부분집합을 구한다.
- 프로젝션 연산의 결과 릴레이션에는 입력 릴레이션으로부터 골라낸 일부 애트리뷰트들만 포함되므로 중복된 튜플들이 존재할 수 있다. 따라서 릴레이션의 특성을 만족하기 위해 중복 튜플들을 제거하는 과정이 필요하다.
1.2.1.3 집합(Union) 연산자
- 릴레이션이 튜플들의 집합이기 때문에 기존의 집합 연산이 릴레이션에 적용된다.
- 집합 연산에는 합집합, 교집합, 차집합 연산자가 있다.
- 집합 연산자들은 두 개의 릴레이션을 입력으로 받아들이므로 이항 연산자이다.
s 합집합 연산자(Uon)
s 두 릴레이션 R과 S의 합집합 R∪S는 R 또는 S에 있거나 R과 S 모두에 속한 튜플로 이루어진 릴레이션이다.
s 릴레이션이 튜플들의 집합이므로 결과 릴레이션에서 중복된 튜플들은 제외된다.
s 교집합 연산자(Intersection)
s 두 릴레이션 R과 S의 교집합 R∩S는 R과 S 모두에 속한 튜플들로 이루어진 릴레이션이다.
s 차집합 연산자(Difference)
s 두 릴레이션 R과 S의 차집합 R-S는 R에는 속하지만 S에는 속하지 않은 튜플들로 이루어진 릴레이션이다.
s 카테시언 곱(Cartesian product)
s 실렉션이나 프로젝션을 사용하여 한 릴레이션으로부터 정보를 검색할 수 있지만, 한 릴레이션의 튜플들을 다른 릴레이션의 튜플들과 연관시키기 위해서 흔히 두 릴레이션의 튜플들을 결합할 필요가 있다.
s 집합 R 과 집합 S을 곱한 집합이고 R×S로 표시한다.
s 동일한 애트리뷰트가 구 릴레이션에 포함되어 있을 수 있기 때문에 결과 릴레이션에서 이런 애트리뷰트들을 구분하기 위해서 애트리뷰트 이름 앞에 릴레이션 이름을 붙인다.
- 예를 들어 집합 R={1,2,3,4}이 있고 집합 S = {3,4,5,6} 이 있을 때
합집합 |
R∪S |
= {1,2,3,4,5,6} |
교집합 |
R∩S |
= {3,4} |
차집합 |
R-S |
= {1,2,3} |
곱집합 |
R×S |
= {(1,3),(1,4),(1,5),(1,6),(2,3),(2,4),(2,5),(2,6), (3,3),(3,4),(3,5),(3,6),(4,3),(4,4) ,(4,5),(4,6)} |
1.2.1.4 조인(Join) 연산자
- 두 개 이상의 테이블을 연결하여 데이터를 검색할 때 사용한다.
- 데이터베이스 시스템과 그 환경의 성능을 확인하는데도 사용할 수 있다.
- 조인에는 여러 가지 종류가 있다.
조인 종류 |
설 명 |
내부조인 (INNER JOIN) |
조건을 사용해서 두 테이블의 레코드를 결합한다. |
외부조인 (OUTER JOIN) |
내부조인과 비슷한데 일치하지 않는 열까지 반환하며 그 열은 NULL로 반환한다. |
동등 조인 (EQUI JOIN) |
내부조인이다. 두 테이블 사이의 같은 행들을 반환한다. |
비동등 조인 (NON-EQUI JOIN) |
내부조인이다. 두 테이블 사이의 같지 않은 행들을 반환한다. |
자연 조인 (NATURAL JOIN) |
'ON' 절이 없는 내부조인. 같은 열 이름을 가진 두 테이블을 조인할 때만 작동 |
크로스 조인 (CROSS JOIN) |
한 테이블의 모든 행과 다른 테이블의 모든 행이 연결되는 모든 경우를 반환. |
카티젼 조인 (CARTESIAN JOIN) |
크로스 조인의 한 종류. 조건이 없다. (크로스 프로덕트) |
콤마 조인 (COMMA JOIN) |
콤마가 CROSS JOIN 키워드 대신 사용된다는 점을 제외하면 크로스 조인과 같다. |
셀프 조인 (SELF JOIN) |
자기 자신을 조인한다. |
1.2.1.5 디비전(Division) 연산자
- Division은 한 릴레이션에서 다른 릴레이션의 애트리뷰트를 제외한 속성만 선택하는 것이다.
1.2.2 추가된 연산자
- 관계 대수의 표현력을 높이기 위해서 몇 가지 새로운 연산자들이 도입되었다.
1.2.2.1 집단 함수
- SUM(총합), AVG(평균), MAX(최대), MIN(최소), COUNT(수량)
1.2.2.2 그룹화
- 릴레이션은 그룹화 애트리뷰트들의 값에 의해서 분할되고, 각 그룹에 속하는 튜플들에 대해서 집단 함수를 적용할 수 있다.
1.2.2.3 외부조인
- 상대 릴레이션에서 대응되는 튜플을 갖지 못하는 튜플이나 조인 애트리뷰트에 널 값이 들어 있는 튜플들을 다루기 위해서 조인 연산을 확장한 것이다.
- 외부 조인은 두 릴레이션에서 대응되는 튜플들을 겹합하면서, 대응되는 튜플을 갖지 않는 튜플과 조인 애트리뷰트에 널 값을 갖는 튜플도 결과에 포함시킨다.
- 외부 조인에는 왼쪽 외부 조인(Left Outer Join), dhfmsWhr 외부 조인(Right Outer Join), 완전 외부 조인(Full Outer Join)와 같이 세 가지 종류가 있다.
1.2.3 관계 대수의 한계
- 관계 대수 연산자는 한 개 이상의 릴레이션을 입력으로 받아 새로운 결과 릴레이션을 한 개 생성하지만 몇 가지 제한을 갖고 있다.
- 따라서 관계 DBMS의 표준 데이터베이스 질의어인 SQL은 이런 제한을 모두 만족한다.
s 관계 대수는 산술 연산을 할 수 없다.
s 집단 함수[2]를 지원하지 않는다.
s 정렬을 나타낼 수 없다. 예를 들어, 릴레이션의 모든 튜플들을 오름차순으로 정렬하라고 표현할 수 없다.
s 데이터베이스를 수정할 수 없다.
1.3 내장 SQL (Embeedded SQL)
- C/C++, 코볼, 포트란, 파스칼, 에이다, 자바(SQLJ) 같은 절차적 프로그래밍에 RDBMS를 조작하기 위한 SQL을 통합한 기법이다.
- MySQL은 지원하지 않는다.
[1] Selection Condition: 프레티키트(Predicate)라고도 함. 릴레이션의 애트리뷰트들에 대하여 명시된 Boolean Expression임.
[2] Aggregate Function: 값들의 집합을 입력으로 받아 단일 값을 구하는 함수를 말한다. (ex: SUM, AVG, COUNT, MAX, MIN)
'와사비크래커 IT Tip > DB' 카테고리의 다른 글
[DB] MySQL (0) | 2020.08.25 |
---|---|
[DB] SQL (Structured Query Language) (0) | 2020.08.24 |
[DB] RDBMS (0) | 2020.08.21 |
[DB] Data Model (0) | 2020.08.21 |
[DB] DBMS (Database Management System) (0) | 2020.08.20 |