관계형 데이터베이스에서는 관계대수와 관계해석이 존재합니다.
관계대수는 단일 혹은 두 테이블을 입력 받아 결과로 테이블이 나타나며, 집합 연산 토대로 만들어졌기 때문에 집합 연산에 속합니다.
관계 대수는 셀렉션, 프로젝션, 합집합, 교집합, 차집합, 카디션 곱, 디비젼, 조인이 존재합니다.
그러나 관계 대수에서 한계점이 존재합니다.
한계점으로는 정렬 불가, 집단 함수 사용 불가, 산술 연산 불가, 데이터베이스 수정 불가, 중복된 투플의 값을 명시하고 싶을 때, 명시 불가능합니다.
이러한 한계점을 극복하고 위해서 관계 대수를 확장시키며, 투플 기반의 관계 해석을 사용함으로써 SQL이 등장합니다.
관계 대수의 확장된 기능을 보게되면, 3가지로 집단 함수, 그룹화, 외부조인이 존재합니다.
기본적으로 SQL은 관계해석과 관계대수의 영향을 받습니다.
SQL은 표준 관게형 데이터베이스입니다. 즉, 데이터베이스와 대화하는 순차적 언어라고 생각합니다.
SQL은 DB
- DBMS
- 대화식SQL
와 내포된SQL
로 될 것입니다.
대화식SQL
주로 DBA가 사용할 것이며, 뷰와 테이블을 다룰 것입니다.내포된SQL
기본적으로 SQL은 순차구조적 문장을 가지고 있기 때문에, 프로그램을 만들 수 없습니다. 프로그램을 만들기 위해서는 선택, 반복, 조건이 필요합니다. 하지만 SQL은 가지고 있지 않습니다. 내포된SQL은 호스트 언어와 GUI를 지원하기 때문에 프로그램을 만들 수 있습니다.SQL은 데이터 정의어, 데이터 조작어, 데이터 제어어를 가지고 있습니다.
데이터 정의어는 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 칼럼 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 INTO 테이블
(칼럼, ...)
VALUES(넣을 값)
INSERT은 한 테이블에 대해서 튜플을 삽입시킵니다.
DELETE FROM 테이블
WHERE 조건
DELETE는 한 테이블에서 튜플을 삭제합니다.
WHERE 조건을 사용하여 선태적으로 튜플을 삭제할 수 있습니다.
만약 WHERE을 사용하지 않는다면, 테이블 내 모든 데이터가 삭제되므로 조심해야 합니다.
참조되는 테이블에 대해서 DELETE을 하면 참조무결성 위배되지만
참조하는 테이블에 대해서는 위배하지 않습니다.
참조하는 테이블은 외래키를 가지고 있는 테이블이라고 생각하면 됩니다.
UPDATE 테이블
SET (칼럼=식,...)
WHERE 조건
UPDATE는 한 테이블에서 튜플의 칼럼 값을 수정할 수 있습니다.
기본키나 외래키에 속한 칼럼에 대해서 수행시 참조 무결성 제외됩니다.