Study/DB

관계대수

Gyuri 2021. 8. 22. 18:23

관계대수

질의어 : 삽입, 삭제, 수정, 검색 등의 데이터 조작을 위한 연산들을 표현하기 위한 언어

  • 절차적 언어 : 사용자가 원하는 결과를 얻기 위해 어떤 절자로 기술해야 하는지 명시해야 하는 언어 (C,C++)
  • 비절차적 언어 : 무엇을 원하는지만 기술. how to do?(수행 절차) 기술하지 않음! 실질적 수행 절차는 시스템 내부적으로 결정해야함(DMBS 내부에서 알아서 절차 만듦) 절차적 언어에 비해 표현방법이 심플함

관계대수

- 비절차적 언어

- 수학에서의 수식구조와 유사

  피연산자 : 테이블

  연산자 : 단항 연산자, 이항 연산자

 

선택(selection) : 하나의 테이블에서 주어진 조건을 만족하는 레코드들을 검색하는 기능

 

<테이블 이름> : 연산의 대상이 되는 테이블의 이름

<조건식> : 비교연산자(<.>,<=) 와 부울 연산자(논리연산자)의 조합

 

선택 연산에서 null(널)은어떤 조건식에서도 배제됨!

선택 연산은 교환 법칙이 성립됨

 

추출(project) : 사용자가 원하는 필드만 결과로 보여주는 연산

--> 관계형 모델은 중복된 레코드들을 허용하지 않음 (실제 DBMS에서는 대부분 허용함)

추출연산은 교환 법칙이 성립되지 X

 

재명명 연산 : 테이블에 이름을 부여하거나 변경하는 연산(SQL에선 이름을 변경하지 않으면 곤란한 상황이 있음)

재명명 연산은 중간 결과나 최종 결과에 대한 테이블명이 변경됨

*실제 데이터베이스에 저장된 테이블명까지 변경되는 것 X

 

집합 연산

 : 집합 연산에 입력이 되는 두 개의 테이블은 서로 호환 가능해야 함!

호환 가능한 테이블들

 : 두 테이블의 차수(=필드 개수)가 같고 필드 이름이 동일해야함

 : 같은 이름의 필드라 하더라도 도메인이 일치해야함 (타입이 같아야함)

 

카티션 프로덕트 : 두 개의 테이블을 물리적으로 조합해, 하나의 테이블로 구성하는 것. 두 테이블에서 각각의 레코드들을 서로 결합해 하나의 레코드로 구성하며 가능한 모든 조합의 레코드들로 테이블 생성

<테이블명1>X<테이블명2>

 

조인(join) 연산 : 카티션 프로덕트인데, 두 테이블로부터 특정 조건을 만족하는 레코드들을 하나의 레코드로 결합하는 연산

카티션 프로덕트는 모든 가능한 조합(서로 관련 없는 레코드들도)에 의해 레코드들을 생성하지만, 조인은 특정 조건을 만족하는 레코드만을 선택

세타(theta) 조인이라고도 함

 

<조건식>

조인 조건이라 부름 : 조인 조건은 필드간의 동등비교(=)가 대부분이며 이를 동등조인 이라고 함

 

자연 조인(natural join) : 서로 다른 테이블에서 같은 필드명을 갖는 두 필드에 대한 동등조인 중 하나의 필드를 제거하여 단순히 표현한 연산

공통 필드가 없다면? 모든 필드 다 보여줌 -> 카티션 프로덕트와 같음

 

외부 조인 : 자연 조인 조건에 만족되지 않은 레코드까지 포함해서 찾아야 될 때 사용하는 연산방법. 서로 매치되지 않는 필드에 대해서는 NULL로 입력함

  • 왼쪽 외부조인 : 왼쪽 테이블의 레코드에 대해 오른쪽 테이블에 조인 조건에 부합하는 레코드가 없을 때도 검색 결과에 포함
  • 오른쪽 외부조인
  • 완전 외부조인

 

지정(assignment) 연산 : 복잡한 질의를 열 개의 질의로 분리하거나 중간 결과에 이름을 부여해 관계연산을 여러 개 나눠 짤 수 있도록 하는 것 (<- 로 표현)

rename 은 이름을 해서 그 관계대수 안에서 쓰지만, 지정 연산은 이름을 지정해 관계 대수 바깥에서 쓸 수 있음

'Study > DB' 카테고리의 다른 글

SQL 실습  (0) 2021.08.22
SQL  (0) 2021.08.22
관계대수 실습  (0) 2021.08.22
관계형 데이터베이스  (0) 2021.08.22
Data & Database  (0) 2021.08.22