관계 대수와 SQL

남태우·2020년 12월 3일
0

관계대수 관계해석

관계형 데이터베이스에서는 관계대수와 관계해석이 존재합니다.

  • 관계 해석은 원하는 데이터만을 명시하고 어떻게 질의를 해석하는가에 언급을 하지 않는 명시적 언어입니다.
  • 관계 대수는 어떻게 질의를 해석하는가에 언급을 하는 절차적 언어입니다.

관계대수는 단일 혹은 두 테이블을 입력 받아 결과로 테이블이 나타나며, 집합 연산 토대로 만들어졌기 때문에 집합 연산에 속합니다.

관계 대수는 셀렉션, 프로젝션, 합집합, 교집합, 차집합, 카디션 곱, 디비젼, 조인이 존재합니다.

  • 셀렉션은 테이블에서 원하는 데이터를 수평적으로 도출합니다.
  • 프로젝션은 테이블에서 원하는 데이터를 수직적으로 도출합니다.
  • 합집합은 호환 조건이 필요합니다. 호환 조건은 릴레이션의 차수가 같아야 하며, 그에 대응되는 도메인도 같아야 합니다.
  • 교집합, 차집합도 합집합과 같이 호환 조건이 있어야 합니다.
  • 카디션 곱은 R, S 릴레이션이 존재한다면, R, S의 모든 경우의 수를 나타낼 수 있는 연산입니다.
  • 디비젼은 릴레이션 R, S가 존재한다고 하면, 릴레이션 R이 릴레이션의 S의 모든 컬럼을 포함하고 있어야 합니다.
  • 조인은 서로 상호연관이 있는 두 릴레이션을 합칠 수 있습니다. 조인에서는 세타, 동등, 자연 조인이 존재합니다.
    • 세타 조인은 연산자(<, >, ,<>, =, <=, =>)을 이용하여 투플을 반환합니다.
    • 동등 조인은 세타 조인에서의 비교 연산자(=)을 사용한 조인입니다.
    • 자연 조인은 동등 조인에서 중복된 속성을 제거한 결과입니다.

관계 대수의 한계

그러나 관계 대수에서 한계점이 존재합니다.
한계점으로는 정렬 불가, 집단 함수 사용 불가, 산술 연산 불가, 데이터베이스 수정 불가, 중복된 투플의 값을 명시하고 싶을 때, 명시 불가능합니다.

이러한 한계점을 극복하고 위해서 관계 대수를 확장시키며, 투플 기반의 관계 해석을 사용함으로써 SQL이 등장합니다.
관계 대수의 확장된 기능을 보게되면, 3가지로 집단 함수, 그룹화, 외부조인이 존재합니다.

  • 집단 함수은 여러 가지 연산을 사용할 수 있습니다.
  • 그룹화는 원하는 목록을 그룹으로 묶어줍니다. 한 부서의 평균 연봉을 알고 싶다고 하면 그룹화와 집단 함수의 AVG를 이용하여 구할 수 있습니다. SUM, MIN, MAX, COUNT 등을 사용할 수 있습니다.
  • 기본 조인의 문제점으로는 상호 연관이 없는 부분에 대해서는 배제됩니다. 이러한 배제되는 부분들의 데이터들도 표현해주기 위해서 외부조인이 사용됩니다. 외부조인에서는 왼쪽외부조인, 오른쪽외부조인, 완전외부조인이 존재합니다.

SQL

기본적으로 SQL은 관계해석과 관계대수의 영향을 받습니다.
SQL은 표준 관게형 데이터베이스입니다. 즉, 데이터베이스와 대화하는 순차적 언어라고 생각합니다.

SQL은 DB - DBMS - 대화식SQL내포된SQL로 될 것입니다.

  • 대화식SQL 주로 DBA가 사용할 것이며, 뷰와 테이블을 다룰 것입니다.
  • 내포된SQL 기본적으로 SQL은 순차구조적 문장을 가지고 있기 때문에, 프로그램을 만들 수 없습니다. 프로그램을 만들기 위해서는 선택, 반복, 조건이 필요합니다. 하지만 SQL은 가지고 있지 않습니다. 내포된SQL은 호스트 언어와 GUI를 지원하기 때문에 프로그램을 만들 수 있습니다.

SQL은 데이터 정의어, 데이터 조작어, 데이터 제어어를 가지고 있습니다.

  • 데이터 정의어는 뷰나 테이블을 나타냅니다. 뷰는 사용자에게 편의를 제공하며 보안의 효율성이 우수한 장점이 존재합니다.
  • 데이터 조작어는 검색, 추가, 삭제, 수정 등을 조작할 수 있으며, 프로그래머가 CRUD를 주로 구현할 것입니다.
  • 데이터 제어어는 객체 무결성 제약조건으로 데이터 불일치가 되는 현상을 제어하는 역할을 할 수 있습니다.

데이터 정의어는 CREATE/DROP - DOMAIN, VIEW, TABLE, INDEX를 삭제 및 생성을 합니다.
ALTER TABLE로는 테이블의 구조를 변경, 컬럼 추가, 삭제가 가능합니다.

무결성 제약조건은 테이블 생성 시 제약 조건을 사용해서 입력하는 자료에 대해서 제약, 규칙을 정할 수 있습니다. 만약 제약에 배반된다면 오류가 나타납니다.
제약 조건을 정리하게 되면, 권한이 부여된 계정이나 사람만이 접근이 가능하고, 정확하고 완전한 데이터가 저장되어 있는 상태입니다.
무결성을 보장함으로 데이터 불일치 및 중복 저장 등을 해결해줄 수 있습니다.

제약 조건으로는 NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK가 존재합니다.
FOREIGN KEY 옵션으로는
ON DELETE NO ACTION 오류 발생시 롤백을 합니다.
ON DELETE CASCADE 부모 테이블에서 삭제 시 참조 테이블도 삭제
ON DELETE SET NULL 부모 테이블에서 삭제 시 NULL
ON DELETE SET DEFAULT 부모 테이블에서 삭제 시 기본 값
ON DELETE RESTRICT 자식 테이블에 데이터가 있다면 부모 테이블에서 삭제 불가능

기본적인 SQL을 보도록 하면,

SELECT

SELECT 칼럼 FROM
WHERE 조건
GROUP BY 칼럼(들)
HAVING 조건
ORDER BY 칼럼

SELECT에서 *은 모든 컬럼에 대해서 검색을 하며 DISINCT는 중복을 제거합니다.
FROM은 테이블을 쓸 수 있으면 as 키워드로 별칭을 지을 수 있습니다.
WHERE은 조건을 걸어서 필요한 정보를 찾을 수 있습니다. LIKE, BETWEEN AND, IN, OR, IS NULL 등을 사용할 수 있습니다.
GROUP BY은 그룹화를 할 수 있습니다.
HAVING은 그룹화된 결과에 filtering을 할 수 있습니다. SUM, MIN, MAX, AVG와 같은 집계 함수와 잘 어울립니다.
ORDER BY은 정렬을 사용할 수 있습니다. AES, DESC을 사용할 수 있습니다.
JOIN은 두 개 이상의 데이블에 대해 연관된 튜블끼리 조인합니다.
정규화를 할 수 있기 때문에 JOIN을 사용할 수 있는 것입니다.

INSERT

INSERT INTO 테이블
(칼럼, ...)
VALUES(넣을 값)

INSERT은 한 테이블에 대해서 튜플을 삽입시킵니다.

DELETE

DELETE FROM 테이블
WHERE 조건

DELETE는 한 테이블에서 튜플을 삭제합니다.
WHERE 조건을 사용하여 선태적으로 튜플을 삭제할 수 있습니다.
만약 WHERE을 사용하지 않는다면, 테이블 내 모든 데이터가 삭제되므로 조심해야 합니다.

참조되는 테이블에 대해서 DELETE을 하면 참조무결성 위배되지만
참조하는 테이블에 대해서는 위배하지 않습니다.
참조하는 테이블은 외래키를 가지고 있는 테이블이라고 생각하면 됩니다.

UPDATE

UPDATE 테이블
SET (칼럼=식,...)
WHERE 조건

UPDATE는 한 테이블에서 튜플의 칼럼 값을 수정할 수 있습니다.
기본키나 외래키에 속한 칼럼에 대해서 수행시 참조 무결성 제외됩니다.

profile
brand-new

0개의 댓글