5차시 데이터 조작과 트랜잭션, 데이터 무결성과 제약 조건

13. UPDATE 문은 테이블에 저장된 데이터를 수정하기 위한 DML입니다. WHERE 절을 생략하면 테이블에 있는 모든 행이 수정됩니다.

UPDATE table_name
SET column_name1 = value/, column_name2 = value2, •••
WHERE conditions;

WHERE 절로 특정 로우만 수정하기
01:update dept_copy
02:set dname=‘PROGRAMMING’
03:where dno=10;

부서명이 모두 수정되었음을 확인할 수 있습니다.
DNO    DNAME            LOC
10  PROGRAMMING    NEW YORK  //특정 로우만 수정
20  RESEARCH           DALLAS
30  SALES                 CHICAGO
40  OPERATIONS        BOSTON

14. 데이터 무결성 제약 조건(Data Integrity Constraint Rule)이란 테이블에 유효하지 않은 (부적절한) 데이터가 입력되는 것을 방지하기 위해서 테이블을 생성할 때 각 칼럼에 대해 정의하는 여러 가지 규칙을 말합니다. 이러한 제약 조건은 새로운 데이터가 삽입되거나 기존 데이터가 수정, 삭제 될 때에 적용됩니다.
테이블에 부적절한 데이터가 입력되지 않고 무결한 데이터만 유지할 수 있도록 하기 위해 오라클에서 지원되는 제약 조건은 5가지입니다.
NOT NULL - 칼럼에 NULL 값을 포함하지 못하도록 지정한다.
UNIQUE - 테이블의 모든 로우에 대해서 유일한 값을 갖도록 한다.
PRIMARY KEY - 테이블의 각 행을 식별하기 위한 것으로 NULL과 중복된 값을 모두 허용하지 않는다. 즉. NOT NULL 조건과 니NIQ니E 조건을 결합한 형태이다.
FOREIGN KEY - 참조되는 테이블에 칼럼 값이 항상 존재해야 한다.
CHECK - 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용한다.

제약 조건은 일반적으로 테이블이 생성될 때 생성되지만 그 후에도 ALTER TABLE로 제약 조건을 추가할 수 있으며 삭제도 가능합니다.

15. CHECK 제약 조건은 칼럼에서 허용 가능한 데이터의 범위나 조건을 정의합니다. 입력되는 값을 체크하여 설정된 값 이외의 값이 들어오면 오류 메시지와 함께 명령이 수행되지 못하게 하는 것입니다. 조건으로 데이터 값의 범위나 특정 패턴의 숫자나 문자 값을 설정할 수 있습니다. 데이터를 입력하거나 수정할 때 실수로 부정확한 값을 입력하는 것을 막을 수 있습니다. 칼럼에 정의할 수 있는 CHECK 제약 조건의 수에는 제한이 없기 때문에 하나의 칼럼에 여러 개의 CHECK 제약 조건을 정의할 수 있습니다. CURRVAL, NEXTVAL, ROWNUM과 같은 의사 칼럼이나 SYSDATE,USER와 같은 함수에는 사용 할 수 없습니다.

6차시 뷰, 시퀀스와 인덱스

16. FORCE 옵션은 기본 테이블의 존재 유무에 상관없이 뷰를 생성해야 할 경우에 사용하며 NOFORCE 옵션은 반드시 기존 테이블이 존재할 경우에만 뷰를 생성합니다. FORCE, NOFORCE 옵션 중 하나를 지정해야 하는데 특별한 설정이 없으면 NOFORCE 옵션이 지정된 것으로 간주합니다.

17. 시퀀스의 현재 값을 알아내기 위해서 CURRVAL를 사용하고,다음 값을 알아내기 위해서 는 NEXTVAL를 사용합니다. CURRVAL에 새로운 값이 할당되기 위해서는 NEXTVAL로 새로운 값을 생성해야 합니다. 즉, NEXTVAL로 새로운 값을 생성한 다음에 이 값을 CURRVAL에 대체하게 됩니다.
NEXTVAL, CURRVAL을 사용할 수 있는 경우와 사용할 수 없는 경우를 살펴봅니다.

• NEXTVAL, CURRVAL을 사용할 수 있는 경우
-서브 쿼리가 아닌 SELECT 문
-INSERT 문의 SELECT 절
-INSERT 문의 VALUE 절
-UPDATE 문의 SET 절

• NEXTVAL, CURRVAL을 사용할 수 없는 경우
-VIEW의 SELECT 절
-DISTINCT 키워드가 있는 SELECT 문
-GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 문
-SELECT, DELETE, UPDATE의 서브 쿼리
-CREATE TABLE, ALTER TABLE 명령의 DEFAULT 값

18. 인덱스의 종류는 유일한 값을 갖는지 여부에 따른 고유 인덱스(Unique Index)와 비 고유 인덱스(Non Unique Index), 인덱스를 구성하는 칼럼의 개수에 따라 단일 인덱스(Single Index)와 결합 인덱스(Composite Index), 함수에 인덱스를 지정하는 함수 기반 인덱스 (Function Based Index) 등이 있습니다.

(1) 고유/비 고유 인덱스
고유 인덱스는 기본 키나 유일 키처럼 유일한 값을 갖는 칼럼에 대해서 생성하는 인덱스를 말하며 비 고유 인덱스는 중복된 데이터를 갖는 칼럼에 대해서 생성하는 인덱스를 말합니다. 인덱스를 생성하면서 UNIQUE 옵션을 추가하면 고유 인덱스가 생성되며 UNIQUE 옵션을 생략하면 비 고유 인덱스가 생성됩니다.

(2) 결합 인덱스
지금까지 생성한 인덱스들처럼 한 개의 칼럼으로 구성한 인덱스는 단일 인덱스입니다. 두 개 이상의 칼럼으로 인덱스를 구성하는 것을 ‘결합 인덱스’라고 합니다.

(3) 함수 기반 인덱스
함수 기반 인덱스는 수식이나 함수를 적용하여 만든 인덱스를 말합니다.

7차시 사용자 권한과 PL/SQL

19. 롤(role)은 여러 사용자가 다양한 권한을 효과적으로 관리할 수 있도록 관련된 권한끼리 묶어 놓은 것입니다. 사용자를 생성한 후 사용하려면 여러 개의 권한들을 부여해야 하는데 롤은 사용자가 기본적으로 가져야 할 여러 종류의 권한을 일일이 부여하는 번거로움을 덜어 줍니다. 롤은 사용자에게 보다 간편하게 권한을 부여할 수 있도록 한다는 장점이 있습니다.
롤은 크게 사전 정의된 롤과 사용자가 정의한 롤로 구분됩니다. 사전 정의된 롤은 오라클 데이터베이스를 설치하면 기본적으로 제공되는 롤이고, 사용자가 정의한 롤은 사용자가 직접 롤을 정의하여 사용하는 것을 말합니다. 사전 정의된 롤의 종류는 다음과 같습니다.

DBA 롤은 시스템 자원을 무제한적으로 시용하며 시스템 관리에 필요한 모든 권한을 부여 할 수 있는 강력한 권한을 보유한 롤입니다. 그러므로 사용자들이 소유한 데이터베이스 객체를 관리하고 사용자들을 작성,변경,제거할 수 있는 모든 권한을 갖습니다.

CONNECT 롤은 사용자가 데이터베이스에 접속 가능하도록 가장 기본적인 시스템 권한 8가지를 그룹화한 것입니다.

RESOURCE 롤은 사용자가 객체(테이블,뷰, 인덱스)를 생성할 수 있도록 하기 위해서 시스템 권한을 그룹화한 것입니다.

20. LOOP 문
여러 번 반복적으로 수행되는 문장이 있을 경우 LOOP 문을 이용합니다. LOOP 문의 종류에는 BASIC LOOP, FOR LOOP, WHILE LOOP 3가지가 있습니다. BASIC LOOP 문은 조건 없이 반복 작업을 위해 시용합니다. FOR LOOP 문은 COUNTS 기본으로 한 반복 작업을 위해 사용합니다. WHILE LOOP 문은 조건을 비교하기 위한 반복 작업에 사용합니다. 반복문을 종료하기 위해서는 EXIT 문을 사용합니다.
BASIC LOOP는 가장 간단한 구조의 루프로 LOOP와 END LOOP 사이에 반복 수행할 문장을 기술합니다.

LOOP
  statenent1;
  statement2;
EXIT [WHERE condition];
END LOOP

실행 상의 흐름이 END LOOP에 도달하면 그와 짝을 이루는 LOOP 문으로 제어가 돌아 갑니다. 이러한 루프를 ‘무한 루프’라 하며,루프를 벗어나려면 EXIT 문을 시용합니다. 조건에 따라 LOOP를 종료하기 위해서는 WHEN 절을 기술합니다. WHEN 절 다음에 기술 한 조건이 참이면 EXIT 문이 수행되어 더 이상 반복하지 않고 END LOOP 다음으로 제어가 옮겨져서 LOOP를 종료합니다.

8차시 프로시저와 함수와 트리거, 데이터베이스 설계

21. SELECT 문의 수행 결과가 여러 개의 로우로 구해지는 경우에 모든 로우에 대해 처리를 하려면 커서를 사용해야 합니다. 커서는 CURSOR, OPEN, FETCH, CLOSE 4단계 명령에 의해서 사용됩니다.

DECLARE
             CURSOR cursor_name IS statement;
BEGIN
             OPEN cursor_name;
             FECTCH cur_name INTO variable_name;
             CLOSE cursor_name;
END;

22. 프로시저
PL/SQL 프로그램의 종류는 Procedure, Function, Trigger로 나뉩니다. 프로시저는 일련의 작업들을 하나로 묶어서 저장해 두었다가 호출하여 이런 작업들이 실행할 수 있게 해줍니다. 프로시저는 복잡한 SQL 문을 단순화시켜 준다는 장점이 있습니다. 또한 생성한 프로시저는 여러 번 반복하고 호출하여 사용할 수 있습니다. CREATE PROCEDURE 문으로 프로시저를 생성합니다.
CREATE [OR REPLACE] PROCEDURE procedure_name
   (argument1 [mode] data_taye,
   argument2 [mode] data_taye ...
   )
IS
local_variable declaration
BEGIN
statement1;
statements2;
END;/

23. 트리거(trigger)는 연쇄 반응 • 생리 현상 • 일련의 사건 등을 유발하는 자극과 같은 사전적인 의미를 갖습니다. 오라클에서의 트리거는 어떤 이벤트가 발생했을 때 내부적으로 실행되도록 데이터베이스에 저장된 프로시저를 말합니다.
트리거 역시 프로시저나 함수와 같이 선언부,실행부, 예외부를 갖는 PL/SQL 블록 구조를 가지고 있습니다. 함수나 프로시저는 사용자가 원할 때 EXECUTE 문으로 직접 호출하지만 트리거는 이를 호출하는 명령어가 따로 존재하지 않습니다. 트리거는 실행되어야 할 이벤트가 발생하게 되면 자동으로 실행되는 프로시저입니다. 이벤트는 DML 문인 INSERT, DELETE, UPDATE에 의해서 테이블에 어떤 변화가 발생하는 것을 말합니다.
DML 트리거의 종류는 크게 AFTER 트리 거와 BEFORE 트리거로 나뉩니다.

• AFTER 트리거
테이블에 INSERT, UPDATE, DELETE 등의 작업이 일어난 후에(After) 작동합니다. 테이블에만 작동하며 뷰에는 작동하지 않습니다.

• BEFORE 트리거
테이블이나 뷰에 이벤트가 작동하기 전에 작동합니다. 테이블뿐 아니라 뷰에도 작동이 되며, 주로 뷰가 업데이트 가능하도록 사용합니다. INSERT, UPDATE, DELETE 세 가지 이벤트로 작동합니다.

24. 관계 타입은 엔티티-관계 모텔에서 엔티티 사이의 연관성을 표현하는 개념으로 두 개의 엔티티 타입 사이의 업무적인 연관성을 논리적으로 표현한 것입니다. 이러한 관계를 정의할 때 동사구로 관계를 정의하며 엔티티 집합(타입)들 사이의 대응(correspondence), 즉, 사상(mapping)을 의미합니다.
관계는 관계차수와 선택성을 나타내는 엔티티 간의 였관성을 말합니다. 하나의 관계에 실제로 참여할 수 있는 인스턴스의 수를 카디날리티 (Cardinality : 관계의 대응 엔티티 수) 라고 하는데 하나의 엔티티에 대해 다른 엔티티가 몇 개 참여하는지에 따라 관계의 유형은 일대일(1:1), 일대다(1:N). 다대다(N:M)로 나뉩니다.


두 엔티티 간의 업부적인 연관성을 나타내는 관계는 엔티티 사이의 실선으로 나타냅니다

'oracle' 카테고리의 다른 글

oracle 1개월차 심화학습  (0) 2016.05.30
datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03

1차시 데이터베이스와 데이터 조회

1. 오라클에서 지원하는 데이터 타입의 종류

데이터 타입

의미

CHAR(size)

Size 크기의 고정 길이 문자 데이터 타입

최대크기: 2,000 바이트

최소크기: 1 바이트

VARCHAR2(size)

Size 크기의 가변 길이 문자 데이터 타입

최대크기: 4,000 바이트

최소크기: 1 바이트

NVARCHAR2(size)

국가별 문자 집합에 따른 size

크기의 문자 또는 바이트의 가변 길이 문자 데이터 타입

최대크기: 4,000 바이트

최소크기: 1 바이트

NUMBER(p,s)

정밀도(p)와 스케일(s)로 표현되는 숫자 데이터 타입

P : 1 ~ 38

S : -84 ~ 127

DATE

날짜 형식을 저장하기 위한 데이터 타입

ROWID

테이블 내 행의 고유 주소를 가지는 64진수 문자 타입

해당 6 바이트(제한된 ROWID) 또는 10 바이트(확장된 ROWID)

BLOB

대용량의 바이너리 데이터를 저장하기 위한 데이터 타입

최대크기: 4GB

CLOB

대용량의 텍스트 데이터를 저장하기 위한 데이터 타입

최대크기: 4GB

BFILE

대용량의 바이너리 데이터를 파일 형태로 저장하기 위한 데이터 타입

최대크기: 4GB

TIMESTAMP(n)

DATE 데이터 타입의 확장된 형태

n은 mile second 자리수로 최대 9자리까지 표현 가능

INTERVAL YEAR TO MONTH

년과 월을 이용하여 기간을 저장

INTERVAL DAY TO SECOND

일, 시, 분, 초를 이용하여 기간을 저장

두 날짜값의 정확한 차이를 표현하는데 유용

2. 오라클 데이터베이스를 설치하였으면 이를 사용하기 위해서 오라클에 접속을 시도해야 합니다. 데이터베이스 접속을 시도하면 오라클 데이터베이스를 사용할 수 있는 사용자인지를 검증하기 위해서 사용자 계정과 암호를 묻게 됩니다. 오라클을 설치하면 기본적으로 생성되는 계정이 있다고 하였습니다. 제공되는 계정은 시스템 권한을 가진 사용자인 DBA용 계정(SYS, SYSTEM)과 교육용 계정(HR) 두 가지로 나뉩니다.
데이터베이스 사용자는 오라클 계정(Account)이라는 용어와 같은 의미로 사용됩니다. 오라클을 설치하면 한 개 이상의 데이터베이스 권한을 갖는 디폴트(기본적인) 사용자가 존재합니다. 오라클에서 제공되는 사용자 계정은 다음과 같습니다.

SYS : 오라클 Super 사용자 계정이며 데이터베이스에서 발생하는 모든 문제들을 처리할 수 있는 권한을 가지고 있다.
SYSTEM : 오라클 데이터베이스를 유지보수 관리할 때 사용하는 사용자 계정이며, SYS 사용자와
차이점은 데이터베이스를 생성할 수 있는 권한이 없으면 불완전 복구를 할 수 없다.
HR : 처음 오라클을 사용하는 사용자의 실습을 위해 만들어 놓은 교육용 계정이다.

디폴트 사용자 중에서 SYS와 SYSTEM은 DBA 권한을 가진 사용자로서 다른 모든 시용 자에 대한 정보를 조회할 수 있습니다. DBA 권한을 가진 관리자는 사용자를 생성하거나 삭제,변경 등의 시스템 권한을 가지고 있습니다. DBA 관리자인 SYS 혹은 SYSTEM은 오라클을 처음 설치하자마자 디폴트로 생성되고 활성화 되어 있는 사용자 계정입니다.

3. IN 연산자
IN 연산자는 특정 칼럼의 값이 A, B, C 중에 하나라도 일치하면 참이 되는 연산자입니다.

column_name IN(A, B, C)

다음은 커미션이 300이거나 500이거나 1400인 사원을 검색하기 위해서 IN 연산자를 사용한 예입니다.

01:select * from employee
02: where commission in(300, 500, 1400);

EN0   ENAME     JOB        MANAGER HIREDATE  SALARY COMMISSION
7499  ALLEN  SALESMAN      7698       81/02/20      1600         300
7521  WARD   SALESMAN      7698       81/02/22      1250         500
7654  MARTIN SALESMAN     7698       81/09/28      1250         1400

2차시 SQL/PLUS와 다양한 함수

4. SQL*Plus 명령어를 SQL 문과 혼동하는 경우가 많은데, SQL 문은 데이터베이스에서 자료를 검색하고 수정하고 삭제하는 처리 등을 위한 데이터베이스 언어인 반면, SQL*Plus 명령어는 SQL 문을 실행시키고 그 결과를 볼 수 있도록 오라클에서 제공하는 툴입니다.

• SQL*PLUS : SQL 문을 대호(식으로 실행하기 위해서 사용자가 데이터베이스에 입력하고 SQL 문을 처리하여 그 결과를 받을 수 있도록 만든 툴입니다.
• SQL(Structured Query Language) : 테이블을 저장 단위로 생각하는 관계형 데이터베이스 (Relational DataBase: RDB)를 처리(저장, 수정. 삭제. 추출)하기 위해 미국표준협회(ANSI)에서 표준으로 채택한 언어입니다.

SQL*Plus 명령어의 실행은 한 줄을 기본으로 합니다. 그래서 문장의 끝을 알리는 종결문자가 필요 없습니다. 한 줄을 입력한 후에 [Enter] 키를 누르면 명령어 입력의 끝난 것으로 인식해서 실행됩니다. 만일 명령어가 길어져서 다음 줄까지 이어져야 하는 경우에는 연결문자인 ‘-’를 사용한 후에 엔터키를 눌러야만 이전 줄과 다음 줄이 이어집니다.
SQL 문은 종결문자인 세미콜론을 입력한 후 [Enter] 키를 눌려야만 실행합니다. 여러 줄에 명령어를 이어서 입력할 경우 따로 연결 문자가 필요 없습니다. [Enter] 키를 눌러도 명령어가 실행되지 않기 때문에 절 단위로 끊어서 여러 줄에 걸쳐서 명령어를 입력하다가 문장이 끝나는 시점에서 세미콜론을 입력합니다.
또한 SQL 문은 마지막 문장 한 개가 SQL 버퍼라 불리는 공간에 저장이 되지만 SQL*Plus 명령어는 버퍼에 저장이 되지 않는 차이가 있습니다.
SQL*Plus 명령어 중에서 자주 시용하는 명령어들은 다음과 같습니다.

명령어

기능

LIST

버퍼에 저장된 SQL 문의 편집 명령

RUN, @, /

SQL 문 또는 PL/SQL을 실행하는 명령

SAVE, GET, EDIT, SPOOL

스크립트 파일을 저장하는 명령

HOST, EXIT

데이터베이스 접속 및 종료

LINE, PAGE

검색 결과에 대한 보고서 형태의 출력 형식 설정

5. SPOOL
SPOOL 명령어는 SQL 문과 실행된 쿼리 결과를 파일로 기록하는 명령어로서 화면에 보이는 내용 전체를 갈무리해서 하나의 파일로 만듭니다.

SPOOL filename

SAVE 명령어가 SQL 문만을 저장하는데 비해 SPOOL 명령은 SQL 문의 실행 결과 화면이 갈무리되어 저장됩니다. SAVE 명령어의 기본 확장자는 .sql이지만 SPOOL 명령어의 기본 확장자는.LST 입니다.
SPOOL OFF는 SPOOL를 해제하기 위한 명령어입니다. SPOOL OFF 명령어는 화면 갈무리 작업을 중단하며 해제하기 전까지의 여러 SQL 문을 모두 저장합니다.

SPOOL OFF

SPOOL OFF를 하지 않고 오라클을 종료하게 되면 지금까지 갈무리한 내용이 저장되지 않고 사라지기 때문에 화면 갈무리 내용을 저장하기 위해서는 SPOOL OFF를 해주어야 합니다.

6. 문자 조작 함수의 종류
구분                                                           설명
CONCAT                                    문자의 값을 연결한다.
SUBSTR                              문자를 잘라 추출한다(한글 1Byte).
SUBSTRB                            문자를 잘라 추출한다{한글 2Byte).
INSTR                           특정 문자의 위치 값을 반환한다(한글 1Byte).
NSTRB                          특정 문자의 위치 값을 반환한다(한글 2Byte).
LPAD, RPAD       입력 받은 문자열과 기호를 정렬하여 특정 길이의 문자열로 반환한다.
TRIM                                     잘라내고 남은 문자를 표시한다.

3차시 그룹함수와 테이블 조인

7. 그룹함수
그룹함수는 테이블의 전체 데이터에서 통계적인 결과를 구하기 위해서 행 집합에 적용하여 하나의 결과를 생산합니다. 그룹함수는 하나 이상의 행을 그룹으로 묶어 연산하여 총합,평균 등 하나의 결과를 구합니다.
구분                                           설명
SUM                      그룹의 누적 합계를 반환합니다.
AVG                           그룹의 평균을 반환합니다.
COUNT                     그룹의 총 개수를 반환합니다.
MAX                          그룹의 최대값을 반환합니다.
MIN                           그룹의 최소값을 반환합니다.

8. NON-EQUI JOIN은 조인 조건에 특정 범위 내에 있는지를 조사하기 위해서 사용합니다. WHERE 절에 ‘<’,BETWEEN a AND b와 같이 조건이 아닌 연산자를 사용합니다.
사원 테이블과 급여 등급 테이블을 NON-EQUI JOIN하여 사원별로 급여 등급을 출력하는 예제를 작성해 보겠습니다.

우선 급여 등급 테이블(salgrade)을 살펴보면 다음과 같습니다.
01:select * from salgrade;

GRADE LOSAL   HISAL
    1        700       1200
    2        1201      1400
    3        1401      2000
    4        2001      3000
    5        3001      9999
급여 등급 테이블(salgrade)은 급여에 대한 등급을 총 5등급으로 나누어 놓았습니다. 1등급은 급여가 700부터 1200,2등급은 12이부터 1400,3등급은 14이부터 2000,4등급은 2001부터 3000,5등급이면 30이부터 9999 사이입니다.

다음은 등급(salgrade) 테이블의 급여 등급을 기준으로 사원의 급여가 몇 등급인지 살펴보는 예제입니다.
01 : select ename, salary, grade
02 : from employee, salgrade
03 : where salary between losal and hisal;

위의 WHERE 절의 ‘salary between losal and hisal’을 ‘where salary 〉= losal and salary <= hisal’와 같이 표현해도 동일한 결과를 얻을 수 있습니다.

다음은 3개의 테이블을 조인하는 방법을 학습합니다.
사원의 이름과 소속된 부서의 이름과 급여가 몇 등급인지를 출력하려고 합니다. 이를 위해서는 총 3개의 테이블 즉,사원 테이블과 부서 테이블과 급여 등급 테이블을 조인해야 합니다.

3개의 테이블 조인하기
01:select e.ename, d.dname, e.salary, s.grade
02:from employee e, department d, salgrade s
03:where e.dno = d.dno
04:and salary between losal and hisal;

ENAME          DNAME          SALARY         GRADE
KING          ACCOUNTING       5000                5
FORD          RESEARCH         3000                4
SCOTT        RESEARCH         3000                4
ALLEN            SALES            1600                3
MILLER       ACCOUNTING      1300                2
SMITH         RESEARCH          800                 1

9. SELF JOIN은 하나의 테이블에 있는 칼럼끼리 연결해야 하는 조인이 필요한 경우 사용합니다. SELF JOIN이란 말 그대로 자기 자신과 조인을 맺는 것을 말합니다. 조인 대상 테이블이 자신 하나라는 것 외에는 EQUI JOIN과 동일합니다.
사원 테이블에는 manager 칼럼이 존재하는데 이 칼럼에는 각 사원의 담당 매니저의 사원 번호가 저장되어 있습니다. ‘SCOTT’란 사원의 매니저 이름을 검색하려면 ‘SCOTT’의 매니저 사원번호가 필요하고 사원번호로 사원이름을 조회해야 합니다. 그런데 ‘SCOTTY 매니저 사원번호와 사원번호로 사원이름을 조회하려는 테이블이 동일한 테이블이기 때문에 테이블의 별칭을 사용하여 SELF JOIN을 해야 합니다.
WHERE 절을 사용한 SELF JOIN
01: select employees.ename as “사원이름”, manager.ename as “직속상관이름”
02: from employee employees, employee manager
03: where employees.manager = manager.eno;
4차시 서브 쿼리와 테이블 생성/수정/제거

10. 다중 행 서브 쿼리
IN - 메인 쿼리의 비교 조건(‘=’ 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라 도 일치하면 참입니다.
ANY, SOME - 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참입니다.
ALL - 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.
EXIST - 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참입니다.

11. 오라클에서는 DDL(데이터 정의어)을 제공합니다. DDL은 테이블의 구조 자체를 생성,수정, 제거하도록 하는 명령문 집합입니다. CREATE TABLE 문을 사용하여 데이터를 저장할 테이블을 생성합니다. 이 명령문 하나로 테이블에 대한 구조를 정의하고,데이터를 저장하기 위한 공간을 할당합니다.
테이블을 생성하기 위해서는 테이블명을 정의하고 테이블을 구성하는 칼럼의 데이터 타입과 무결성 제약 조건을 정의해야 합니다.

테이블명 및 칼럼명을 정의하기 위한 규칙은 다음과 같습니다.
(1) 문자(A-Z, a-z)로 시작해야 하며 30자 이내로 작성합니다.
(2) 문자(A-Z, a-z), 숫자(0-9), 특수문자 ($, #)만 사용 가능합니다.
(3) 대소문자 구별이 없습니다. 소문자로 저장하려면 작은따옴표로 묶어 주어야 합니다.
(4) 동일 사용자가 소유한 다른 객체의 이름과 중복되지 않아야 합니다.

테이블을 생성하기 위한 기본 형식은 다음과 같습니다.
CREATE TABLE [schema.] table
(column datatype [DEFAULT expression][column_constraint clause][•••]);

schema는 소유자의 이름으로,데이터베이스 사용자 계정과 같은 의미이고 table은 생성하고자 하는 테이블명이며 column은 테이블에 포함되는 칼럼명입니다. datatype은 칼럼에 대한 데이터 타입과 길이를 지정하고 DEFAULT expression은 데이터 입력시 값이 생략된 경우에 입력되는 기본 값입니다. column_constraint_clause은 칼럼에 대해 정의되는 무결성 제약 조건입니다.

12. TRUNCATE TABLE 문은 기존에 사용하던 테이블의 모든 로우를 제거합니다. 테이블의 구조는 그대로 유지하고,테이블의 데이터와 할당된 공간만 해제됩니다. 테이블에 생성된 제약 조건과 연관된 인덱스,뷰,동의어는 유지됩니다.
TRUNCATE TABLE table_name

테이블의 모든 데이터 제거하기
01 : truncate table dept_second;

'oracle' 카테고리의 다른 글

Oracle 2개월차 심화학습  (0) 2016.06.29
datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03

1. Oracle 9i까지 사용되는 exp, imp 유틸리티보다 향상된 Oracle 10g의 기능: 속도와 사용자 편의성

 

2. 환경설정

directory 객체를 통해 간접 접근이 가능

datapump사용을 위해 directory가 만들어져 있어야 하며 사용자에 접근권한 부여

 

SQL> DROP DIRECTORY dpump_dir2;  -- 기존 디렉토리 dpump_dir2 drop

SQL> create or replace directory datapump as ‘/dpdump/EXP_DIR’;

SQL> grant read,write on directory datapump to scott;

SQL> grant create any directory to scott;

 

SQL> SELECT * FROM dba_directories;   --디렉토리 Name,디렉토리 Path 알아보기

 

 

3. 콘솔에서 데이터 백업

expdp scott/tiger DIRECTORY=EXP_DIR DUMPFILE=scottdmp.dmp LOGFILE=scottdmp.log

 

4. impdp

impdp scott/tiger DIRECTORY=EXP_DIR DUMPFILE=scottdmp.dmp REMAP_SCHEMA=scott:newscott


REMAP_DATAFILE='C:\user01.dbf':'/usr/data/user01.dbf' (데이터 파일 변경)

REMAP_TABLESPACE='xxx':'yyy' (테이블스페이스 변경)

 

5. index rebuild 결과 실행

select 'alter index '||index_name||' rebuild tablespace SCOTT_INDEX;' from user_indexes
where tablespace_name='SCOTT_DATA';

 

파라미터 정리 및 참조

http://xfree302.tistory.com/159

http://kinosox.tistory.com/76

http://blog.naver.com/saimoo/100143104217

http://blog.naver.com/itisksc/30088616193

 

 

 

'oracle' 카테고리의 다른 글

Oracle 2개월차 심화학습  (0) 2016.06.29
oracle 1개월차 심화학습  (0) 2016.05.30
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03

그룹함수는 테이블 전체 데이터에서 통계적인 결과를 구하기 위해 행 집합에 적용하여 하나의 결과를 생산한다.

 

SUM : 그룹의 누적 합계를 반환합니다.

AVG : 그룹의 평균을 반환합니다.

COUNT : 그룹의 총 개수를 반환합니다.

MAX : 그룹의 최대값을 반환합니다.

MIN : 그룹의 최소값을 반환합니다.

 

MIN과 MAX같은 경우 모든 데이터 유형에 사용이 가능하다.

'oracle' 카테고리의 다른 글

oracle 1개월차 심화학습  (0) 2016.05.30
datadump expdp/impdp  (0) 2016.05.09
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03
DATA 정규화  (0) 2016.05.03

ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.

  • 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.

 

  • 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.

 

  • 고립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 자세한 내용은 관련 문서를 참조해야 한다.

 

  • 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.

 

참조:https://ko.wikipedia.org/wiki/ACID

'oracle' 카테고리의 다른 글

datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Natural Key & Surrogate Key  (0) 2016.05.03
DATA 정규화  (0) 2016.05.03
DDL/DML/DCL  (0) 2016.04.28

 

Primary Key : 테이블에서 레코드를 유일하게 식별하는데 가장 적합한 후보키

Natural Key : 테이블을 이루는 컬럼들 가운데 의미를 담고 있는 후보키

Surrogate Key : 테이블을 이루는 컬럼들 가운데 유일하게 식별하기에 적합한 단일 후보키가 존재하지 않을 때, 임의의 식별번호로 이루어진 후보키를 추가할 수 있다

 

INDEX  검색에서 핵심이 되는 값이 Primary Key가 될 수록 성능 향상

integer Index>>>문자열Index

자연키는 그 자체가 의미를 갖는 검색이 될 수 있지만, 대체키는 레코드의 기본키를 이용한 수정, 삭제, 외레키 참조에만 효율적이다.

대체키는 대체키를 생성하기 위한 트릭이 필요하다.

 

참조: http://bunhere.tistory.com/45

'oracle' 카테고리의 다른 글

datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
DATA 정규화  (0) 2016.05.03
DDL/DML/DCL  (0) 2016.04.28

관계형 데이터 베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업

데이터 일관성

 

1NF

- 행열의 순서에 영향을 받지 않으며 모든 항목에 값이 있으며 중복기능 열이 없어야 한다. NULL허용 x

 

2NF

-이행적 함수 종속이 있을 경우, 정적인 데이터에서 한 필드가 다른 필드를 정의할 수 있을 때 함수종속적인 필드를 분리

 

3NF:’정규화되었다’

-계산열 제거

주민등록번호=생일+나이+성별

 

 

BCNF

 

4NF

 

5NF

 

6NF

 

역정규화로 데이터 처리 성능을 향상시키려는 추세

 

 

참조:https://support.microsoft.com/ko-kr/kb/283878

'oracle' 카테고리의 다른 글

datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03
DDL/DML/DCL  (0) 2016.04.28

DDL (Data Define Language) 데이터 정의어

Create Alter Drop

DML (Data Manipulation Language) 데이터 조작어

Select Insert Delete Update

DCL (Data Control Language) 데이터 제어어

Commit Rollback Grant Revoke

'oracle' 카테고리의 다른 글

datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03
DATA 정규화  (0) 2016.05.03

+ Recent posts