Database - 관계 대수 - part 2

Bomin Seo·2022년 7월 22일
0

조인 연산자

  • 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자

세타(θ) 조인

  • 두 릴레이션의 차수가 각각 n, m이면 결과 릴레이션의 차수는 n + m 이다
  • 세타는 =, <>, <=, <, >, >= 중 하나가 될 수 있다.
  • 세타 조인 결과는 두 릴레이션의 카티션 곱에 조인 조건을 적용한 결과와 동일한다.

동등 조인

  • 세타 조인 중 비교 연산자가 = 인 조인

자연 조인 (형식 : R * S)

  • 동등 조인을 수행하고 같은 애튜리뷰트 하나를 제외한 조인
  • 가장 자주 사용되는 조인 연산자이며 실렉션, 프로젝션, 자연 조인으로 대부분의 질의 표현이 가능하다.

디비전 연산자

  • 차수가 n + m인 릴레이션을 차수가 m인 릴레이션으로 디비전하면 차수가 n인 결과릴레이션이 나온다.
  • 나눈 릴레이션에 속하는 모든 투플 u에 대하여 투플 tu가 R에 존재하는 투플 t의 집합
  • ‘모든 … 에 대해 … 하는’ 형태의 질의에 사용될 수 있다.
  • ‘…하지 않는 … 가 없다’ 라는 동치의 표현으로 활용한다.

관계 대수의 한계

  • 관계 대수는 산술 연산을 할 수 없다.
  • 집단 함수(Aggregate function)을 지원하지 않는다.
  • 정렬을 나타낼 수 없다.
  • 데이터베이스를 수정할 수 없다.
  • 프로젝션 연산의 결과에 중복된 투플을 표현할 필요가 있는 경우가 있지만 이를 명시하지 못한다.

추가된 관계 대수 연산자

aggregation function

  • AVG / SUM / MIN / MAX / COUNT

그룹화

  • 각 그룹에 대하여 집단 함수를 적용할 수 있다.
  • 기준 attribute로 명시되지 않은 attribute는 필수적으로 집단 함수의 대상이 되어야 한다.

외부 조인

  • 상대 릴레이션에서 대응되는 투플을 갖지 못하는 투플이나 조인 애트리뷰트에 널값이 들어있는 투플들을 다루기 위해서 조인 연산을 확장한 조인
  • 두 릴레이션에서 대응되는 투플들을 결합하면서, 대응되는 투플을 갖지 않는 투플과 조인 애트리뷰트에 널값을 갖는 투플도 결과에 포함시킨다.
  • 전체를 알고 싶지만 해당하는 조건이 없어 내부 조인으로 표현 못할 때 사용한다.

왼쪽 외부 조인

  • R과 S의 왼쪽 외부 조인 연산은 R의 모든 투플들을 결과에 포함시키고 S에 관련된 투플이 없으면 널값으로 채운다.

오른쪽 외부 조인

  • R과 S의 오른쪽 외부 조인 연산은 S의 모든 투플들을 결과에 포함시키고 S에 관련된 투플이 없으면 널값으로 채운다.

완전 외부 조인

  • 릴레이션 R과 S의 모든 투플을 결과에 포함시키고 관련된 투플이 없으면 널값으로 채운다

세미조인

  • 조인한 후 왼쪽 세미조인 |>< 는 왼쪽 릴레이션의 attribute를 프로젝션하여 도출한다.
  • 조건에 부합하는 것이 있는지 없는 지의 여부에 대해서만 관심이 있을 때 사용한다.

확장 관계 대수

  • 집단함수(SUM, MIN, MAX, AVG, COUNT)는 관계 대수에서는 매개변수로 Single attribute만 가지지만, SQL에서 COUNT는 DISTINCT(중복제거) 키워드와 함께 사용될 때는 Multiple Attributes를 사용할 수 있다.

    COUNT(TITLE) : 중복을 허용한 직급개수 (NULL 제외)
    COUNT(DISTINCT DNO, TITLE) : 중복을 제거한 고유한 (DNO, TITLE) 쌍의 수 (NULL 제외)
    COUNT(*) : 릴레이션 내의 모든 튜플의 개수 (NULL 포함)

Bag / Multiset

  • 원소의 중복을 허용하는 집합

Extended projection

  • 산술식 표현을 허용

문제풀이

CUSTOMER(CUSTOMER_ID, NAME, ADDRESS, PHONE)
VIDEO(VIDOE_ID, TITLE, GENRE)
RESERVED(CUSTOMER_ID, VIDEO_ID, DATE)

제목이'반지의 제왕'인 비디오테이프의 장르를 검색하라
π[GENRE](σTITLE = “반지의 제왕”)

예약된 비디오테이프의 ID를 검색하라
πVIDEO_ID

예약되지 않은 비디오 테이프의 ID를 검색하라
πVIDEO_ID - πVIDEO_ID

예약된 모든 비디오 테이프의 제목을 검색하라
π[TITLE](RESERVED * VIDEO)

비디오 테이프를 예약한 고객의 이름을 검색하라
π[NAME](CUSTOMER * RESERVED)

장르가 ‘액션'인 비디오테이프를 예약한 고객의 주소를 검색하라
π[ADDRESS]((RESERVED σ[GENRE = “ACTRION”] VIDEO) CUSTOMER)

장르가‘다큐멘터리’인 비디오 테이프를 모두 예약한 고객의 이름을 검색하라
πCUSTOMER_ID,VIDEO_ID DIV πVIDEO_ID
R1 : πCUSTOMER_ID,VIDEO_ID
R2 : πVIDEO_ID
R3 : πCUSTOMER_ID - π[CUSTOMER_ID](πCUSTOMER_ID X R2 – R1)
π[NAME](CUSTOMER * R3)

profile
KHU, SWCON

0개의 댓글