티스토리 뷰
제 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(10) NOT NULL, col2 VARCHAR2(100) NOT 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(30) NOT NULL; | cs |
- Oracle
1 | ALTER TABLE EXAMPLE MODIFY COLUMN COL1 VARCHAR(30) NOT 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 (1, 3, 4); 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
- 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력
- 일반적으로 행들은 PK나 FK 값의 연관에 의해 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 Level의 Subtotal이 생성 (인수 순서에 주의)
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 : Subtotal의 total을 생성
* 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 : 유저 생성하고 권한을 제어할 수 있는 명령어
* Oracle과 SQL Server의 사용자 아키텍처 차이
ㄴ Oracle
- 유저를 통해 DB에 접속을 하는 형태
- ID와 PW 방식으로 인스턴스에 접속을 하고 그에 해당하는 스키마에 오브젝트 생성 등의 권한을 부여받게 됨
ㄴ 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/SQL은 Oracle에 내장되어 있으므로 호환성 굳
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 최적화 기본 원리
'SQL > Organize' 카테고리의 다른 글
[SQLD] 과목 1. 데이터 모델링의 이해 정리 (2) | 2020.08.15 |
---|---|
[SQL] 데이터 조작을 위한 주요 함수 정리 (0) | 2019.01.15 |