관계대수
어떻게(How)질의를 수행할 것인지
일련의 연산을 순서대로 명시하는 절차적 언어
- 상용 RDBMS들에서 널리 사용되는 SQL의 이론적 기초
- SQL을 구현하고 최적화하기 위해 DBMS의 내부 언어로도 사용
- 일반 집합 연산자와 순수 관계 연산자가 있다
일반 집합 연산자: 합집합(∪), 교집합(∩), 차집합(-), 카디션 프로덕트(×)
순수 관계 연산자: 셀렉트(σ), 프로젝트(π), 조인(⋈), 디비전(÷)
관계 대수의 특징
- 기존의 테이블로부터 새로운 테이블을 생성함
- 산술 연산자와 유사하게 단일 테이블이나
두 개의 테이블을 입력으로 받아 하나의 결과 테이블을 생성함- 결과 테이블은 또 다른 관계 연산자의 입력으로 사용될 수 있음
테이블이 튜플의 집합이라는 개념을 이용하는 연산자
합집합(A∪B)
교집합(∩)
차집합(-)
카디션 프로덕트(×)
셀렉트(select, σ)
테이블에서 조건을 만족하는 튜플을 반환
- 테이블의 구조와 특성을 이용하는 연산자
- 순수 관계 연산자(σ, 𝛑, ⋈, ÷)가 있다
수학적 표현식
문제 1) 고객 테이블에서 등급이 gold인 튜플을 검색하시오
문제 2) 고객 테이블에서 등급이 gold이고, 적립금이 2000원 이상인 튜플을 검색하시오
부울 연산자:AND(∧), OR(∨), NOT(¬)
프로젝트(project, 𝛑)
하나의 테이블을 대상으로 연산을 수행
테이블에서 선택한 속성의 수직적 부분 집합을 결과 테이블로 반환
수학적 표현식
문제 3) 고객 테이블에서 등급을 검색하시오
사용자가 원할 경우 중복이 제거된 테이블을 보인다
관계 대수에서는 중복 레코드를 허용하지 않으나,
실제 DBMS에서는 대부분 허용함
문제 4) 고객 테이블에서 고객이름, 등급, 적립금을 검색하시오
조인(join, ⋈)
동등조인, 자연조인, 외부조인 등
두 테이블로부터 연관된 튜플들을 결합하는 연산자
관계 데이터베이스에서 두 개 이상의 테이블 관계를 다루는 연산자
수학적 표현식
문제 5) 고객 테이블과 주문 테이블을 동등조인 하시오
디비전(division, ÷)
고객 테이블은 조건 테이블을 가진 모든 속성을 포함한다
조건 테이블을 뺀 모든 튜플을 고객 데이터 반환
수학적 표현식
문제 7) 고객 테이블과 우수등급 테이블을 디비전 하시오
NULL 처리
dep_id가 920이 맞는지 아닌지 알지 못하기 때문에 검색 결과에서도 배제
연산자 중복
관계 대수 연산자들은 상호 중첩하여 사용 가능
해당 수학적 표현식과 같은 결과를 가짐
교환 법칙 성립
선택 연산은 교환법칙이 성립함
연산자들의 조합
추출 연산에 대해서 다음의 두 질의는 동일한 결과를 보임
잘못된 질의
prof_id가 존재하지 않음
두 질의가 일치하기 위한 조건
<필드리스트1>⊂<필드리스트2>
일반적으로는 선택과 추출 연산의 조합으로 질의를 표현
합집합 연산
다음 연산이 가능하기 위한 조건
1. 두 릴레이션이 같은 수의 열을 가져야 한다.
2. 각 필드의 도메인(입력 가능한 값의 범위)이 같아야 한다.
교집합 연산
차집합 연산
✓ 카디션 프로덕트
Cross Join이라고 부르기도 함
DBMS가 두 개의 테이블을 join할 때 제일 먼저 수행하는 작업임
동등 조인이 위와 같은 방법으로 진행됨
위의 그림에서 cross join 후, 고객 아이디와 주문 고객이 다른 열 제외
한번에 join을 하는 것이 아닌 cross join 후 진행
왼쪽과 같이 식을 적어주지만, 오른쪽과 같은 연산이 수행됨
교환/결합법칙이 성립함
모든 경우의 수를 표현하는 것 이므로 결과적으로 동일