본문 바로가기

SQLD

SQLD 요약 정리 (3)

관계형 데이터베이스 (Relation Database)

- 1970년대 E.F. Codd박사의 논문에서 처음 소개

- Oracle, MS-SQL, MySQL, Sybase -> 관계형 데이터베이스 지원

 

데이터베이스 종류

-계층형 : 1:N 관계 트리 형태 자료구조 

-네트워크형 : Owner과 Member 형테로 데이터 저장

-관계형 : 릴레이션에 데이터를 저장하고 관리, 릴레이션을 사용해서 집합 연산과 관계연산 가능

 

데이터베이스 관리 시스템 (DBMS) : 데이터베이스를 관리하기위한 소프트웨어

 

집합연산

Union(합집합): 두개의 릴레이션을 하나로 합하는것, 중복된 행(튜플)은 한번만 조회

Difference(차집합): 본래 릴레이션에서 존재하고 다른 릴레이션에 존재하지 않는것을 조회

Intersection(교집합): 두개의 릴레이션간에 공통된 것을 조회

Cartesian Product(곱집합): 각 릴레이션에 존재하는 모든데이터를 조합, 중복허용

 

관계연산

Selection(선택연산)

Projection(투영 연산)

Join(결합연산)

Division(나누기 연산)

 

기본키(primary key) -유일성,최소성(not null),대표성

외래키(Foreign key) -다른테이블의 기본키를 참조하는 칼럼

 

SQL(Structured Query Language)

-데이터의 구조를 정의,조작,제어 할수있는 절차형 언어

-ANSI/ISO 표준 준수하기 때문에 DBMS가 변경되어도 그대로 사용가능

 

SQL의 종류

DDL(Data Definition Language) : create, alter, drop, rename

DML(Data Manipulation Language) : insert, delete, select, update

DCL(Data Control Language) : grant, revoke

TCL(Transaction Control Language): commit, rollback   

※transaction: 트랜젝션은 데이터베이스의 작업을 처리하는 단위

 

트랜잭션의 특성

원자성(Atomicity) : 트랜잭션은 데이터베이스 연산의 전부 또는 아무실행을 안함 all or nothing  트랜젝셩 처리가 완전히 끝나지 않았을 경우 전혀 이루어지지 않는 것과 같다.

일관성(Consistency) : 트랜잭션 실행 후에도 일관성이 유지

고립성(Isolation) : 연산의 중간결과는 다른트랜젝션이 접근할수없음

연속성(Durability) : 완료된 결과는 영구성 보장

 

SQL 실행순서

파싱(parsing) : 구문 분석 -> library cache 에 저장 

실행(execution) : 옵티마이저가 수립한 실행 계획에 따라 sql실행

인출(fetch): 데이터를 읽어서 전송

 

테이블 생성

create table dept(

  deptno varchar2(4) primary key,

  deptname varchar2(20)

); --참조될 마스터 테이블 먼저 생성

 

create table emp(

  empno number(10),

  ename varchar2(20),

  sal number(10,2) default 0,  --소수점 둘쨰자리 까지 저장

  deptno varchar2(4) not null,

  createdate date default sysdate,

  constraint emppk primary key(empno),

  constraint deptfk foreign key(deptno) references dept (deptno) ON DELETE CASCADE 

);

 

desc emp;  --생성된 테이블 구조 보고 싶을때

 

CASCADE 옵션 : 참조관계가 있을 경우 참조되는 데이터도 삭제 , 참조 무결성 준수

 

테이블명 변경 

ALTER TABLE emp RENAME TO new_emp;

 

테이블 변경

ALTER TABLE

 

칼럼추가

ALTER TABLE emp ADD (age number(2) default 1);

 

칼럼 변경

ALTER TABLE emp MODIFY (ename varchar2(40) not null);

 

칼럼삭제

ALTER TABLE emp DROP COLUMN age;

 

칼럼명 변경

ALTER TABLE emp RENAME COLUMN ename TO new_ename;

 

테이블 삭제

DROP TABLE emp CASCADE CONSTRAINT; --제약조건 모두 삭제

-테이블 구조와 데이터 모두 삭제

 

뷰 VIEW : 테이블로부터 유도된 가상 테이블, 실제 데이터를 가지지않고 테이블을 참조하여 원하는 칼럼만 조회. DATA DICTIONARY에 저장하고 실행시 참조

 

뷰의 특징

-참조한 테이블이 변경되면 뷰도 변경

-뷰에 대한 입력,수정,삭제에는 제약잇음

-보안성 향상

-한번생성된 뷰는 변경할수없고 재생성해야됨.

 

뷰 생성

CREATE VIEW T_EMP AS SELECT * FROM EMP;

 

뷰삭제

DROP VIEW T_EMP; -뷰가 삭제됬다고 해도 참조했던 테이블은 삭제되지 않음

 

뷰 장단점

장점

-보안성

-데이터 관리 간단

-조회문 간단

-하나의 테이블에 여러 개의 뷰 생성가능

 

단점

-뷰는 독자적 인덱스 생성 불가

-삽입,수정,삭제 제약

-데이터 구조는 변경 불가

 

DML(Data Manipulation Language) - insert delete update select

 

INSERT 

INSERT INTO emp( ) VALUES(  );

-이것으로 파일에 저장되는것은 아님. 반드시 COMMIT 실행해야됨 OR (SET AUTO COMMIT ON)

 

INSERT INTO dept_test SELECT * FROM dept; -- 조회한것을 바로 삽입 가능

 

Nologging

-데이터베이스에 데이터를 입력하면 로그파일에 그정보를 기록한다.

-check point 라는 이벤트가 발생하면 로그파일의 데이터를 데이터파일에 저장

-Nologging 옵션은 로그파일의 기록을 최소화 시켜서 입력시 성능을 향상시키는 방법, Buffer cache라는 메모리 영역을 생략하고 기록

 

UPDATE

UPDATE emp SET ename ='조조' WHERE empno=100;

 

DELETE

DELETE FROM emp WHERE empno=100; --delete문으로 데이터를 삭제한다고해서 테이블용량이 초기화 되지않음

 

TRUNCATE TABLE emp; --테이블의 데이터와 용량 초기화

 

ORDER BY -정렬로인한 메모리 많이 사용,성능저하 발생  (oracle 은 정렬을 위해서 메모리 내부에 할당된 SORT_AREA SIZE 를 사용함, 이것이작으면 성능저하 발생)

 

SELECT * FROM emp ORDER BY ename, sal DESC; 

DESC: 내림차순

ASC : 오름차순 (default)

 

DISTINCT

중복된 데이터를 한번만 조회

 

SELECT DISTINCT deptno FROM emp ORDER BY deptno;

 

ALIAS -별칭 부여

 

SELECT ename AS "이름" FROM emp a WHERE a.empno=1000;

 

 

WHERE

<> 같지않은것 조회 ( !=  ^=)

 

LIKE

% :포함한 모든문자

_ :단일문자

 

BETWEEN -지정된 범위에 있는 값 조회

 

IN 

job IN ('clerk','manager')

 

NULL

-모르는 값

-값의 부재

-비교는 알수없음으로 반환

-숫자 날짜 더하면 NULL

-비교연산자 하면 False 나옴

 

NULL 함수

NVL : NULL이면 다른값으로 바꿈 NVL(MGR,0)  - NULL이면 0으로

NVL2 : NVL2(MGR,1,0) - MGR이 NULL이 아니면 1, 맞으면 0 반환

NULLIF : NULLIF(exp1,exp2)  exp1 == exp2 면 null, 같지않으면 exp1 반환

COALESCE : COALESCE(MGR, 1) - NULL이 아니면 1반환

 

GROUP BY

 

HAVING - GROUP BY에 조건절 사용할때 사용. WHERE 절에 조건문을 사용하게되면 GROUP BY 대상에서 제외

 

COUNT() 함수 - COUNT(칼럼) 하면 NULL값을 제외한 행의 수 계산

 

 

 

SELECT문 실행 순서

 

SELECT ename                  --  5

FROM emp                      --  1

WHERE empno=10            --  2

GROUP BY ename             --  3

HAVING count(*) >= 1       --  4

ORDER BY ename;             --  6

 

 

형변환 - 두개의 데이터의 데이터타입이 일치하도록 변환하는것

 

명시적 형변환(Explicit) - 형변환 함수 사용

( TO_CHAR(숫자 OR 날짜 , FORMAT) TO_NUMBER(문자열) TO_DATE(문자열,FORMAT) 

 

암시적 형변환(Implicit) - DBMS에서 자동으로 형변환 , ※인덱스 칼럼에 암시적 형변환을 수행하면 인덱스를 사용 못함

 

 

내장형 함수

ACSII

CHAR(ACSII 값)

SUBSTR(문자열,M,N)

CONCAT( ) - MS-SQL : '+'  ORACLE : '||'

LOWER( )

UPPER( )

LEN( ) OR LENGTH( )

LTRIM(문자열,지정문자) -왼쪽 지정된 문자 생략하면 공백 삭제 

RTRIM( )

TRIM( ) 

 

숫자형함수

ABS( ) -절대값

SIGN( ) - 양 음 0 구별

MOD(1, 2) - 1을 2로 나누어 나머지 계산 % 사용가능

CEIL( ) - 숫자보다 크거나 같은 최소정수

FLOOR() - 숫자보다 작거나 같은 최대 정수

ROUND(숫자, M) -M의 자리에서 반올림 , DEFAULT = 0

TRUNC(숫자, M)  - M의 자리에서 절삭

 

DECODE

SELECT DECODE(empno, 1000, 'TRUE', 'FALSE') FROM emp;

 

CASE

 

SELECT CASE 

               WHEN empno = 1000 THEN 'a'

               WHEN empno = 1001 THEN 'b'

               ELSE 'c'

             END

FROM emp;

 

ROWNUM - 한개의 행을 가지고올수있음. 조회문의 결과에서 논리적인 일련번호 부여, 조회되는 행의수 제한

 

SELECT * FROM emp WHERE ROWNUM >2; 

 

SELECT * FROM (SELECT ROWNUM list, ename FROM emp) WHERE list <=5;  --별칭을 사용해야 됨

 

ROWID -데이터가 어떤 데이터 파일, 어떤블록에 저장되어 있는지 알수있음. 오라클 데이터베이스 내에서 데이터 구분할수있는 유일한 값

 

DCL(Data Control Language)

GRANT - 사용자에게 권한 부여

GRANT SELECT, INSERT, DELETE, UPDATE ON object TO user WITH GRANT OPTION; 

 

WITH GRANT OPTION - 권한을 부여할수있는 권한 부여, REVOKE 하면 모든 권한 회수

WITH ADMIN OPTION - 테이블의 모든 권한 부여, REVOKE 하면 그사용자만 권한 취소

 

REVOKE

REVOKE privileges ON object FROM user;

 

COMMIT 

-INSERT, DELETE, UPDATE 로 변경한 데이터를 데이터베이스에 반영

-변경전 이전 데이터 잃어버림

-데이터베이스 변경으로 인한 LOCK이 해제됨

-COMMIT 하면 하나의 트랜잭션 과정을 종료함

 

ROLLBACK

-이전에 COMMIT한 곳까지만 복구

-데이터 변경사용을 모두 취소하고 트랜잭션을 종료함

 

 

SAVEPOINT

-사용하면 지정된 위치까지만 트랜잭션 ROLLBACK 가능

-ROLLBACK 하면 SAVEPOINT와 상관없이 변경된 모든 데이터 취소

 

ROLLBACK TO [SAVEPOINT]; 

 

 

 

 

'SQLD' 카테고리의 다른 글

SQLD 요약 정리 (2)  (0) 2019.11.30
SQLD 요약정리 (1)  (0) 2019.11.28