IT CookBook, 오라클로 배우는 데이터베이스 개론과 실습(2판)
데이터베이스 핵심 이론을 오라클로 실습하며 공부할 수 있는 책이다. 데이터베이스 시스템을 이해하는 데 필요한 이론을 4개의 부로 나누어 실습과 함께 익힌 다음, 마지막에는 워크북으로 배
www.hanbit.co.kr
오라클로 배우는 데이터베이스 개론과 실습(2판) 을 공부하며, 정리한 내용을 포스팅하는 글입니다.
관계대수 (relational algebra)
릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어
관계대수와 관계해석
- 관계대수 : 어떤 데이터를 어떻게 찾는지에 대한 처리 절차를 명시하는 절차적인 언어이며, DBMS 내부의 처리 언어로 사용됨
- 관계해석: 어떤 데이터를 찾는지 명시하는 선언적인 언어로 관계대수와 함께 관계 DBMS의 표준 언어인 SQL의 이론적인 기반을 제공함
관계대수와 관계해석은 모두 관계 데이터 모델의 중요한 언어이며 실제 동일한 표현 능력을 가지고 있다.
셀렉션(selection)
- 릴레이션의 튜플을 추출하기 위한 연산임.
- 단항 연산자
- 형식 : 시그마<조건> (R)
- 복합조건 : 조건이 여러 개인 경우 ^(and), v(or), ㄱ(not) 기호를 이용하여 복합조건을 표시.
프로젝션(projection)
- 릴레이션의 속성을 추출하기 위한 연산
- 단항 연산자
- 형식 : 파이<뽑아낼 속성들> (R)
합집합
- 두 개의 릴레이션을 합하여 하나의 릴레이션을 반환 (중복된 부분 제거)
- 조건 : 두 개의 릴레이션은 서로 같은 속성 순서와 도메인을 가져야 함.
교집합
- 합병가능한 두 릴레이션을 대상으로 하며
- 두 릴레이션이 공통으로 가지고 있는 튜플을 반환
차집합
- 첫 번째 릴레이션에는 속하고 두 번째 릴레이션에는 속하지 않는 튜플을 반환
카디션 프로덕트(cartesian product)
- 두 릴레이션을 연결시켜 하나로 합칠 때 사용
- 결과 릴레이션 : 첫 번째 릴레이션의 오른쪽에 두 번째 릴레이션의 모든 튜플을 순서대로 배열하여 반환.
- 결과 릴레이션 차수: 두 릴레이션의 차수의 합
- 결과 릴레이션 카디널리티: 두 릴레이션의 카디널리티의 곱
조인(join)
- 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 튜플을 수평으로 결합하는 연산
- 두 릴레이션을 카디션프로덕트 연산을 한 후 셀렉션 연산을 한 것과 동일
- 조인 연산 종류
- 기본연산
- 세타조인 : 조건(=, > , < .. 등)에 맞는 튜플 반환
- 동등조인 : 속성값이 같은 튜플만 반환
- 자연조인 : 동등조인에서 중복 제거
- 확장된 조인 연산
- 세미조인:닫혀 있는 릴레이션의 튜플만 반환(중복 제거)
- left semi join
- right semi join
- 외부조인 : 자연조인 시 시랲한 튜플들을 모두 보여주며 값이 없는 속성에는 NULL을 채워서 보여준다.
- left outer join
- full outer join
- right outer join
- 세미조인:닫혀 있는 릴레이션의 튜플만 반환(중복 제거)
- 기본연산
1) 세타 조인
- 조건(=, <=, >=, < , > , =/=)에 맞는 튜플을 반환한다.
2) 동등 조인
- 세타 조인에서 = 연산자를 사용한 조인.
- 보통 조인 연산이라고 하면 동등조인을 지칭한다.
문제 팁) 고객과 고객의 주문사항을 모두 보이시오.
- (모두 보이시오 -> 동등조인, 자연조인과 구별법은 아래 자연조인 참고)
세타 조인과 동등 조인은 중복된 속성 이 발생!!
3) 자연 조인(natural join)
- 동등조인에서 두 번째 릴레이션의 속성(여기선 주문.고객번호가 되겠다 )이 중복되서 나오지 않도록 한다.
문제 팁) 고객과 고객의 주문사항을 모두 보여주되 같은 속성은 한번만 표시하시오.
- (모두 보여주되 -> 동등조인, 같은 속성은 한번만 표시 -> 자연 조인)
4) 외부 조인(outer join)
- left outer join
- full outer join
- right outer join
자연조인 시 조인에 실패한 튜플들을 없는 속성에 null값을 채워서 모두 보여준다.
외부조인이 가리키는 쪽(왼쪽, 오른쪽, 전체)에 따라 해당 릴레이션의 데이터를 모두 가져온다.
외부조인 예시 문제 릴레이션
문제 1) 고객 기준으로 주문 내역이 없는 고객도 모두 보이시오.
- 고객 기준 -> Left Outer Join , 없는 고객도 모두 -> Outer join을 의미!
- (중복된 속성 제거) 고객 릴레이션의 고객번호만 유지! 주문 릴레이션 고객번호 제거!
문제 2) 주문 내역이 없는 고객과 고객 릴레이션에 고객번호가 없는 주문을 모두 보이시오.
- 기준을 명시하지 않았고, 두 릴레이션에서 없는 튜플을 모두 보이라고 하였기 때문에 -> Full Outer join
- Full Outer Join 인 경우에는 외래키만 제거! (여기서는, 고객 릴레이션의 고객번호만 유지, 주문 릴레이션 고객번호 제거)
문제 3) 주문 내역 기준으로 고객 릴레이션에 고객번호가 없는 주문도 모두 보이시오
- 주문 내역 기준 -> 고객 릴레이션의 고객번호는 제거! 주문 릴레이션 쪽에 유지! (중복된 속성 제거)
- 고객번호가 없는 주문도 모두 보이라고 하였으므로 -> Right Outer join!
5) 세미 조인(semi join)
자연 조인을 한 후 두 릴레이션 중 한 쪽 릴레이션의 결과만 반환하며, 기호에서 닫힌 쪽 릴레이션의 튜플만 반환
문제 ) 마당서점의 고객 중 주문내역이 있는 고객의 고객정보를 보이시오.
- 주문내역이 있는 -> 세미 조인
- 고객의 고객정보를 보여라 -> 고객 릴레이션 쪽은 닫히고, 주문 릴레이션 쪽은 열려있는 세미조인
6) 디비전(division)
- 릴레이션의 속성 값의 집합으로 연산을 수행