관계 데이터 모델에서 지원되는 2가지 정형적인 언어
1) 관계 해석: 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인가는 명시하지 않는 선언적인 언어
2) 관계 대수
- 어떻게 질의를 수행할 것인가를 명시하는 절차적 언어
- 관계 대수는 상용 관계 DBMS들에서 널리 사용되는 SQL의 이론적인 기초
- SQL을 구현하고 최적화하기 위해 DBMS의 내부 언어로서 사용됨
SQL
- 상용 관계 DBMS들의 사실상의 표준 질의어인 SQL을 이해하고 사용할 수 있는 능력은 매우 중요
- SQL을 사용하여 관계 데이터베이스에 릴레이션을 정의하고, 관계 데이터베이스에서 정보를 검색하고, 관계 데이터베이스를 갱신하며, 여러가지 무결성 제약조건들을 명시할 수 있음
4.1 관계 대수
- 기존 릴레이션들로부터 새로운 릴레이션을 생성
- 기본적인 연산자들의 집합으로 이루어짐
- 단일 릴레이션이나 두 개의 릴레이션을 입력으로 받아 하나의 결과 릴레이션을 생성함
- 결과 릴레이션은 또 다른 관계 연산자의 입력으로 사용될 수 있음
실렉션 연산자
- 한 릴레이션에서 실레션 조건(selection condition)을 만족하는 투플들의 부분 집합을 생성함
- 단항 연산자
- 결과 릴레이션의 차수(애트리뷰트 수)는 입력 릴레이션 수와 같음
- 결과 릴레이션의 카디날리티(투플 수)는 항상 원래 릴레이션의 카디날리티보다 작거나 같음(0을 허용)
- 실렉션 조건을 predicate라고도 함
프로젝션 연산자
- 한 릴레이션의 애트리뷰트들의 부분 집합을 구함
- 결과로 생성되는 릴레이션은 <애트리뷰트 리스트>에 명시된 애트리뷰트들만 가진다
- 실렉션의 결과 릴레이션에는 중복 투플이 존재할 수 없지만, 프로젝션 연산의 결과 릴레이션에서는 중복된 투플들이 존재할 수 있다
- 결과 릴레이션의 차수는 같거나 작아지며(0을 허용 x), 카디날리티는 동일
관계 릴레이션의 경우에는 중복을 허용하지 않아서 위와 같이 중복을 제거
집합 연산자
- 릴레이션이 투플들의 집합이기 때문에 기존의 집합 연산이 릴레이션에 적용됨
- 세가지 집합 연산자: 합집합, 교집합, 차집합
- 집합 연산자의 입력으로 사용되는 두개의 릴레이션은 합집합 호환(union compatible)해야 한다
- 이항 연산자
합집합 호환
: 두 릴레이션 R1(A1, A2, ... ,An)과 R2(B1, B2, ..., Bm)이 합집합 호환일 필요 충분 조건은 n=m이고, 모든 1<=i<=n에 대해 domain(Ai) = domain(Bi)이다
합집합 연산자
- 두 릴레이션 R과 S의 합집합 R U S는 R 또는 S에 있거나 R과 S 모두에 속한 투플들로 이루어진 릴레이션이다.
- 결과 릴레이션에서 중복된 투플들은 제외됨
- 결과 릴레이션의 차수는 R또는 S의 차수와 같으며, 카디날리티는 같거나 커진다. 애트리뷰트의 이름들은 R의 애트리뷰트들의 이름과 같거나 S의 애트리뷰트 이름과 같음
교집합 연산자
- 두 릴레이션 R과 S의 교집합 R n S는 R과 S 모두에 속한 투플들로 이루어진 릴레이션
- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 애트리뷰트의 이름들은 R의 애트리뷰트들의 이름과 같거나 S의 애트리뷰트 이름과 같음
차집합 연산자
- 두 릴레이션 R과 S의 차집합 R-S는 R에는 속하지만 S에는 속하지 않은 투플들로 이루어진 릴레이션이다
- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 결과 릴레이션의 애트리뷰트 이름들은 R의 애트리뷰트 이름과 같거나 S의 애트리뷰트 이름과 같다
카티션 곱 연산자
- 카디날리티가 n인 릴레이션 R(A1, A2, ..., An)과 카디날리티가 m인 릴레이션 S(B1, B2, ..., Bm)의 카티션 곱 R x S는 차수가 n+m이며, 카디날리티가 n*m이고, 애트리뷰트가(A1, ..., An, B1, ..., Bm)이며, R과 S의 투플들의 모든 가능한 조합으로 이루어진 릴레이션
- 실제로 곱의 결과 매우 클 수 있으며, 사용자가 원하는 것은 일부인 경우가 대부분이므로 유용한 연산자는 아니다.
- 논리적 의미: 모든 가능한 결합의 경우를 나타내는 전체 집합
조인 연산자
- 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자
- 관계 데이터베이스에서 두 개 이상의 릴레이션들의 관계를 다루는데 매우 중요한 연산자
세타 조인
- 두 릴레이션 레이션 R(A1, A2, ..., An)과 릴레이션 S(B1, B2, ..., Bm)의 세타 조인 결과는 차수가 n+m이며, 애트리뷰트가 (A1, A2, ..., An, B1, B2, ..., Bm)이며 조인 조건을 만족하는 투플들로 이루어진 릴레이션
- 세타 조인의 결과는 두 릴레이션의 카티션 곱에 조인 조건을 적용한 결과와 동일
동등 조인
- 동등 조인은 세타 조인 중에서 비교 연산자가 =인 조인
자연 조인
- 두 릴레이션의 공통된 애트리뷰트에 대해 동등 조인을 수행하고, 동등 조인의 결과 릴레이션에 있는 두 개의 조인 애트리뷰트 중 하나를 제외한 조인
- 여러가지 조인 연산자들 중에서 가장 자주 사용됨
- 실제로 관계 데이터베이스의 대부분의 질의는 실렉션, 프로젝션, 자연 조인으로 표현 가능
디비전 연산자
- 차수가 n+m인 릴레이젼 R(A1, A2, ... ,An, B1, B2, ..., Bm)과 차수가 m인 릴레이션 S(B1, B2, ..., Bm)의 디비전은 차수가 n이고, S에 속하는 모든 투플 U에 대하여 투플 tu가 R에 존재하는 투플 t들의 집합
- 릴레이션 S의 모든 투플 값과 쌍을 이루는 릴레이션 R의 A1, A2, ..., An값
추가된 관계 대수 연산자
1) 집단 함수: AVG, SUM, MIN, MAX, COUNT
2) 그룹화: 각 그룹에 대해 집단 함수를 적용
3) 외부조인
- 상대 릴레이션에서 대응되는 투플을 갖지 못하는 투플이나, 조인 애트리뷰트에 널값이 들어 있는 투플들을 다루기 위해서 조인 연산을 확장한 조인
- 두 릴레이션에서 대응되는 투플들을 결합하면서, 대응되는 투플을 갖지 않는 투플과 조인 애트리뷰트에 널값을 갖는 투플들도 결과에 포함
왼쪽 외부 조인 (R ⟕ S)
- R과 S의 왼쪽 외부조인 연산은 R의 모든 투플들을 결과에 포함시키고, S에 관련된 투플이 없으면 결과 릴레이션에서 S의 애트리뷰트들은 널값으로 채움
오른쪽 외부 조인 (R ⟖ S)
- R과 S의 오른쪽 외부 조인 연산은 S의 모든 투플들을 결과에 포함시키고, R에 관련된 투플이 없으면 결과 릴레이션에서 R의 애트리뷰트들은 널값으로 채움
완전 외부 조인 (R ⟗ S)
- R과 S의 완전 외부 조인 연산은 R과 S의 모든 투플들을 결과에 포함시키고, 상대 릴레이션에 관련된 투플이 없으면 상대 릴레이션의 애트리뷰트들은 널값으로 채움 -> R ⟗ S = (R ⟕ S) ∪ (R ⟖ S)
4.2 SQL 개요
- 관계 데이터 모델은 집합을 기반으로 두고 있어 테이블 내에 동일한 투플을 허용하지 않지만, SQL은 이를 허용함
- SQL은 비절차적 언어(선언적 언어)이므로, 사용자는 원하는 바(what)만 명시하며, 원하는 것을 처리하는 방법(how)는 명시하지 않음
- 관계 DBMS는 사용자가 입력한 SQL문을 번역하여 사용자가 요구한 데이터를 찾는데 필요한 모든 과정을 담당
- 대화식 SQL과 내포된 SQL이 존재
오라클 SQL의 구성 요소
- 데이터 검색
- 데이터 조작어
- 데이터 정의어
- 트랜잭션 제어
- 데이터 제어어
4.3 데이터 정의어와 무결성 제약조건
- 데이터 정의어: 데이터 베이스의 객체 생성/삭제/변경
- 스키마의 생성과 제거
: SQL2에서는 동일한 데이터베이스 응용에 속하는 릴레이션, 도메인, 제약조건, 뷰, 권한 등을 그룹화하기 위해서 스키마 개념을 지원
- 릴레이션 정의
- 릴레이션 제거