ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 관계대수 ( Relational Algebra )
    SQL 2023. 1. 7. 14:06

    https://chopby.tistory.com/57

     

    데이터베이스 4장 관계대수

    우린 관계 대수에 대해서만 알아본다. 관계 대수 관계 연산자를 통해 복잡한 관계 대수식을 만들 수 있다. 관계 연산자는 크게 두가지로 나눌 수 있다. 1. 실렉션 연산자 2. 프로젝션 연산자 예시

    chopby.tistory.com

    이 글에 너무 잘 정리되어있어서 

    최대한 간단히 요약만 하기로 하였음

     

    관계대수

    -어떠한 질의를 수행할 것인가를 명시하는 절차적인 언어

    -기존의 릴레이션과 관계 연산자를 사용해 원하는 릴레이션을 만들어내는/추려내는 과정

     

    관계 연산자

     

    selection - σ - select * - 행을 return

    projection - Π - select sid, sname - 열을 return

     

    *union compatible = 합집합 호환

    집합 연산자는 두 테이블의 필드 개수와 대응되는 타입(도메인)이 전부 일치해야함

     

    디비전
    동등조인 자연조인

    1)세타 조인 = 조건 조인

    -조건문이 있는 조인

     

    2)동등 조인 

    -비교 연산자가 등호(=)인 세타 조인

     

    3)자연 조인

    -동등 조인을 수행 후 이에 사용된 조인 애트리뷰트를 하나만 출력

     

     

     

    ============================================================================================

     

    Renaming = P( R(F), E)

    E : 릴레이션

    F : renaming list

    R : new nenaming name

     

    P( New_Table( 1 -> sname ), Πname(student) )

    student 테이블에서 학생들 이름만 뽑아  필드명을 'sname'으로 변경하고 New_Table이란 이름으로 젖아

     

     

     

    *관계대수로 SUM()이나 COUNT()는 구현 불가

     

    ============================================================================================

     

     

     

     

    1번 예제

    빨간색이나 초록색 배를 빌린 사람

    or을 and로 바꾸면?

    -> 빨간색과 초록색 배를 빌린 사람이 아닌 

    빨간색이면서 초록색인 배를 빌린 사람이 됨

     

    빨간색과 초록색 배를 빌린 사람은

    각 색깔의 배를 빌린 사람 목록을 구하고 이를 교집합

     

     

     

     

     

     

    2번 예제

    Π name (Sailors)  ㅡ  Π name (σ color = red (boat) ⋈ Reserves ⋈ Sailors)

    -> 빨간 보트를 예약하지 않은 사람

     

    Π name (σ color != red (boat) ⋈ Reserves ⋈ Sailors)

    -> 빨간색이 아닌 보트를 예약한 사람

     

    위 경우 아래와 달리 보트를 아예 예약하지 않은 사람도 들어간다.

    이 역시 둘의 결과값이 다르니 주의

     

     

     

     

     

    3번 예제

    최소 배를 하나 이상 빌린 사람

    -> Π name (Reserves ⋈ Sailors)

    그냥 예약 목록과 고객을 join하면 됨

     

    그렇다면 배를 2개 이상 빌린 사람은?

    위와 같이 Reserves와 Sailors을 join한 릴레이션을 만들고해당 릴레이션을 self cross join한 테이블을 만든다여기서 sailor id는 같고 boat id는 다른 행들을 찾으면 된다

     

     

     

     

     

    4번 예제

    max 값을 찾고 싶을떄엔

    위 예제와 같이 self cross join을 하고

    본인보다 큰 값이 존재하는 객체를 전부 추려

    기존의 테이블에서 빼면

    본인보다 큰 값이 존재하지 않는, 즉 max 값만 남게 된다

     

    다시 기존 테이블에 이 max 값을 빼고

    또다시 self cross join을 하면

    두번째로 큰 값도 구할 수 있다.

     

     

    5번 예제

    예약 테이블의 sid, bid만 추려서 이를 보트 테이블의 bid로 나눔

    -> 모든 배를 빌린 사람

     

     

     

    필기한거

    'SQL' 카테고리의 다른 글

    SQL - DML, DDL, DCL  (0) 2023.10.05
    SQL - 내장함수  (0) 2023.02.21
    SQL - JOIN  (0) 2023.02.21
    SQL - SELECT  (0) 2023.02.21
    데이터 정규형 (1NF, 2NF, 3NF, BCNF)  (0) 2023.01.07
Designed by Tistory.