Data Definition Language
데이터베이스 객체를 관리
Data Manipulation Language
데이터를 조작하는 언어
데이터베이스에 존재하는 논리적인 저장 구조
데이터를 담고 있는 객체
행과 열로 구성되어 있다.
데이터 타입
제약조건
하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있다.
테이블, 뷰 참조하여 새로운 뷰 생성 가능
실제로 만들어진 테이블은 아니지만 테이블처럼 사용가능하다.
데이터 보안 측면에서 유리
여러가지 인덱스 종류가 있지만 B-tree 인덱스가 가장 일반적이다
특정 컬럼들을 기준으로 정렬해 해당 컬럼으로 조회하는 기능의 성능을 높이려는 목적
하지만 데이터 동기화로 인해 오히려 너무 많이 만들면 오히려 과부화로 성능이 낮아질 수 있다.
동의어, 별명 같은 기능
사용하는 이유
자동 순번을 반환하는 데이터베이스 객체
논리적으로 1개 테이블이지만 물리적으로 분할한 만큼 파티션이 만들어저 컬럽 값에 따라 데이터가 분리되서 저장된다.
대용량 데이터테이블 조회 시 효율성과 성능을 높여준다.
SELECT
INSERT
UPDATE
MERGE
조건을 비교해 조건에 맞는 데이터가 없으면 → INSERT / 있으면 → UPDATE
DELETE
COMMIT
변경한 데이터를 반영하는 역할
ROLLBACK
반영한 데이터를 이전 상태롤 되돌리는 역할
TRUNCATE
DELETE의 역할과 동일하지만 COMMIT을 하지않아도 반영이 되고 ROLLBACK X
의사컬럼
테이블의 컬럼처럼 동작하지만 실제로 테이블레 저장 X
연산자
표현식
1개 이상의 값과 연산자, SQL 함수로 결합된 식
조건식
(1) 내부 조인
WHERE
사용IN
, EXIST
사용하여 서브쿼리 이용NOT IN
, NOT EXIST
(2) 외부 조인
조인 조건 모두에 (+)를 붙여야한다.
(3) 카타시안 조인
WHERE X
(1) ANSI 내부 조인
INNER JOIN + ON / USING + 테이블명.컬럼명 / 컬럼명
(2) ANSI 외부 조인
LEFT/RIGHT [OUTER] JOIN + ON
(3) CROSS 조인
= 카타시안 조인
(4) FULL OUTER 조인
서브쿼리
SQL 문장안에서 보조로 사용되는 SELECT문
메인 쿼리를 제외한 나머지 모든 SELECT 문
조건식에 주로 사용된다.
인라인 뷰
FROM 절에 사용된느 서브 쿼리를 인라인 뷰라고 한다.
테이블에 저장된 데이터를 계층형 구조로 반환하는 쿼리를 계층형 쿼리라고 한다.
START WITH
CONNECT BY
ORDERY BY
CONNECT_BY_ROOT
CONNECT_BY_ISLEAF
SYS_CONNECT_BY_PATH
CONNECT_BY_ISCYCLE
WITH 별칭1 AS (SELECT 문).
별칭2 AS (SELECT 문)
…
SELECT
FROM 별칭1, 별칭 2
별칭으로 사용하는 SELECT문에서도 별칭 참조가 가능하다
WITH절을 활용해서 계층형 쿼리를 만들 수 있다.
조회의 출력 순서를 자식 혹은 형제 로우를 기준으로 출력할 지 정할 수 있다.
DEPTH FIRSTY BY
BREADTH FIRST BY
테이블의 로우에 대해 특정 그룹별로 집계 값을 산출할 때 사용한다.
ROW_NUMBER()
RANK()
, DENSE_RANK()
CUME_DIST
, PERCENT_RANK()
NTILE
LAG
LEAD
파티션으로 분할된 그룹에 대해 범위를 정해 다시 부분 집합을 만든다.
{ ROWS | RANGE }
{ BETWEEN { UNBOUNDED PRECENDING
| CURRENT ROW
| value_expr{ PRECEDING | FOLLOWING}
}
AND { UNBOUNDED FOLLOWING
| CURRENT ROW
| value_expr{ PRECEDING | FOLLOWING }
}
| { UNBOUNDED PRECEDING
| CURRENT ROW
| value_expr PRECEDING}
}
함수와 함께 사용될 수 있다.
FIRST_VALUE()
, LAST_VALUE()
NTH_VALUE()
INSERT ALL | FIRST
WHEN 조건 1 then
INTO [스키마. ]테이블명(컬럼1, 컬럼2 .. ) VALUES(값1, 값2, ..)
..
ELSE
INTO INTO [스키마. ]테이블명(컬럼1, 컬럼2 .. ) VALUES(값1, 값2, ..)
SELECT 문;
블록
프로그램 소스의 기본 단위
구조
이름부
IS(AS)
선언부
BEGIN
실행부
EXCEPTION
예외 처리부
END;
변수 선언
변수명 데이터 타입 := 초깃값;
상수 선언
상수명 **CONSTANT** 데이터 타입 := 상수값:
연산자
주석
DML문
SELECT문에서 INTO절을 사용해서 변수에 할당해준다.
%TYPE
변수의 데이터 타입을 컬럼 타입으로 가져온다.
함수생성
CREATE OR REPLACE FUNCTION 함수이름 (매개변수1, 매개변수2, ...)
RETURN 데이터타입;
IS[AS]
변수, 상수 선언
BEGIN
실행부
...
RETURN 반환값;
[EXCEPTION
예외 처리부]
END [함수 이름];
함수와 달리 특정한 로직만 처리하고 반환값 X
CREATE OR REPLACE PROCEDURE 프로시저 이름
(매개변수1[IN |OUT|IN OUT ] 데이터타입[:= 디폴트값],
매개변수1[IN |OUT|IN OUT ] 데이터타입[:= 디폴트값] ,
...
)
IS[AS]
변수, 상수 선언
BEGIN
실행부
...
[EXCEPTION
예외 처리부]
END [함수 이름];
익명블록에서 함수, 프로시저, 패키지를 호출할때는 EXEC, EXECUTE를 붙이지 않는다.
EXCEPTION WHEN 예외명1 THEN 예외처리 구문1
WHEN 예외명2 THEN 예외처리 구문2
...
WHEN OTHERS THEN 예외처리 구문n;
예외정보 참조
사용자 정의 예외
COMMIT
COMMIT [WORK];
테이블에 최종적으로 반영한다.
ROLLBACK
ROLLBACK [WORK] [TO [SAVEPOINT] 세이브포인트명];
변경사항 취소
SAVEPOINT
SAVEPOINT 세이브포인트명;
해당 savepoint 이전까지는 commit 된다.
SQL문장을 처리한 결과값의 위치를 가리키는 일종의 포인터 역할을 한다.
명시적커서의 사용단계
커서 정의
CURSOR 커서명 [(매개변수1, 매개변수2, ...)]
IS
SELECT 문장;
커서 열기
OPEN 커서명 [(매개변수1, 매개변수2, ...)]
패치
LOOP 사용
LOOP
FETCH 커서명 INTO 변수1, 변수2, ...;
EXIT HEN 커서명%NOTFOUND;
END LOOP;
FOR문 사용
FOR 레코드 IN 커서명(매개변수1, 매개변수2, ...)
LOOP
처리문;
END LOOP;
커서 닫기
CLOSE 커서명;
커서 변수
여러 쿼리에 재사용할 수 있는 커서 변수가 있다.
커서 변수 선언
TYPE 커서 타입명 IS REF CURSOR { RETURN 반환 타입};
커서_변수명 커서_타입명;
커서_변수명 REFCURSOR;
TYPE 커서_변수명 IS REF CURSOR;
커서_변수명 SYS_REFCURSOR;
커서 변수 사용하기
OPEN 커서 변수명 FOR select 문;
FETCH 커서 변수명 INTO 변수1, 변수2, …;
FETCH 커서 변수명 INTO 레코드명;
커서 표현식
컬럼 형태로 커서를 사용하는 것
CURSOR (서브 쿼리)
여러 개의 값을 가지고 각각 타입이 다른 복합형 구조이다.
테이블의 로우와 비슷한 형태이다.
테이블의 컬럼을 레코드에서는 필드라고 부른다.
사용자 정의형 레코드
TYPE 레코드명 IS RECORD (
필드명1 필드1 타입 [[NOT NULL := 디폴트값],
필드명2 필드2 타입 [[NOT NULL := 디폴트값],
...
);
레코드변수명 레코드명;
테이블형 레코드
테이블의 모든 컬럼을 필드로 가지는 레코드
레코드 변수명 테이블명.%ROWTYPE;
커서형 레코드
커서를 레코드 변수로 받는 것
레코드 변수명 커서명%ROWTYPE;
같은 타입의 필드들이 나란히 연결되어 있는 로우가 여러개 모인 형태이다.
컬렉션의 종류
TYPE 연관_배열명 IS TABLE OF 연관_배열_값타입 INDEX BY 인덱스타입;
TYPE VARRY명 IS VARRAY(최대크기) OF 요소값 타입;
TYPE 중첩_테이블명 IS TABLE OF 값타입;
컬렉션을 선언하면 해당 블록의 실행이 완료되면 사라진다.
이때 해당 컬렉션을 다른 블록에서도 재사용하기위해 사용자 정의 데이터 타입을 사용하면 된다.
사용자 정의 타입으로 사용할 수 있는 타입
논리적 연관성이 있는 항목들을 묶어둔 객체
패키지명.변수명/상수명
패키지명.서브프로그램명
다른 프로그램에서도 변수, 서브 프로그램을 호출해서 사용할 수 있다.
참고도서
- 오라클 SQL과 PL/SQL을 다루는 기술
이런 유용한 정보를 나눠주셔서 감사합니다.