- 관계형 데이터 모델링에는 두 가지 언어가 존재한다
- 관계해석 : 원하는 데이터만 명시하고 "어떻게 질의를 해석하는가"에 대해 언급이 없는 선언적 언어이다
- 관계대수 : "어떻게 질의를 해석하는가"에 대해 언급하는 절차적
모든 DBMS는 데이터 처리를 위해 하나 이상의 데이터 언어를 제공
- 수학기호(notation)을 사용하여 데이터 처리를 기술한 언어
- 새로운 언어의 개념과 유용성을 검증하는 기준
- 관계 대수
- 수학적인 원리를 기반으로 사용하기 쉽게 만들어진 단어
- 관계 대수로 만들어진 모든 질의가 표현 가능 - Relationally complete
- SQL
- 피연산자로 하나 또는 두 개의 릴레이션
- 각 연산자의 연산 결과는 새로운 릴레이션-연산의 합성(compose) & 체이닝(chaining) 가능
- select
- project
- union
- difference
- intersection
- cartesian product
- natural join
- theta join
- outer join
A=B 조건과 D>5 조건을 만족하는 튜플들을 출력
r릴레이션에 속한 A,D 속성만 출력
속성을 이어붙이고 각 튜플을 서로 곱해서 결국 새로운 릴레이션의 튜플 수는 각 릴레이션의 튜플 개수의 곱과 같다
두 릴레이션의 같은 속성에서 같은 값을 갖는 튜플들끼리 곱셈 연산을 진행한다
r릴레이션의 A속성의 값이 a인 튜플과 r릴레이션의 B속성과 s릴레이션의 B속성이 같은 튜플간의 곱셈 연산을 진행한다
-
위와 같이 다양한 연산들이 있는 관계대수도 한계가 명확히 존재한다
- 정렬이 안된다
- 집단 함수를 지원하지 않는다
- 산술 연산(+,-,*,/)을 못한다
- 데이터베이스를 수정할 수 없다
- 결과에 중복된 튜플들들 명시하고 싶을 때 명시하지 못한다
-
이러한 한계를 극복하기 위해 확장을 시키고, 확장을 시킨 후 튜플기반의 관계해석과 결합한 것이 SQL이다
- SQL = 관계대수 + 튜플기반의 관계해석
관계대수의 확장된 기능을 살펴보자
- 주로 AVG, MIN, MAX, COUNT가 있다
- 그룹화를 원하는 목록을 그룹으로 묶어준다
- 조인의 문제점은 상호 연산이 없는 데이터들이 배제당한다는 것이다
- 그래서 배제당하는 데이터들도 표현해주기 위해 외부조인이 등장했다
이렇게 관계대수의 확장된 기능을 확인했다. 이제 SQL을 살펴볼텐데, SQL은 관계대수의 영향을 받으면서도 관계해석의 영향도 받는다
- 정의
- 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인가는 명시하지 않는 선언적인 언어
- 특징
- 비절차 언어
- 튜플 관계 해석과 도메인 관계 해석이 있다
- 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력면에서 동등
- 연산들의 절차를 사용하여 데이터를 가져온다
- 기본적인 연산지로 union, intersection, difference를 사용한다
- 전체관계를 조작하는데 사용되는 연산들의 집합
- SQL문과 같은 질의어를 사용한다
- 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것
- 다른 말로 여러 테이블에 있는 정보 중 사용자가 필요한 정보만 가져와 가상의 테이블처럼 만들어서 결과를 보여주는 것으로 n개의 테이블을 조합하여 하나의 열로 표현한 것이다
- 키 값이 있는 테이블의 컬럼 값을 비교해서 맞는 값을 가져오는 것이다
- 서로 관련된 내용을 검색해 가져오는 방법이다
- 교집합이라고 생각하면 된다
- 디폴트 조인이다
- Outer Join은 여러 테이블 중 한 테이블에만 데이터가 있고 다른 쪽에는 없는 경우, 데이터가 있는 테이블의 내용을 전부 출력하는 방법이다
- Outer Join에는 LEFT, RIGHT, FULL OUTER JOIN이 있는데 말 그대로 왼쪽의 모든 데이터를 오른쪽 테이블 데이터에 매칭하고 매칭되는 데이터가 없는 경우 NULL로 표시하고, 반대로 오른쪽의 데이터를 왼쪽 데이터를 매칭, 양쪽 모두 조건이 일치하지 않은 것까지 모두 결합해서 출력하는 방식이다
- Cross Join은 두 테이블의 모든 조합을 받아온다
- 곱집합이라고 생각하면 된다
- INNER와 OUTER는 보통 여러 테이블을 조인하는데 자신의 테이블로도 조인이 가능하다. 이를 SELF JOIN이라고 한다
- SELF JOIN은 동일한 테이블을 사용하기 위해 각각 다른 이름으로 지정해서 SQL을 작성한다
- 동일 테이블이라 조인 조건 및 조회하는 컬럼명이 겹치게 되어, 각각 다른 이름으로 별칭을 붙여서 구별을 할 수 있게 한다



















