SQL 데이타 정의문

스키마

: 하나의 사용자에 속하는 테이블과 기타 구성요소 등의 그룹

- 스키마 이름, 스키마 소유자, 스키마 허가권자, (테이블, 뷰, 도메인 기타 내용)포함


SQL 데이타 타입

- 숫자 타입

· INT SMALLINT : 정수

· FLOAT(n), REAL, DOUBLE PRECISION : 실수

· DECIMAL(i, j), REAL, DOUBLE PRICISION : 실수

- 문자 스트링

· CHAR(n), CARCHAR(n) : 문자

- 비트 스트링

· BIT(n), BIT VARYING(n)

- 날짜, 시간

· DATE : 날짜 (YY-MM-DD)

· TIME : 시간 (hh:mm:ss)

· TIMESTAMP : DATE & TIME

· INTERVAL : DATE, TIME & TIMESTAMP


도메인 생성

: CREATE SCHEMA 명령문 (현재는 CREATE DATABASE 명령문을 씀)

- 형식  // 형식에서의 [] 부분은 생략 가능

CREATE DOMAIN 도메인_이름 데이타타입

      [ 묵시값_정의 ]

      [ 도메인_제약조건_정의리스트 ];


도메인 삭제

: DROP DOMAIN 명령문

- 형식

DROP DOMAIN 도메인_이름 RESTRICT | CASCADE:

- RESTRICT : 삭제할 도메인을 참조하는 곳이 없을 때만 삭제 실행

- CASCADE : 삭제할 도메인을 참조하는 모든 곳에서 삭제 실행


테이블 생성

- 형식

CREATE TALE 기본테이블_이름

({열이름 도메인명|타입 [NOT NULL] [DEFAULT 값], }

[PRIMARY KEY (열이름_리스트),]

{[UNIQUE (열이름_리스트),]}*

{[FOREIGN KEY (열이름_리스트)

REFERENCES 기본테이블[(열이름_리스트)]

[ON DELETE 옵션]

[ON UPDATE 옵션], ]}*

[CONSTRAINT 조건이름] [CHECK (조건식)]);


테이블 삭제

- 형식

DROP TABLE 기본테이블_이름 {RESTRICT | CASCADE};


테이블 변경

- 변경 내용

: 열의 첨가/삭제, 묵시값 명세 첨가/삭제, 기본 테이블에 새로운 무결성 조건 명세 첨가/삭제 등

- 형식

ALTER TABLE 기본테이블_이름

([ADD 열_이름 데이타_타입] [DEFAULT 묵시값] | [DROP 열_이름]

[CASCADE] | [ALTER 열_이름 (DROP DEFAULT | SET DEFAULT 묵시값)]);


스키마 제거

- 형식

DROP SCHEMA 스키마_이름 {RESTRICT | CASCADE};


SQL 데이타 조작문

데이타 검색

- 기본 구조

SELECT 열_리스트

FROM 테이블_리스트

WHERE 조건;

- 기본 형식

SELECT [ALL | DISTINCT] 열_리스트

FROM 테이블_리스트

[WHERE 조건]

[GROUP BY 열_리스트 [HAVING 조건]]

[ORDER BY 열_리스트 [ASC | DESC]];

- 검색 결과에 레코드의 중복 제거 (project 와 같음)

SELECT DISTINCT DEPT FROP STUDENT;

- 테이블의 열 전부를 검색

SELECT * FROM STUDENT;

- 조건 검색

SELECT SNO, SNAME FROM STUDENT WHERE DEPT='컴퓨터' AND (YEAR='4');

- 복수 테이블로부터의 검색

SELECT STUDENT.SNAME, STUDENT.DEPT, ENROL.GRADE FROM STUDENT, ENROL WHERE STUDENT.SNP = ENROL.SNP AND ENROL.CNO = 'C413';

- 집단 함수(COUNT, SUM, AVG, MAX, MIN)를 이용한 검색

SELECT COUNT(*) AS 학생수 FROM STUDENT;

- 부속질의어(Subquery)를 사용한 검색 (조인)

SELECT SNAME FROM STUDENT

WHERE SNO IN | NOT IN | =

(SELECT SNO FROM ENROL WHERE CNO = 'C413');

조인만으로 표현

SELECT STUDENT.SNAME FROM STUDENT, ENROL WHERE STUDENT.SNO = ENROL.SNO AND ENROL.CNO = 'C413';

- LIKE를 사용하는 검색

· % : wild string

· _ : wild character

· SNAME LIKE 'S%' | 'S_', '%S_', '%S%' 등

SELECT CNO, CNAME FROM COURSE WHERE CNO LIKE 'C%';

- NULL을 사용한 검색

: IS, IS NOT 이외의 NULL을 이용한 모든 조건식은 맞지 않다

SELECT SNO, SNAME FROM STUDENT WHERE DEPT IS NULL;

- EXISTS를 사용한 검색

· 존재 정량자 : 부속질의문의 결과가 공집합이 아니면 참, 공집합이면 거짓

SELECT SNAME FROM STUDENT WHERE EXISTS (SELECT * FROM ENROL WHERE SNO = STUDENT.SNO AND CNO='C413');

- UNION이 관련된 검색

· 중복되는 투플은 제거

SELECT SNO FROM STUDNET WHERE YEAR = 1 UNION SELECT SNO FROM ENROL WHERE CNO = 'C324';


데이타 수정

- 형식

UPDATE 테이블 

SET { 열_이름 = 산술식, }+

[WHERE 조건];


데이타 삽입

- 형식

INSERT

INTO 테이블 [(열_이름_리스트)]

VALUES (열_값_리스트);


INSERT

INTO 테이블 [(열_이름_리스트)]

SELECT문;

- 레코드를 직접 삽입 하기도 하고 부속 질의문을 이용하여 삽입하기도 함


데이타 삭제

- 형식

DELETE

FROM 테이블

[WHERE 조건];


- 하나의 레코드 삭제

DELETE

FROM STUDENT

WHERE SNO = 100;  // 이부분이 없으면 복수의 레코드 삭제


반응형

관계 대수

- 절차언어

- 데이타를 얻기 위하여 어떻게 해야 되는지 일련의 연산을 순서대로 명세

- 릴레이션(튜플의 집함)을 처리하기 위한 연산

- 폐쇄 성질 : 피연산자 = 릴레이션 & 연산결과 = 릴레이션


일반 집합 연산자

수학적 집합 이론에서 사용하는 연산자로서 릴레이션 연산에도 적용 가능

1) 합집합 (UNION, )

: 합병 가능한 두 릴레이션 R과 S의 합집합 - 두 릴레이션 R 또는 릴레이션 S에 속하는 튜플 t로 구성된 릴레이션

- 수학적 표현 : R ∪ S = { t | t ∈ R ∨ t ∈ S)

- 카디널리티 : |R ∪ S| ≤ |R| + |S|

2) 교집합 (INTERSECT, )

:합병 가능한 두 릴레이션 R과 S의 교집합 - 두 릴레이션 R과 S 양 릴레이션에 동시에 속해 있는 튜플 t로 구성된 릴레이션

- 수학적 표현 : R ∩ S = {t | t ∈ R ∧ t∈ S}

- 카디널리티 : |R ∩ S| ≤ MIN{|R|, |S|}

3) 차집합 (DIFFERENCE, -)

: 합병 가능한 두 릴레이션 R과 S의 차집합 - R - S는 릴레이션 R에는 있지만 릴레이션 S에는 없는 튜플 t로만 구성된 릴레이션

- 수학적 표현 : R - S = {t | t ∈ R ∧ t ∉ S }

- 카디널리티 : |R - S| ≤ |R|

4) 카티션 프로덕트 (CARTESIAN PRODUCT, ×)

: 교차곱, 두 릴레이션 R(A1, A2, ..., An)과 S(B1, b2, ..., Bn)의 카티션 프로덕트 - R에 속한 각 튜플 r에 대해 릴레이션 S에 속한 각 튜플 s를 모두 접속(concatenation : )시긴 튜플 r ∙ s로 구성죈 릴레이션

- 수학적 표현 : R × S = { r  s | r ∈ R ∧ s ∈ S}

- 카디널리티 : R × S = { r  s | r ∈ R ∧ s ∈ S}



순수 관계 연산자

:관계 데이터베이스에 적용할 수 있도록 특별히 개발한 관계 연산자

1) 셀렉트 (SELECT, σ (시그마))

: 릴레이션에서 주어진 조건을 만족하는 튜플들을 선택하는 연산 (연산 대상 : 튜플)

- 조건식을 참으로 만드는 튜플을 선택하는 것

- 조건식의 결과로 릴레이션을 수평적으로 절단하여 그 일부를 가지고 구성 : 수평적 부분 집합

- 표기 형식 : σ(조건)(R) , R = 릴레이션 이름

- 데이타 언어 : R WHERE 조건식

2) 프로젝트 (PROJECT, π (파이))

: 릴레이션에서 프로젝트 연산에 명세된 애트리뷰트 값들만을 선택하는 연산 (연산 대상 : 릴레이션의 애트리뷰트)

- 연산에 명세된 애트리뷰트 값들을 선택하여 릴레이션을 수직적으로 절단한 열의 집합 : 수직적 부분 집합

- 표기 형식 : π(속성리스트)(R)

3) 조인 (JOIN, )

: 릴레이션 R의 튜플 r과 릴레이션 S의 튜플 s에 대해 조인 조건을 만족하는 모든 r과 s를 접속해서 만들어지는 튜플로 구성된 릴레이션을 만드는 연산

- 결과 릴레이션의 각 애트리뷰트는 유일성을 만족시켜야 함 : 원 소속 릴레이션의 이름을 애트리뷰트 앞에 한정어로 붙여 유일성 유지

- 세타 조인 : 비교연산자는 θ(theta)로 표현하여 일반화, θ로 표현될 수 있는 조인

- 동일 조인 : θ가 "="인 조인

- 자연 조인 : 동일 조인 결과 릴레이션에서 중복되는 애트리뷰트를 제거해주는 연산

- 표기 형식:  R ⋈ 키속성 r = 키속성 s S (키속성 r = 릴레이션 R의 속성, 키속성 s = 릴레이션 S의 속성)

4) 디비전 (DIVISION, ÷)

: 두 릴레이션 R(X)와 S(Y)에 대해 R ÷ S 연산에서 R에는 있고 S에는 없는 속성을 구하는 연산

- 표기 형식 : R[속성r ÷ 속성s]S (속성r은 릴레이션 R의 속성, s는 릴레이션 S의 속성, 속성 r = 속성 s) 




관계 해석

- 비절차적 언어 (원하는 정보가 무엇이라는 것만 선언)

- 관계 데이타 모델의 연산 표현 방법


반응형

'개념 정리 > Database' 카테고리의 다른 글

[Database] 개념 공부 3 (SQL)  (0) 2017.05.15
[Database] 개념 공부 1 (기본 용어)  (0) 2017.05.09

작년에 수업을 들으면서 배웠던 개념들이 시간이 지나서 헷갈려서 다시 정리를 해보려고 한다. 지극히 내 중심의 개념정리라서 나에게 필요한 부분들만 후에 다시 확인하기 쉽도록 적어 놓으려 한다.



기본 용어

   개체(Entity) 

: 표현하려는 유무형 정보의 객체, 정보의 단위, 하나 이상의 속성(Attribute)로 구성

- 개체 타입(열들의 이름의 집합 개념), 개체 인스턴스(튜플 하나하나), 개체 집합(튜플들의 집합)


   관계(Relation) 

: 두 개 이상의 개체들 사이의 연관성을 의미

- 속성 관계(개체 내의 관계), 개체 관계(개체 간의 관계)

- 1:1 관계, 1:N 관계, N:M관계


   속성(Property) 

: 개체의 특성을 표현



스키마

   외부 스키마(external schema)

- 개개 사용자의 데이타베이스 정의

- 전체 데이타베이스의 한 논리적인 부분

- subschema


   개념 스키마(conceptual schema)

- 기관 전체적인 데이타베이스 정의

- 모든 응용에 대한 전체적인 통합된 데이타 구조

- schema


   내부 스키마(internal schema)

- 저장 장치 관점에서 표현

- 개념 스키마의 저장구조를 정의



데이타언어

   데이타 정의어(DDL, Data Definition Language)

: 데이타베이스의 정의 및 수정

- 요소 : 논리적 데이타 구조의 정의, 물리적 데이타 구조의 정의, 논리적 데이타 구조와 물리적 데이타 구조 간의 사상 정의


   데이타 조작어(DML, Data Manipulation Language)

: 사용자(응용 프로그램)와 DBMS 사이의 통신 수단

- 절차적 DML : 저급어, what & how를 명세, 한번에 하나의 레코드만 처리, 응용 프로그램 속에 삽입 되어 사용, DML 예비 컴파일러

- 비절차적 DML : 고급어, what만 명세, 한번에 여러개의 레코드 처리, 독자적 & 대화식 사용(Query Language)


   데이타 제어어(DCL, Data Control Language)

: 공용 데이타베이스 관리를 위한 데이타 제어를 정의하고 기술하는 언어

- 데이타를 관리하기 위한 도구 : 보안, 무결성, 회복, 병행수행



ER다이어그램

   데이터 모델링 과정에서 현실 세계를 개체 타입과 관계 타입을 통해 개념적으로 표현을 한다. 특정 DBMS을 고려 하는 것은 아님.



데이타베이스의 종류

   계층형 데이타베이스

 : 데이터 관계를 트리 구조로 정의하여 부모, 자식 형태를 갖는 구조이다. 각 데이터 개체들은 상하 관계를 나타내는 링크로 구성된다.(상위 레코드가 복수의 하위 레코드를 갖는 구조) 데이터의 중복 문제가 생길 수 있는 단점이 있다.


   네트워크형 데이타베이스

 : 그래프 구조를 기반으로 하여 개체와 개체 관계를 그래프 구조로 연결한다. 계층형 데이타베이스와는 다르게 상위 개체를 여러개를 가질 수 있는 차이점이 있다. 계층형 데이타베이스의 중복 문제를 해결하였으나 구조가 복잡하여 추후에 구조를 변경하기 복잡한 단점이 있다.


   관계형 데이타베이스

 : 관계형 데이타 모델을 사용하며 현재까지 가장 안정적이고 효율적으로 여겨저 가장 많이 사용되는 데이타 베이스이다. Column과 Row(레코드 혹은 튜플로 불림)로 구성된 하나 이상의 테이블간의 관계를 나타낼 때 사용한다. 고유 키(Primary key)가 각 Row를 구분할 수 있도록 한다. 각 테이블/관계는 하나의 엔티티 타입을 대표하며 Row는 그 엔티티 종류의 인스턴스를 대표하고 Column은 그 인스턴스의 속성이 되는 값들을 나타낸다.


   NoSql 데이타베이스
: Not Only Sql의 약자인 NoSql은 모든 비관계형 데이타베이스 제품군을 설명하는데 사용되는 용어이다. 기존 관계형 데이타베이스는 스키마 수정이 용이하지 못하는 등 확장성이 떨어지는 등의 단점을 보완한 데이타베이스이다. 관계형 모델을 사용하지 않고 클러스터에서 잘 동작하며 빅데이터가 주를 이루는 웹 환경을 위해 구축되었고 스키마가 없는 특징을 가졌다. NoSql은 대부분이 오픈소스라는 특징도 가지고 있다.




반응형

+ Recent posts