CS/데이터베이스

관계대수와 SQL

남승현 2023. 4. 11. 19:52

1. 관계 대수 vs SQL

-> SQL은 'what'을 이야기하고 '어떻게'를 처리하는 건 관계대수다.

-> SQL을 이용하여 관계 데이터베이스 릴레이션 정의, 정보 검색, 데베 갱신, 여러 무결성 제약조건 명시 가능

2. 관계 대수

  • 기존의 릴레이션들로부터 새로운 릴레이션을 생성한다
  • 릴레이션이나 관계 대수식에 연산자들을 적용하여 보다 복잡합 관계 대수식을 점차적으로 만들 수 있다
  • 기본적인 연산자들의 집합으로 이루어졌다
  • 단일 릴레이션이나 두개의 릴레이션을 입력으로 받아 하나의 결과 릴레이션 생성                                                         (숫자=릴레이션, 산술연산자=관계연산자 느낌)
  •  

"필수적인 연산자" : 얘로 내가 원하는 질의로 표현 가능, 꼭 필요한 연산자이다.   "편의를 위해 유도된 연산자" : 위의 필수적인 연산자들로도 표현 가능하다

  • 실렉션 : 조건식 만족하는 투플 반환

         - 실렉션 조건= 프레디키트(predicate)

                               -> 릴레이션의 임의의 애트리뷰트와 상수, 비교 연산자, 부울 연산자(and, or, not)을 포함

         - 결과 릴레이션에 중복 투플이 존재할 수 없음

  • 프로젝션 : 릴레이션에서 애트리뷰트 리스트에 나열된 어트리뷰트 값으로만 구성된 투플 가져온다

         - 한 릴레이션의 애트리뷰트들의 부분 집합을 구함

         - 결과 릴레이션에 중복된 투플들이 존재할 수 있음. 따라서 중복을 제거해주어야 한다. cf) 애트리뷰트 리스트에                 키가 포함되어 있으면 중복된 투플이 존재하지 않음

 

         

  • -> 얘네 둘만 단항연산 (릴레이션 한 개에 적용된다)
  • 집합 연산자

   - 합집합, 교집합, 차집합연산자

   - 이항 연산자이다

   - 집합 연산자의 입력으로 사용되는 두 릴레이션은 합집합 호환 이어야한다.

            -> 합집합 호한이란?

                     두 릴레이션의 애트리뷰트 수가 같고 각 애트리뷰트의 도메인이대응되는 attribute의 도메인과 같아야 한다. 

                             -> 결국 attribute의 구조가 같아야 된다는 뜻

1) 합집합 연산자

-> 두 릴레이션 R, S에 대해 R or S에 있거나 R과 S 모두에 속한 투플들로 이루어진 릴레이션

-> 결과 릴레이션에서 중복된 투플들은 제외된다

-> 결과 릴레이션의 차수 = R or S의 차수

 

2) 교집합 연산자

-> R과 S 모두에속한 투플들로 이루어진 릴레이션

-> 결과 릴레이션의 차수는 R또는 S의 차수와 같다

 

3) 차집합 연산자

-> R-S ( R에는 속하지만 S에는 속하지 않은 투플들로 이루어진 릴레이션 )

->결과 릴레이션의 차수는 R또는 S의 차수와 같다

  • 카티션 곱 연산자 -> 두개의 릴레이션을 결합시킬 때 사용된다

-> R*S

-> 차수가 n+m ( R의 차수가 n, S의 차수가 m )

-> 카디날리티 i*j

-> 애트리뷰트 :(A1, A2, ..., An, B1, B2, ..., Bm)

-> R과 S의 투플들의 모든 가능한 조합으로 이루어진 릴레이션

-> 결과 릴레이션의 크기가 매우 클 수 있으며 사용자가 원하는 건 일부인 경우가 대부분이라 카티션 곱이 유용한 연산자      는 아님

 

  • 조인 연산자

- 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산 ( 두 개 이상의 릴레이션들의 관계를 다룬다 )

- 세타조인, 동등 조인, 자연 조인, 외부 조인, 세미 조인 등

 

1) 세타 조인과 동등 조인

- 조인 조건을 만족하는 투플들로 이루어진 릴레이션 ( 조건 만족하는 투플들만 결합시켜 준다)                                              ( 모든 경우의 투플들이 오는 건 아니다)

- 세타 조인 -> { =, <>, <=, <, >=, > } 중 하나

- 동등조인 -> 세타 조인 중 비교 연산자가 =인 조인

 

2) 자연 조인

- 동등 조인의 결과 릴레이션에서 조인 애트리뷰트를 한 개 제외한 조인

- 똑같은 값이 두 개가 왔을때 하나만 나타냄

 

3) 디비전 연산자 (나누기 연산자)

- R/S

- 차수가 m인 릴레이션 S에속하는 모든 투플 u에 대하여 투플 tu (투플 t와 u를 결합한 것) 가 차수가 m+n인 릴레이션 R에 존재하는 투플 t의 집합 ( R의 투플 중 S에 속하는 모든 투플을 담고 있는 투플들만 골라 추출 )

     -> 피피티 예시 그림 참고하기

 

- 관계 대수의 한계

    -> 관계 대수는 산술 연산을 할수 없음

    -> 집단 함수를 지원하지 않음

    -> 정렬 나타낼 수 없음

    -> 데이터베이스 수정 불가

    -> 중복된 투플을 나타내는 것이 필요할 때가 있는데 이를 명시하지 못함