SQL 정의어는 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 제거하는데 사용하는 언어이다.
정의된 내용은 메타 데이터(meta data)가 되며, 시스템 카탈로그(system catalog)에 저장된다.
CREATE
스키마, 도메인, 테이블, 뷰, 인덱스를 정의한다.
CREATE TABLE EMPLOYEE
(EMP_NO INTEGER NOT NULL,
NAME CHAR(10),
POSITION CHAR(10) DEFAULT 'EMPLOYEE',
MANAGER INTEGER,
SALARY INTEGER
CHECK (SALARY < 6000000),
DEPT_NO INTEGER
CHECK (DEPT_NO IN (1,2,3,4,5)) DEFAULT 1,
PRIMARY KEY (EMP_NO),
FOREIGN KEY (MANAGER) REFERENCES EMPLOYEE(EMP_NO),
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (DEPT_NO) REFERENCES DEPT(DEPT_NO)
ON DELETE SET DEFAULT ON UPDATE CASCADE);
CREATE ASSERTION assertion_name
CHECK (condition);
CREATE ASSERTION salary_check
CHECK (
(SELECT AVG(SALARY) FROM EMPLOYEE) <= 100000
);
ALTER
기존 테이블에 대해 새로운 열의 첨가, 디폴트의 변경, 기존 열의 삭제 등을 수행한다.
ALTER TABLE STUDENT
ADD CONSTRAINT STUDENT_PK
PRIMARY KEY(STUDENT_ID);
DROP
스키마, 도메인, 테이블, 뷰, 인덱스를 제거 등을 수행한다.
DROP TABLE STUDENT;
SELECT
SELECT [DISTINCT] attributes
FROM relations
[WHERE condition [sub_query]]
[GROUP BY attributes [HAVING condition]]
[ORDER BY attributes [ASC | DESC]];
SELECT DISTINCT NAME, AGE
FROM STUDENT
WHERE AGE > 20
GROUP BY DEPT_NO
HAVING COUNT(*) > 5
ORDER BY NAME ASC;
| 구분 | 종류 |
|---|---|
| 비교 연산자 | =, <>, <, >=, <, <= |
| 부울 연산자 | AND, OR, NOT |
| 집합 연산자 | IN, NOT IN, ANY(SOME), ALL, EXISTS |
| 기타 | COUNT, AVG, SUM, MAX, MIN, LIKE, NOT LIKE |
중첩 질의로부터 한 개의 애트리뷰트로 이루어진 릴레이션이 반환되는 경우에는 외부 질의의 WHERE절에 IN, ANY(SOME), ALL, EXISTS가 사용되고, 여러 애트리뷰트로 이루어진 릴레이션이 반환되는 경우에는 EXISTS가 사용된다.
INSERT
INSERT INTO relation(attribute1, attribute2, ... attributen)
VALUES (value1, value2, ..., valuen)
사용하는 INSERT문의 구문에 관계없이 VALUES 내의 값 개수는 항상 정확해야 한다.
열 이름이 없을 경우 값은 테이블의 모든 열에 맞게 사용되어야 하고, 열 이름을 지정할 경우에는 지정한 열 개수만큼 값을 지정해야 한다. 또한, VALUES절의 값 순서가 릴레이션 내의 애트리뷰트 순서와 일치해야 한다.
INSERT INTO STUDENT (STUDENT_ID, NAME, AGE)
VALUES (1, 'John Doe', 20);
INSERT INTO STUDENT
VALUES (2, 'Jane Smith', 22);
UPDATE
UPDATE relation
SET attribute = value | expression
[WHERE condition];
UPDATE문은 수정된 애트리뷰트가 기본키나 외래키에 속하지 않는 한 어떤 무결성 제약조건도 위반하지 않는다.
UPDATE EMPLOYEE
SET SALARY = 60000
WHERE EMPLOYEE_ID = 101;
UPDATE ORDER
SET TOTAL_PRICE = QUANTITY * UNIT_PRICE
WHERE ORDER_ID = 1001;
DELETE
DELETE FROM relation
[WHERE condition];
DELETE FROM EMPLOYEE
WHERE EMPLOYEE_ID = 102;
DELETE FROM ORDER
WHERE ORDER_DATE < '2024-07-07';
NoSQL 데이터베이스는 관계형 데이터베이스 모델을 사용하지 않고 데이터를 저장하고 관리하는 데이터베이스 시스템을 말한다.
NoSQL 데이터베이스는 CAP 이론에 따라 일관성(Consistency), 가용성(Availability), 분할성(Partition Tolerance) 중에서 CP 또는 AP 중 하나를 선택한다.
일관성(Consistency)
모든 노드가 같은 시간에 같은 데이터를 볼 수 있어야 한다는 원칙입니다. 즉, 데이터의 변화가 일어날 때 모든 노드에 동일한 데이터가 즉시 반영되어야 합니다.
가용성(Availability)
모든 요청은 성공 또는 실패로 반환되어야 하며, 시스템이 장애가 발생해도 항상 응답이 가능해야 합니다.
분할성(Partition Tolerance)시스템 내의 네트워크 분할이 발생하더라도 시스템이 정상적으로 동작해야 합니다.
키밸류(Key-Value)
간단한 구조로 키와 값의 쌍을 저장하는 데이터 모델이다. 순차적 키밸류보다 조회 성능이 떨어진다.
Redis, Dynamo, Memcached, SimpleDB와 같은 메모리 기반 데이터베이스가 대표적이다.
순차적 키밸류(Sequential Key-Value)
키 값에 순차적인 접근이 가능한 데이터 모델로, 조회 성능이 좋다.
Tokyo Cabinet, Berkeley DB가 있다.
빅테이블(BigTable)
구글이 개발한 키-열(column) 기반의 분산 데이터 저장소로, 대량의 데이터를 효율적으로 처리할 수 있다.
HBase, Cassandra, Cloudata, Hypetable이 있다.
도큐먼트(Document)
JSON 또는 BSON 형식의 문서를 저장하는 데이터 모델이다.
MongoDB, CouchDB, Couchbase, Cloudant가 있다.
그래프(Graph)
그래프 형식의 데이터 모델을 지원하여 복잡한 관계를 효율적으로 표현하고 조회할 수 있다. Neo4j가 대표적이다.
비정규화
관계형 데이터베이스와는 달리 데이터 중복을 허용하고 데이터 모델링을 유연하게 할 수 있다.
모델 다양성
다양한 데이터 모델을 제공하여 데이터의 특성에 맞게 최적화된 접근 방식을 제공한다.
분산 확장성
대규모 데이터를 처리할 수 있도록 분산 환경에서 확장 가능한 아키텍처를 제공한다.
참고
데이터베이스론