티스토리 뷰

반응형


제 1장. SQL 기본



ㅇ SQL 문장들의 종류


- As-Is : 비절차적 데이터 조작어(DML)는 사용자가 무슨(What) 데이터를 원하는 지만 명세

- To-Be : 비절차적 데이터 조작어(DML)는 사용자가 무슨(What) 데이터를 원하는 지만을 명세하지만, 

          절차적 데이터 조작어(PL/SQL(오라클), T-SQL 등)는 어떻게(How) 데이터를 접근해야 하는지 명세

ㅇ WHERE

- FROM 절 다음에 위치

- 비교 연산자

- 문자, 숫자, 표현식

- 비교 칼럼명 (JOIN 사용 시)


ㅇ 연산자



ㅇ 연산자 우선순위

1. 괄호로 묶은 연산

2. 부정 연산자(NOT)

3. 비교 연산자(=, >, >=, <, <=) 와 SQL 비교 연산자 (BETWEEN a AND b, IN (list), LIKE, IS NULL)

4. 논리 연산자 중 AND, OR 순으로 처리


ㅇ PK 제약조건

- Oracle

1
2
3
4
5
6
7
CREATE TABLE EXAMPLE (
    col1 VARCHAR2(10NOT NULL,
    col2 VARCHAR2(100NOT NULL,
    col3 DATE NOT NULL
    col4 NUMBER(10),
    CONSTRAINT EXAMPLE_PK PRIMARY KEY(col1)
);
cs


ㅇ 테이블 칼럼에 대한 정의 변경

- SQL Server

1
ALTER TABLE EXAMPLE ALTER COLUMN COL1 VARCHAR(30NOT NULL;
cs

- Oracle

1
ALTER TABLE EXAMPLE MODIFY COLUMN COL1 VARCHAR(30NOT NULL;
cs


ㅇ 불필요한 컬럼 삭제

1
2
ALTER TABLE EMP
DROP COLUMN COMM;
cs


ㅇ 테이블 이름 변경

1
RENAME STADIUM TO STADIUM_JSC;
cs


ㅇ 테이블에 데이터를 입력하는 두 가지 유형

1
2
3
INSERT INTO TABLE1 (col1, col3, col4) VALUES (134);
 
INSERT INTO TABLE1 VALUES (col1, col2, col3, col4,c col5)
cs


ㅇ 입력된 데이터 수정

1
UPDATE TABLE1 SET COL3 = 3;
cs


ㅇ NULL

- 공백문자나 숫자 0과는 전혀 다른 값

- 아직 정의되지 않은 미지의 값 (모르는 값)

- 현재 데이터를 입력하지 못하는 경우 (값의 부재)

- NULL과의 모든 비교는 알 수 없음을 반환

- ORACLE 에서는 '' 를 NULL로 처리

- 테이블 생성 시 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있음

- NULL 값을 포함하는 경우 결과 값과 NULL

- 결과값을 NULL이 아닌 다른값을 얻고자 할 때 NVL/ISNULL 함수를 사용

  주로 숫자 유형 데이터인 경우 0으로, 문자 유형 데이터인 경우 'X'


ㅇ NULL 의 연산

- NULL 값과의 연산은 NULL 값을 리턴

- NULL 값과의 비교연산은 거짓(FALSE)을 리턴

- 특정 값보다 크다, 적다 라고 표현할 수 없음


ㅇ NULL 관련 함수

ORACLE

- NVL(표현식1, 표현식2) : 표현식1의 결과값이 NULL이면 표현식2의 값을 출력

- ISNULL(표현식1, 표현식2) : 표현식1의 결과값이 NULL이면 표현식2의 값을 출력

SQL

- NULLIF(표현식1, 표현식2) : 표현식1이 표현식2와 같으면 NULL을, 다르면 표현식1을 리턴

- COALESCE(표현식1, 표현식2, ...) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식


ㅇ 집계 함수의 종류

ㅇ DELETE


ㅇ Delete(/Modify) Action

- Cascade        : Master 삭제 시 Child 같이 삭제

- Set Null       : Master 삭제 시 Chld 해당 필드 Null

- Set Default    : Master 삭제 시 Child 해당 필드 Default 값으로 설정

- Restric        : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용

- No Action      : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음


ㅇ Insert Action 

- Automatic     : Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력

- Set Null      : Master 테이블에 PK가 없는 경우 Child 외부키를 Null 값으로 처리

- Set Default   : Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력

- Dependent     : Master 테이블에 PK가 존재할 때만 Child 입력 허용

- No Action     : 참조무결성을 위반하는 입력 액션을 취하지 않음


ㅇ제약조건의 종류


ㅇ 테이블 생성 시 주의사항

- 테이블명은 객체를 의마할 수 있는 적절한 이름, 가능한 단수형

- 다른 테이블 이름과 중복 X

- 한 테이블 내에서 컬럼명 중복 X

- 테이블 이름을 지정하고 각 칼럼들은 "()"로 묶어 지정

- 각 칼럼들은 콤마(,)로 구분

- 테이블 생성 끝은 상상 세미콜론(;)으로 끝

- 테이블명, 칼럼명은 반드시 문자로 시작, 사전 정의 예약어는 사용 불가

- A-Z, a-z, 0-9, _, $, # 문자만 허용


ㅇ 외래키

- 테이블 생성시 설정 가능

- 외래키 값은 널 값을 가질 수 있음

- 한 테이블에 여러개 존재할 수 있음

- 외래키 값은 참조 무결성 제약을 받을 수 있음


ㅇ 테이블 삭제

 DROP

TRUNCATE 

DELETE 

 DDL

DDL

(일부 DML 성격)

DML 

Rollback 불가능 

Rollback 불가능 

Commit 이전 Rollback 가능 

Auto Commit 

 Auto Commit 

사용자 Commit  

 테이블이 사용했던 

Storage를 모두 Release

테이블이 사용했던 Storage 중

최초 테이블 생성시 할당된

Storage만 남기고 Release 

데이터를 모두 Delete해도

사용했던 Storage는

Release되지 않음 

테이블의 정의 자체를

완전히 삭제 

테이블을 최초 생성된

초기상태로 만듦 

데이터만 삭제 


ㅇ 트랜잭션의 특성

- 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점

* Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것

* Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 

                 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상

* Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데,
                 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현


롤백(Rollback)

- 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구

- 관련된 행에 대한 잠금(Locking)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있음

- BEGIN TRANSACTION 으로 트랜잭션을 시작하고 COMMIT 또는 ROLLBACK 으로 트랜잭션을 종료

  ROLLBACK 구문을 만나면 최초의 BEGIN 시점까지 모두 ROLLBACK 수행


ㅇ 저장점(SAVEPOINT)

- 저장점을 정의하면 ROLLBACK 할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 저장점까지 트랜잭션의 일부만 롤백 가능

1
2
3
4
5
6
7
8
9
10
# ORACLE
SAVEPOINT SVPT1
...
ROLLBACK TO SBPT1;
 
 
# SQL SERVER
SAVE TRANSACTION SVTR1;
...
ROLLBACK TRANSACTION SVTR1;
cs


ㅇ 함수

- 내장 함수

> 단일행 함

> 다중행 함수 : 집계 함수, 그룹 함수, 윈도우 함수

- 사용자 정의 함수



ㅇ DUAL 테이블 특성

- 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블

- SELECT ~ FROM ~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블

- DUMMY 라는 문자열 유형의 칼럼이 'X'라는 값이 들어 있는 행을 1건 포함


ㅇ GROUP BY 절과 HAVING 절의 특성

- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용

- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행

- GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없음

- 집계 함수는 WHERE 절에는 올 수 없음

- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거

- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있음

- GROUPBY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력

- HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치


ㅇ ORDER BY 절의 특징

- 기본적인 정렬 순서는 오름차순(asc)

- ORACLE에서는 NULL 값을 가장 큰 값으로 간주

- SQL SERVER에서는 NULL 값을 가장 작은 값으로 간주


ㅇ 문장 실행 순서

1. FROM - 발췌 대상 테이블을 참조

2. WHERE - 발췌 대상 데이터가 아닌 것은 제거

3. GROUP BY - 행들을 소그룹화

4. HAVING - 그룹핑된 값의 조건에 맞는 것만 출력

5. SELECT - 데이터 값을 출력/계산

6. ORDER BY - 데이터 정렬


ㅇ SELECT

- 급여가 높은 2명을 내림차순으로 출력하는데 같은 급여를 받는 사원이 있으면 같이 출력

1
2
3
SELECT TOP(2) WITH TIES 이름, 급여
FROM EMP
ORDER BY 급여 DESC;
cs


ㅇ JOIN

- 두 개 이상의 테이블들을 연결 도는 결합하여 데이터를 출력하는 것

- 일반적인 경우 행들은 PRIMARY KET 나 FOREIGN KEY 값의 연관에 의해 JOIN이 성립
- 하지만, 어떠한 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN 성립


ㅇ EQUAL JOIN

- EQUAL JOIN 문장

- WHERE 절에 JOIN 조건을

1
2
3
SELECT 테이블1.칼럼, 테이블2.칼럼...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼 = 테이블2.칼럼
cs

- ANSI/ISO SQL 표준

- ON 절에 JOIN 조건을

1
2
3
SELECT 테이블1.칼럼, 테이블2.칼럼...
FROM 테이블1 INNER JOIN 테이블2
ON 테이블1.칼럼 = 테이블2.칼럼
cs



제 2장. SQL 활용



ㅇ JOIN

- 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력

- 일반적으로 행들은 PKFK 값의 연관에 의해 JOIN이 성립

- 어떤 경우에는 PK, FK 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립가능

- 5가지 테이블을 JOIN 하기 위해서는 최소 4번의 JOIN 과정이 필요하다. (N-1)

 

ㅇ EQUI JOIN

- 2 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용, 대부분 PK, FK의 관계를 기반으로 한다.

 

ㅇ NON EQUI JOIN

- 2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용

- ‘=’ 연산자가 아닌 BETWEEN, >, <= 등 연산자 사용


ㅇ 일반 집합 연산자

1. UNION : 합집합(중복 행은 1개로 처리)

2. UNION ALL : 합집합(중복 행도 표시)

3. INTERSECT : 교집합(INTERSECTION)

4. EXCEPT,MINUS : 차집합(DIFFERENCE)

5. CROSS JOIN : 곱집합(PRODUCT)


ㅇ 순수 관계 연산자 : 관계형 DB를 새롭게 구현

1. SELECT -> WHERE

2. PROJECT -> SELECT

3. NATRUAL JOIN -> 다양한 JOIN

4. DIVIDE -> 사용x


ㅇ INNER JOIN

- JOIN 조건에서 동일한 값이 있는 행만 반환, USING이나 ON 절을 필수적으로 사용


ㅇ NATURAL JOIN

- 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행

- NATURAL JOIN이 명시되면 추가로 USING, ON, WHERE 절에서 JOIN 조건을 정의할 수 없다

- SQL Sever는 지원x

 

ㅇ USING 조건절

- 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다

- JOIN 칼럼에 대해서 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없다

- SQL Server 지원x


ㅇ ON 조건절

- ON 조건절과 WHERE 조건절을 분리하여 이해가 쉬우며, 칼럼명이 다르더라도 JOIN 조건을 사용할 수 있는 장점

- ALIAS나 테이블명 반드시 사용


ㅇ CROSS JOIN

- 양쪽 집합의 M*N건의 데이터 조합이 발생

 

ㅇ OUTER JOIN

- JOIN 조건에서 동일한 값이 없는 행도 반환 가능

- USING이나 ON 조건절 반드시 사용해야 함

 

ㅇ LEFT OUTER JOIN

- 조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 읽은 후,

  나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어 온다

- 우측 값에서 같은 값이 없는 경우 NULL 값으로 채운다.


ㅇ RIGHT OUTER JOIN

- LEFT OUTER JOIN의 반대

 

ㅇ FULL OUTER JOIN

- 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성

- 중복 데이터는 삭제


ㅇ 계층형 질의 : 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해 사용

- START WITH : 계층 구조 전개의 시작 위치 지정

- CONNECT BY : 다음에 전개될 자식 데이터 지정

- PRIOR : CONNECT BY 절에 사용되며, 현재 읽은 칼럼을 지정

   PRIOR 자식 = 부모 형태를 사용하면 계층구조에서 부모 데이터에서 자식 데이터(부모->자식) 방향으로

   전개하는 순방향 전개 (반대는 역방향 전개)

- NOCYCLE : 동일한 데이터가 전개되지 않음

- ORDER SIBLINGS BY : 형제 노드간의 정렬 수행

- WHERE : 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출한다.(필터링)

- LEVEL : 루트 데이터이면 1, 그 하위 데이터면 2, 리프 데이터까지 1씩 증가

- CONNECT_BY_ISLEAF : 해당 데이터가 리프 데이터면1, 그렇지 않으면 0

- CONNECT_BY_ISCYCLE : 해당 데이터가 조상이면 1, 아니면 0 (CYCLE 옵션 사용했을 시만 사용 가능)

- SYS_CONNECT_BY_PATH : 루트 데이터부터 현재 전개할 데이터까지의 경로를 표시

- CONNECT_BY_ROOT : 현재 전개할 데이터의 루트 데이터를 표시 (단항 연산자)


ㅇ 셀프 조인

- 동일 테이블 사이의 조인

- FROM 절에 동일 테이블이 2번 이상 나타난다

- 반드시 테이블 별칭을 사용해야 함

 

ㅇ 서브 쿼리 : 하나의 SQL문안에 포함되어 있는 또 다른 SQL, 알려지지 않은 기준을 이용한 검색에 사용

 

* 서브 쿼리 사용시 주의 사항

1. 서브쿼리를 괄호로 감싸서 사용한다.

2. 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다.
   단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고 복수 행 비교 연산자는 결과 건수와 상관없다.

3. 서브쿼리에서는 ORDER BY를 사용하지 못한다.

4. SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT-VALUES, UPDATE-SET 절에 사용 가능


* 단일 행 서브쿼리

- 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리

- 단일 행 비교 연산자와 함께 사용

- =, <, >, <=, >=, <>


* 다중 행 서브쿼리

- 서브쿼리의 실행 결과가 여러 건인 서브쿼리

- 다중 행 비교 연산자와 함께 사용

- IN, ALL, ANY, SOME, EXISTS


* 다중 칼럼 서브쿼리

- 서브쿼리의 실행 결과로 여러 칼럼을 반환

- 메인쿼리의 조건절에 여러 칼럼을 동시 비교

- 서브쿼리와 메인쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야 함


* 인라인 뷰

- 테이블 명이 올 수 있는 곳에 사용, ORDER BY 사용 가능

 

ㅇ 뷰 : 테이블은 실제로 데이터를 가지고 있는 반면, 뷰는 실제 데이터를 가지고 있지 않다.(가상 테이블)

 

* 뷰 사용 장점

1. 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용프로그램은 변경하지 않아도 된다.

2. 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다.

3. 보안성 : 직원의 급여정보와 같이 숨기고 싶은 정보가 존재할 때 사용

CREATE VIEW V_PLAYER_TEAM AS ~

DROP VIEW V_PLAYER_TEAM;


ㅇ ROLLUP

- Subtotal을 생성하기 위해 사용

- Grouping Columns의 수를 N이라고 했을 때 N+1 LevelSubtotal이 생성 (인수 순서에 주의)

1
2
3
4
SELECT DNAME, JOB, COUNT(*"Total Empl", SUM(SAL) "Total Sal" 
FROM EMP, DEPT 
WHERE DEPT.DEPTNO = EMP.DEPTNO 
GROUP BY ROLLUP (DNAME, JOB);
cs


* GROUPING : Subtotaltotal을 생성

* CUBE : 결합 가능한 모든 값에 대하여 다차원 집계를 생성. ROLLUP에 비해 시스템에 부하 심함

* GROUPING SETS : 인수들에 대한 개별 집계를 구할 수 있다 (다양한 소계 집합 생성 가능)

1
2
3
4
SELECT DECODE(GROUPING(DNAME), 1'All Departments', DNAME) AS DNAME, DECODE(GROUPING(JOB), 1'All Jobs', JOB) AS JOB, COUNT(*"Total Empl", SUM(SAL) "Total Sal" 
FROM EMP, DEPT 
WHERE DEPT.DEPTNO = EMP.DEPTNO 
GROUP BY GROUPING SETS (DNAME, JOB);
cs



ㅇ 윈도우 함수

- 행과 행간의 관계를 정의하거나 행과 행간을 비교, 연산하는 함수

- OVER 문구가 키워드로 필수 포함

- 기존에 사용하던 함수도 있고, 새롭게 WINDOW 함수용으로 추가된 함수도 있다

- ARGUMENTS (인수) : 함수에 따라 0 ~ N개의 인수가 지정될 수 있다.

 

* PARTITION BY : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있다.

ORDER BY : 어떤 항목에 대해 순위를 지정할 지 ORDER BY 절을 기술한다.

* WINDOWING

- 함수의 대상이 되는 행 기준의 범위를 강력하게 지정할 수 있다

- ROWS는 물리적인 결과 행의 수를, RANGE는 논리적인 값에 의한 범위를 나타내는데,

  둘 중의 하나를 선택해서 사용할 수 있다. 다만, WINDOWING 절은 SQL Server에서는 지원하지 않는다.


- RANK : 특정 항목에 대한 순위를 구하는 함수, 동일한 값에 대해서는 동일한 순위를 부여(1,2,2,4)

- DENSE_RANK : 동일한 순위를 하나의 등수로 간주(1,2,2,3)

- ROW_NUMBER : 동일한 값이라도 고유한 순위 부여


- SUM : 파티션별 윈도우의 합 구할 수 있다.

- MAX,MIN : 파티션별 윈도우의 최대, 최소 값을 구할 수 있다.

- AVG : 원하는 조건에 맞는 데이터에 대한 통계 값 

ex)같은 매니저 내에서 앞의 사번과 뒤의 사번의 평균

ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING

(현재 행을 기준으로 파티션 내에서 앞의 1, 현재행, 뒤의 1건을 범위로 지정)

- COUNT : 조건에 맞는 데이터에 대한 통계 값

- FIRST_VALUE : 파티션별 윈도우에서 가장 먼저 나온 값을 구한다.(SQL Server는 지원x)

- LAST_VALUE : 파티션별 윈도우에서 가장 나중에 나온 값을 구한다.(SQL Server 지원x)

- LAG : 파티션별 윈도우에서 이전 몇 번째 행의 값을 가져올 수 있다.(SQL Server 지원x)

- LEAD : 파티션별 윈도우에서 이후 몇 번째 행의 값을 가져올 수 있다.(SQL Server 지원x)

- RATIO_TO_REPORT : 파티션 내 전체 SUM값에 대한 행별 칼럼 값의 백분율을 소수점으로 구할 수 있다

  결과 값은 0보다 크고 1보다 작거나 같다.

- PERCENT_RANK : 파티션별 윈도우에서 제일 먼저 나오는 것을 0, 제일 늦게 나오는 것을 1로 하여

행의 순서별 백분율을 구한다. 0>=,<=1

- CUME_DIST : 현재 행보다 작거나 같은 건수에 대한 누적백분율을 구한다. >0, <=1

- NTILE : 파티션별 전체 건수를 인수 값으로 N등분한 결과를 구할 수 있다.

 


ㅇ DCL : 유저 생성하고 권한을 제어할 수 있는 명령어

 

* OracleSQL Server의 사용자 아키텍처 차이

ㄴ Oracle

- 유저를 통해 DB에 접속을 하는 형태

       - IDPW 방식으로 인스턴스에 접속을 하고 그에 해당하는 스키마에 오브젝트 생성 등의 권한을 부여받게 됨

ㄴ SQL Server

- 인스턴스에 접속하기 위해 로그인이라는 것을 생성하게 되며

  인스턴스 내에 존재하는 다수의 DB에 연결하여 작업하기 위해 유저를 생성한 후

  로그인과 유저를 매핑해 주어야 한다.

- Windows 인증 방식과 혼합 모드 방식이 존재함

 

* 시스템 권한 : 사용자가 SQL 문을 실행하기 위해 필요한 적절한 권한

- GRANT : 권한 부여

- REVOKE : 권한 취소

         ㄴ 모든 유저는 각각 자신이 생성한 테이블 외에 다른 유저의 테이블에 접근하려면

            해당 테이블에 대한 오브젝트 권한을 소유자로부터 부여받아야 한다.


ㅇ ROLE : 유저에게 알맞은 권한들을 한 번에 부여하기 위해 사용하는 것

1
2
CREATE ROLE LOGIN_TABLE;
GRANT CREATE TABLE TO LOGIN_TABLE;
cs


- CASCADE : 하위 오브젝트까지 삭제


ㅇ 절차형 SQL

- SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 저장 모듈을 생성할 수 있다.

- Procedure, User Defined Function, Trigger 등이 있음


ㅇ 저장 모듈

- PL/SQL 문장을 DB 서버에 저장하여 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램

- 독립적으로 실행되거나 다른 프로그램으로부터 실행될 수 있는 완전한 실행 프로그램

 

ㅇ PL/SQL 특징

1. Block 구조로 되어있어 각 기능별로 모듈화 가능

2. 변수, 상수 등을 선언하여 SQL 문장 간 값을 교환

3. IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다.

4. DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용할 수 있다.

5. PL/SQLOracle에 내장되어 있으므로 호환성

6. 응용 프로그램의 성능을 향상시킨다.

7. Block 단위로 처리 -> 통신량을 줄일 수 있다.

 

* DECLARE : BEGIN~END 절에서 사용될 변수와 인수에 대한 정의 및 데이터 타입 선언부

* BEGIN~END : 개발자가 처리하고자 하는 SQL문과 여러 가지 비교문, 제어문을 이용 필요한 로직 처리

* EXCEPTION : BEGIN~END 절에서 실행되는 SQL문이 실행될 때

   에러가 발생하면 그 에러를 어떻게 처리할지 정의하는 예외 처리부


ㅇ T-SQL : 근본적으로 SQL Server를 제어하는 언어

 

ㅇ Trigger : 특정한 테이블에 INSERT, UPDATE, DELETE와 같은 DML문이 수행되었을 때,

  DB에서 자동으로 동작하도록 작성된 프로그램, 사용자 호출이 아닌 DB 자동 수행

 

ㅇ 프로시저와 트리거의 차이점

- 프로시저는 BEGIN~END 절 내에 COMMIT, ROLLBACK과 같은 트랜잭션 종료 명령어 사용가능

- DB 트리거는 BEGIN~END 절 내에 사용 불가



제 3장. SQL 최적화 기본 원리




반응형
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday