#1.SQL초보에서 Schema...

12
SQL초보에서 Schema Objects까지 1. 개요 및 실습데이터 설치 1-1. 오라클, 데이터베이스관련 용어 오라클(ORACLE)이란? 미국의 소프트웨어 회사명칭이면서 이 회사에서 만든 데이터 베이스 관리 시스템, Oracle은 Database 에서 가장 많이 쓰이며, 기능 또한 가장 좋은 것으로 알려진 최고의 Database 이며 현 재 유닉스 환경에서 가장 널리 사용되는 RDBMS이다. 검색이나 업데이트용 언어로는 국제표준화 기구의 표준 구조화 조회 언어와 PL/SQL을 지원한다. 데이터베이스(DataBase)란? 의미 있는 데이터 모임, 한 조직의 여러 응용 시스템들이 공유할 수 있도록 통합 저장된 운영 data의 집합을 지칭한다. 데이터베이스는 사용자의 요구에 대해 실시간으로 응답해야 하며 데이 터의 삽입, 삭제, 갱신작업이 수시로 일어나며 동시에 여러 사용자가 데이터베이스에 접근이 가능 하고 원하는 데이터를 실제 데이터의 주소가 아닌 데이터 값에 의해 참조 할 수 있다. 데이터베이스관리시스템(DBMS)이란? 이러한 데이터베이스와 이를 효율적으로 관리하기 위한 소프트웨어의 집합체를 이야기 한다. 데이터베이스와 대화하기 위한 언어 종류 데이터 정의어(Data Definition Language, DDL) : 데이터베이스의 논리적 물리적 구조를 정의 (CREATE, DROP, ALTER) 데이터 조작어(Data Manipulation Language, DML) : 데이터를 조작하기 위한 기능 (SELECT, INSERT, UPDATE, DELETE, MERGE) 데이터 제어어(Data Control Language, DCL) : 객체들을 사용하도록 권한을 주고 회수하는 기능 (GRANT, REVOKE) 세션 제어어(Session Control Language, SCL) : 사용자 세션환경을 제어하는 명령어 (ALTER SESSION SET…) 트랜잭션 제어어(Transaction Control Language, TCL) : DML에 의해 변화되는 데이터 관리를 위한 기능 (COMMIT, ROLLBACK) SQL이란?

Transcript of #1.SQL초보에서 Schema...

Page 1: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

SQL초보에서 Schema Objects까지

1. 개요 및 실습데이터 설치

1-1. 오라클, 데이터베이스관련 용어

오라클(ORACLE)이란?

미국의 소프트웨어 회사명칭이면서 이 회사에서 만든 데이터 베이스 관리 시스템, Oracle은

Database 에서 가장 많이 쓰이며, 기능 또한 가장 좋은 것으로 알려진 최고의 Database 이며 현

재 유닉스 환경에서 가장 널리 사용되는 RDBMS이다. 검색이나 업데이트용 언어로는 국제표준화

기구의 표준 구조화 조회 언어와 PL/SQL을 지원한다.

데이터베이스(DataBase)란?

의미 있는 데이터 모임, 한 조직의 여러 응용 시스템들이 공유할 수 있도록 통합 저장된 운영

data의 집합을 지칭한다. 데이터베이스는 사용자의 요구에 대해 실시간으로 응답해야 하며 데이

터의 삽입, 삭제, 갱신작업이 수시로 일어나며 동시에 여러 사용자가 데이터베이스에 접근이 가능

하고 원하는 데이터를 실제 데이터의 주소가 아닌 데이터 값에 의해 참조 할 수 있다.

데이터베이스관리시스템(DBMS)이란?

이러한 데이터베이스와 이를 효율적으로 관리하기 위한 소프트웨어의 집합체를 이야기 한다.

데이터베이스와 대화하기 위한 언어 종류

데이터 정의어(Data Definition Language, DDL) : 데이터베이스의 논리적 물리적 구조를 정의

(CREATE, DROP, ALTER)

데이터 조작어(Data Manipulation Language, DML) : 데이터를 조작하기 위한 기능

(SELECT, INSERT, UPDATE, DELETE, MERGE)

데이터 제어어(Data Control Language, DCL) : 객체들을 사용하도록 권한을 주고 회수하는 기능

(GRANT, REVOKE)

세션 제어어(Session Control Language, SCL) : 사용자 세션환경을 제어하는 명령어

(ALTER SESSION SET…)

트랜잭션 제어어(Transaction Control Language, TCL) : DML에 의해 변화되는 데이터 관리를 위한

기능

(COMMIT, ROLLBACK)

SQL이란?

Page 2: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

Structured Query Language의 약어로 구조화 질의어, 관계형 데이터베이스 관리 시스템(RDBMS)의

데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어. 관계형 데이터베이스 관리 시스템

에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리

를 위해 고안되었다. SQL은 데이터베이스로부터 정보를 얻거나 갱신하기 위한 표준 대화식 프로

그래밍 언어이다. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다. (위

키백과)

1-2. 오라클 에디션(ORACLE EDITION)

엔터프라이즈 에디션(Enterprise Edition) : 기업에서 가장 많이 사용하는 에디션. 스탠다드 에디션

보다 더 많은 기능을 지원하며(예를 들면 Bitmap인덱스, Mview를 만드는 기능은 스탠다드 에디션

에서는 되지 않는다) 오라클을 설치하는 서버의 CPU가 4개 초과인 경우 엔터프라이즈 에디션을

설치해야 하며 RAC 사용 가능하다.

스탠다드 에디션(Standard Edition) : 기본적인 데이터베이스의 기능을 가지며 CPU개수가 4개 이하

인 경우 사용하며 Oracle9i 부터 제공되는 RAC(Real Application Cluster) 기능은 사용할 수 없다.

스탠다드 에디션 원(Standard Edition one) : 10g 버전에서 등장한 에디션으로 스탠다드 에디션 보

다 기능제한이 많으며 CPU개수가 2개 이하인 경우 설치가 가능하다. 1CPU당 5 Named User (동시

접속권한)가 기본 구매수량입니다.(2CPU일 경우 기본 10 Named User 구매)

익스프레스 에디션(Express Edition) : 운영체제가 윈도우나 리눅스일 경우 Oracle을 배포할 목적으

로 사용됨. 상용으로 사용가능하나 한 개의 CPU, 1G 메모리, 데이터 저장량 최대 4G로 제한되어

있다.

퍼스널 에디션(Personal Edition) : 개인용 에디션으로 RAC를 제외한 대부분의 기능 제공하며 CPU

개수와 상관없이 사용할 수 있지만 오직 한 명의 사용자만 사용가능하며 윈도우XP, 2000, NT,

2003Server에서 사용가능.

오라클 데이터베이스 라이트 : 모바일 용

1-3. 오라클 버전 변화

oracle 7.X ->oracle8i->oracle9i->oracle10g ->oracle11g -> oracle12c(2014년7월)

8i, 9i에서 i의 의미 : 인터넷(Internet)을 의미

Page 3: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

10g, 11g에서 g의 의미 : grid computing을 의미하며 분산네트워크를 통한 자원통합을 목표로 하

고 있음을 의미. 그리드 컴퓨팅이란 분산네트워크를 통해 서버에서 처리해야 하는 부하를 분산시

켜 사용자에게 원하는 데이터를 빠른 속도로 전달할 수 있다. 오라클 옵티마이저가 CBO가 기본

이 되고 많은 자동관리 기능이 들어감.

12c에서 c의 의미 : oracle12c의 c는 Clouding Computing. 12c에 500개 이상의 신기능 추가. 고가

의 Storage를 도입하지 않더라도 ASM에서 가상화 지원. 즉 DB레벨을 가상화해서 하드웨어를 효

율적으로 공유 가능하도록 지원함.

1-4. 실습데이터 설치 및 SQL*PLUS 실행환경 설정

Oracle11g 설치 후 우리가 사용할 SCOTT 계정은 계정에 락이 걸려있고 비밀번호가 만료 되어 있

으므로 아래 SQL을 실행하자.

C:>SQLPLUS / AS SYSDBA

SQL>ALTER USER SCOTT ACCOUNT UNLOCK;

SQL>ALTER USER SCOTT IDENTIFIED BY TIGER;

아래 URL에서 실습데이터 설치

http://ojc.asia/bbs/board.php?bo_table=LecOrccleTun&wr_id=77

SQL*PLUS에서 실습을 원할히 하기 위해 아래 명령을 실행하고 SQL*PLUS 접속시 마다 ONJ.SQL

파일을 실행하자.

SQL> EDIT ONJ

SET LINESIZE 130

SET TIMING ON

SET AUTOTRACE ON

SET PAGESIZE 100

SQL> @ONJ

SQL*Plus에서 한글이 깨진다면 아래처럼 NLS_LANG 환경변수를 설정하자.

(컴퓨터 속성 고급 환경변수)

AMERICAN_AMERICA.KO16KSC5601

Page 4: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

쿼리를 익히기 위해서는 데이터 건수가 별로 없는 EMP, DEPT 테이블을 이용하여 쿼리를 실습

할 것이며 성능이나 수행시간, 통계정보등 분석을 위한 쿼리는 MYEMP1, MYDEPT1 위주로 실습

이 진행될 것이다.

1-4. 실습데이터 구조(테이블 정의서)

테이블 정의서란? 데이터베이스 설계시 테이블의 구조와 칼럼의 특성을 알기 쉽게 요약한 내용이

며 테이블의 칼럼 이름, 데이터 타입, 키 종류, NULL이나 중복 값의 허용 여부, 외래 키 그리고 칼

럼에 대한 기타 설명으로 구성되어 있다.

- MYEMP1(사원 테이블) 10,000,002건

칼럼이름 데이터 타입 Key

Type

NN/

Unique FK table

FK

column 설명

EMPNO NUMBER PK NN,U 사번

ENAME VARCHAR2(100) NN 이름

DEPTNO VARCHAR2(1) FK MYDEPT1 DEPTNO 부서코드

ADDR VARCHAR2(100) 주소

SAL NUMBER(7) 급여

JOB VARCHAR2(20) 직무

COMM NUMBER(7) 수당

SUNGBYUL VARCHAR2(1) 성별

(M : 남, F : 여)

HIREDATE DATE 입사일자

OUTDATE VARCHAR2(8) 퇴사일자

MGR NUMBER FK MYEMP1 EMPNO 관리자사번

Page 5: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

SQL> SELECT COUNT(*) FROM MYEMP1;

COUNT(*)

---------

10000002

SQL> SET LINESIZE 130

SQL> COLUMN ADDR FORMAT A10

SQL> COLUMN ENAME FORMAT A10

SQL> COLUMN JOB FORMAT A10

SQL> COLUMN DEPTNO FORMAT A4

SQL> SELECT EMPNO, ENAME,DEPTNO, ADDR, SAL, JOB, COMM, SUNGBYUL,HIREDATE, OUTDATE

FROM MYEMP1

WHERE ROWNUM < 5;

EMPNO ENAME DEPT ADDR SAL JOB COMM S HIREDATE

OUTDATE

--------------------------------------------------------------------------------------------------------------------------

--

541 홍길동541 1 서울541 541 CLERK M 13/11/06

15/05/01

542 다길동542 2 부산542 542 SALESMAN F 13/11/05

543 나길동543 3 대구543 543 MANAGER M 13/11/04

544 마길동544 0 광주544 544 ANALYST F 13/11/03

- MYEMP1_OLD(퇴사자 테이블) 1,666,667건

(사원테이블 데이터 중 퇴사자만 별도로 저장, 이름이 ‘홍길동’으로 시작하는 사원이 퇴사자임)

칼럼이름 데이터 타입 Key

Type

NN/

Unique FK table

FK

column 설명

EMPNO NUMBER PK, FK NN,U 사번

ENAME VARCHAR2(100) NN 이름

SQL> SELECT COUNT(*) FROM MYEMP1_OLD;

COUNT(*)

Page 6: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

----------

1666667

SQL> select empno, ename

from myemp1_old

where rownum < 5;

EMPNO ENAME

---------- ----------

8521 홍길동8521

8527 홍길동8527

8533 홍길동8533

8539 홍길동8539

- MYDEPT1(부서테이블) 7건

칼럼이름 데이터 타입 Key

Type

NN/

Unique FK table

FK

column 설명

DEPTNO VARCHAR2(1) PK NN,U 부서코드

DNAME VARCHAR2(100) 부서명

UP_DEPTNO VARCHAR2(1) FK MYDEPT1 DEPTNO 상위

부서코드

SQL> COLUMN DNAME FORMAT A20

SQL> SELECT * FROM MYUDEPT1;

D DNAME UP_DEPT

- ---------------------------- --------

0 개발1팀 4

1 개발2팀 4

2 기획1팀 5

3 기획2팀 5

4 개발본부 6

5 교육본부 6

6 오라클자바커뮤니티

7 개의 행이 선택되었습니다.

Page 7: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

- MYLECTURE1(강좌 테이블) 7건

칼럼이름 데이터 타입 Key

Type

NN/

Unique

FK

table

FK

column 설명

LECTURE_ID NUMBER(2) PK 강좌코드

LECTURE_NM VARCHAR2(100) 강좌명

TEACHER VARCHAR2(20) 강사

ROOM VARCHAR2(1) 강의장

SQL> COLUMN LECTURE_NM FORMAT A30

SQL> SELECT * FROM MYLECTURE1;

LECTURE_ID LECTURE_NM TEACHER ROOM

---------------------------------------------------------------------------------------

1 스프링개발자과정 이종철 A

2 SQL기초실무과정 김종철 B

3 ORACLE HINT과정 안종철 C

4 닷넷개발자과정 박종철 D

5 웹퍼블리실개발자과정 최종철 E

6 자바기초에서스프링까지과정 김종철 F

7 안드로이드과정 이종철 G

7 개의 행이 선택되었습니다.

- MYSUGANG1(수강 테이블) 6,500,000건

칼럼이름 데이터 타입 Key

Type

NN/

Unique FK table

FK

column 설명

EMPNO NUMBER PK, FK MYEMP1 EMPNO 사번

Page 8: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

LECTURE_ID NUMBER(2) PK, FK LECTURE LECTURE_ID 강좌코드

SEQ NUMBER(2) PK 순번

START_DATE DATE 시작일

END_DATE DATE 종료일

SQL> SELECT COUNT(*) FROM MYSUGANG1;

COUNT(*)

----------

6500000

SQL> SELECT * FROM MYSUGANG1 WHERE ROWNUM < 5;

EMPNO LECTURE_ID SEQ START_DATE END_DATE

---------------------------------------------------------------

940 1 1 15/05/01 15/05/31

941 1 1 15/05/01 15/05/31

942 1 1 15/05/01 15/05/31

943 1 1 15/05/01 15/05/31

- MYSALGRADE1(급여등급 테이블) 6건

칼럼이름 데이터 타입 Key

Type

NN/

Unique

FK

table

FK

column 설명

GRADE NUMBER(1) 급여등급

LOSAL NUMBER(8) 하한값

HISAL NUMBER(8) 상한값

SQL> SELECT * FROM MYSALGRADE1;

Page 9: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

GRADE LOSAL HISAL

--------------------------------------

1 0 1000000

2 1000001 2000000

3 2000001 3000000

4 3000001 4000000

5 4000001 5000000

6 5000001 6000000

6 개의 행이 선택되었습니다.

다음 3개의 테이블은 오라클을 설치하면 기본적으로 생성되는 scott 계정에 있는 EMP, DEPT,

SALGRADE 테이블로 기본 쿼리를 익히는데 사용되는 건수가 적은 테이블 이다.

- EMP(사원 테이블) 14건

칼럼이름 데이터 타입 Key

Type

NN/

Unique FK table

FK

column 설명

EMPNO NUMBER(4) PK NN,U 사번

ENAME VARCHAR2(10) 이름

JOB VARCHAR2(9) 직무

MGR NUMBER(4) FK EMP EMPNO 관리자사번

HIREDATE DATE 입사일자

SAL NUMBER(7,2) 급여

COMM NUMBER(7,2) 수당

DEPTNO NUMBER(2) FK DEPT DEPTNO 부서번호

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM

D E P T N O

Page 10: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

---------- ---------- --------- ---------- -------- ---------- ---------- --------- -

7369 SMITH CLERK 7902 80/12/17 800 20

7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30

7521 WARD SALESMAN 7698 81/02/22 1250 500 30

7566 JONES MANAGER 7839 81/04/02 2975 20

7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30

7698 BLAKE MANAGER 7839 81/05/01 2850 30

7782 CLARK MANAGER 7839 81/06/09 2450 10

7788 SCOTT ANALYST 7566 87/07/13 3000 20

7839 KING PRESIDENT 81/11/17 5000 10

7844 TURNER SALESMAN 7698 81/09/08 1500 0 30

7876 ADAMS CLERK 7788 87/07/13 1100 20

7900 JAMES CLERK 7698 81/12/03 950 30

7902 FORD ANALYST 7566 81/12/03 3000 20

7934 MILLER CLERK 7782 82/01/23 1300 10

14 개의 행이 선택되었습니다.

- DEPT(부서 테이블) 4건

칼럼이름 데이터 타입 Key

Type

NN/

Unique FK table

FK

column 설명

DEPTNO NUMBER(2) PK NN,U 부서코드

DNAME VARCHAR2(14) 부서이름

LOC VARCHAR2(13) 위치

SQL> SELECT * FROM DEPT;

DEPTNO DNAME LOC

-----------------------------------------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

Page 11: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

4 개의 행이 선택되었습니다.

- SALGRADE(급여등급 테이블) 5건

칼럼이름 데이터 타입 Key

Type

NN/

Unique FK table

FK

column 설명

GRADE NUMBER 등급

LOSAL NUMBER 급여하한값

HISAL NUMBER 급여상한값

SQL> SELECT * FROM SALGRADE;

GRADE LOSAL HISAL

-----------------------------------------

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

5 개의 행이 선택되었습니다.

1-5. 데이터베이스 무결성(DataBase Integrity)

개체 무결성(Entity Integrity)이란?

모든 테이블은 각각의 로우(ROW, 행, 레코드)를 유일하게 식별할 수 있는 칼럼의 집합을 가지는

데 이러한 칼럼의 집합 중에서 주요한 것을 Primary Key(PK)로 정의한다. (PK는 테이블의 행을 유

일하게 구별하는 식별자)

Primary Key의 값은 항상 유일(Unique)하며 널(Null)을 허용해서는 안된다.

Page 12: #1.SQL초보에서 Schema Objects까지(SQL학원/오라클학원/IT실무교육학원/재직자/실업자교육학원추천)

(NOT NULL 제약조건 + UNIQUE 제약조건)

참조 무결성 (Referential Integraty) 이란?

테이블은 외래키(Foreign Key, FK)를 통하여 서로 관계를 맺고 있는데, 다른 테이블 또는 자기자신

테이블의 Primary Key(PK) or Unique Key(UK) 칼럼값을 참조하는 칼럼을 말한다.

참조 무결성이 지켜지기 위해서는 Foreign Key 칼럼의 값은 참조하는 테이블의 칼럼값 중의 하나

이거나 널을 허용하는 경우라면 Null 이어야 한다.

무결성 제약조건(Integrity Constraints)이란?

위에서 정의한 무결성을 Business Rule로 표현한 것으로 Primary Key(PK) 와 Foreign Key(FK) 는 가

장 일반적인 무결성 제약 조건이며 이러한 무결성 제약조건은 DBMS에서 자동으로 수행한다.