# STANDARD SQL 개요
가. 일반 집합 연산자
1. UNION(합집합) 연산 -> UNION 기능으로 구현.
2. INTERSECTION(교집합) 연산 -> INTERSECT 기능으로 구현.
3. DIFFERENCE(차집합) 연산 -> EXCEPT(Oracle은 MINUS(-)) 기능으로 구현.
4. PRODUCT(곱집합) 연산 -> CROSS JOIN 기능으로 구현.
(CARTESIAN PRODUCT)
a x
b y
c
크로스 조인(M*N) 결과 ->
a x
a y
b x
b y
c x
c y
나. 순수 관계 연산자
5. SELECT(행 조회) - SELECT절은 WHERE 절로 구현한다.
6. PROJECT(열 조회) - PROJECT연산은 SELECT절의 컬럼 선택 기능으로 구현됐다.
7. (Natural) JOIN - JOIN 연산은 WHERE절의 INNER JOIN 조건과 함께 FROM 절의 NATURAL JOIN, INNER JOIN, OUTER JOIN, USING 조건절, ON 조건절 등으로 다양하게 발전했다.
8. DIVIDE - DIVIDE 연산은 나눗셈과 비슷한 개념으로 왼쪽의 집합을 'XZ'로 나누었을 때, 즉 'XZ'를 모두 갖고 있는 'A'가 답이 되는 기능으로 현재 사용되지 않는다.
관계형 데이터베이스의 경우 요구 사항 분석, 개념적/논리적/물리적 데이터 모델링 단계를 거치게 된다.
이 단계에서 엔티티 확정 및 정규화 과정, M:M(다대다) 관계를 분해하는 절차를 거치게 된다.
특히 정규화 과정의 경우 데이터 정합성과 데이터 저장 곤간의 절약을 위해 엔티티를 최대한 분리하는 작업으로,
일반적으로 3차 정규형이나 BCNF(보이스코드 정규형)까지 진행하게 된다.
이런 정규화를 거치면 하나의 주제에 관련된 엔티티가 여러 개로 나뉘게 된다. 이 엔티티들이 주로 테이블이 되는데, 이렇게 흩어진 데이터를 연결해 원하는 데이터를 가져오는 작업이 바로 JOIN이라고 할 수 있다.
# 테이블
데이터는 관계형 데이터베이스의 기본 단위인 테이블(TABLE) 형태로 저장된다. 모든 자료는 테이블에 등록되고, 사용자는 테이블로부터 원하는 자료를 꺼내올 수 있다. 테이블은 어느 특정한 주제와 목적으로 만들어지는 일종의 집합이다.
테이블은 데이터를 저장하는 객체(Object)로서 관계형 데이터베이스의 기본 단위다. 관계형 데이터베이스에서는 모든 데이터를 칼럼과 행이라는 2차원 구조로 나타낸다. 세로 방향을 칼럼(Column), 가로 방향을 행(Row)이라고 한다. 칼럼과 행이 겹치는(교차되는) 하나의 공간을 필드(Field)라고 한다.
여러 개의 테이블로 분할된 테이블들은 그 칼럼의 값에 의해 연결된다. 이렇게 테이블을 분할해 데이터의 불필요한 중복을 줄이는 것을 정규화(Normalization)라고 한다.
데이터의 정합성 확보와 데이터 입력/수정/삭제 시 발생할 수 있는 이상현상(Anomaly)을 방지하기 위해 정규화는 관계형 데이터베이스 모델링에서 매우 중요한 프로세스다.
정규화 : 테이블을 분할해 데이터의 정합성을 확보하고, 불필요한 중복을 줄이는 프로세스.
기본키 : 각 행을 한 가지 의미로 특정할 수 있는 한 개 이상의 칼럼.
외부키 : 다른 테이블의 기본키로 사용되고 있는 관계를 연결하는 칼럼.
# ERD
ERD(E-R 다이어그램) : 테이블 간의 상관관계를 그림으로 도식화한 것.
ERD(Entity Relationship Diagram)는 관계의 의미를 직관적으로 표현할 수 있는 수단이다. ERD의 구성 요소는 엔티티(Entity), 관계(Relationship), 속성(Attribute) 3가지이며, 현실 세계의 데이터를 이 3가지 구성 요소로 표현한다.
# 데이터 유형
데이터 유형 - CHARACTER(s), VARCHAR(s), NUMERIC, DATETIME
* CHARACTER(s)
- 고정 길이 문자열 정보(Oracle, SQL server 에서는 CHAR로 표현).
- s는 기본 길이 1바이트, 최대 길이 Oracle 2000바이트, SQL Server 8000바이트.
- s만큼 최대 길이/고정 길이를 갖고 있으므로 할당된 변수 값의 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워진다.
* VARCHAR(s)
- CHARACTER VARYING의 약자로 가변 길이 문자열 정보(Oracle은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표현).
- s는 최소 길이 1바이트, 최대 길이 Oracle 4000바이트, SQL Server 8000바이트.
- s만큼의 최대 길이를 갖지만 가변 길이로 조정이 되기 때문에 할당된 변수값의 바이트만 적용된다(Limit 개념).
* NUMERIC
- 정수, 실수 등 숫자 정보(Oracle은 NUMBER로, SQL Server는 10가지 이상의 숫자 타입을 갖고 있음).
- Oracle은 처음에 전제 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다. 예를 들어, 정수 부분이 6자리이고 소수점 부분이 2자리인 경우에는 'NUMBER(8,2)'와 같이 된다.
* DATETIME
- 날짜와 시각 정보(Oracle은 DATE로 표현, SQL Server는 DATETIME으로 표현).
- Oracle은 1초 단위, SQL Server는 3.33ms(millisecond) 단위 관리.
'데이터베이스(DB) > SQL 전문가 가이드' 카테고리의 다른 글
SQL 기본 - SELECT문 (0) | 2021.11.02 |
---|---|
SQL 기본 - SQL문 종류 (0) | 2021.11.02 |