데이터베이스 45

오라클 SQL과 PL/SQL - 데이터 딕셔너리 (Data Dictionary)

데이터 딕셔너리 (Data Dictionary) 오라클은 데이터베이스를 운영하기 위한 정보들을 모두 특정한 테이블에 모아두고 관리하는데 그 테이블을 데이터 딕셔너리라고 합니다. 이 딕셔너리에는 아래와 같은 주요 정보들이 저장됩니다. 오라클 데이터베이스의 메모리 구조와 파일에 대한 구조 정보 각 오브젝트들이 사용하고 있는 공간의 정보 제약 조건 정보 사용자에 대한 정보 권한이나 프로파일, 롤에 대한 정보 감사(Audit)에 대한 정보 이 외에도 많은 정보들이 있습니다. 이 정보들은 사람으로 비유하면 두뇌에 해당되는 정보들이기 때문에 만약 장애나 잘못 관리될 경우 오라클을 사용할 수 없고 더 심한 경우 복구조차 할 수 없게 될 수 있습니다. 그래서 오라클은 딕셔너리를 base table과 data dicti..

오라클 SQL과 PL/SQL ( DELETE, TRUNCATE, DROP 차이 / 읽기전용테이블 )

DELETE, TRUNCATE, DROP 명령어의 차이점 DELETE : 데이터만 지워지고 쓰고 있던 디스크상의 공간은 그대로 가지고 있습니다. 그래서 데이터가 DELETE 되어도 테이블 용량은 줄어들지 않습니다. TRUNCATE : 최초에 테이블이 만들어졌던 상태, 즉 데이터가 1건도 없는 상태로 모두 삭제하고 컬럼값만 남겨놓습니다. 용량도 줄어들고 인덱스등도 모두 삭제됩니다. DROP : 데이터와 테이블 전체를 삭제합니다. 사용하고 있던 공간도 모두 반납하고 인덱스 제약조건 등 오브젝트도 삭제됩니다. 11g에서 추가된 기능소개 1. 읽기 전용 테이블로 변경하기 만약 어떤 경우에 특정 테이블의 내용을 모두 변경은 할 수 없게하고 조회만 가능하도록 설정해야 한다면 트리거를 사용하거나 아니면 제약조건을 D..

오라클 SQL과 PL/SQL ( ALTER / TRUNCATE / DROP )

ALTER 명렁 ALTER 명령어는 만들어져 있는 오브젝트를 변경하는 명령어 입니다. 즉 , 테이블 같은 경우에는 컬럼을 추가,삭제, 이름을 바꾸는 작업을 할 수 있는데 이 명령어는 부하가 많이 걸리는 명령어이므로 사용량 많은 시간에 수행하는 것은 위험합니다. CREATE TABLE DEPT6 AS SELECT DCODE, DNAME FROM DEPT2 WHERE DCODE IN(1000, 1001, 1002); SELECT * FROM dept6; ALTER TABLE DEPT6 ADD(LOC VARCHAR(10)); SELECT * FROM DEPT6 이제부터 장소명을 가지는 LOC 컬럼을 추가하겠습니다. LOC컬럼을 확인해 보니 모두 기본값으로 NULL값이 입력되어 있습니다. 새로추가 되는 컬럼에 ..

오라클 SQL과 PL/SQL ( DDL - CREATE )

DDL 명령과 딕셔너리 사람이 사용하는 다양한 말들이 여러가지 품사로 구분되는 것 처럼 오라클에서 사용하는 다양한 명령어들도 아래와 같이 구분이 됩니다. DDL : CREATE(생성) , ARTER(수정), TRUNCATE(잘라내기), DROP(삭제) DML : INSERT(입력), UPDATE(변경) , DELETE(삭제) , MERGE(병합) DCL : GRANT(권한 주기) , REVOKE (권한 뺏기) TCL : COMMIT(확정), ROLLBACK(취소) SELECT : 어떤 분류에서는 DQL 이라고 하기도 합니다. 이러한 명령어들을 이용하여 데이터를 관리하는 것입니다. 오라클 데이터베이스 내부에 데이터를 관리하기 위해 다양한 저장 객체를 생성하게 되는데 이것을 오브젝트라고 부르고 오브젝트 중에..

오라클 SQL과 PL/SQL ( JOIN 연습문제 - 2 )

1. customer 테이블과 gift테이블을 join하여 고객이 자기 포인트보다 낮은 포인트의 상품 중 한 가지를 선택할 수 있다고 할 때 notebook을 선택할 수 있는 고객명과 포인트, 상품명을 출력하세요. SELECT C.GNAME, C.POINT, G.GNAME FROM CUSTOMER C, GIFT G WHERE C.POINT >= G.G_START AND G.GNAME = 'Notebook' 2. PROFESSOR 테이블에서 교수의 번호, 교수 이름, 입사일, 자신보다 입사일 빠른 사람 인원수를 출력하세요. 단 자신보다 입사일이 빠른 사람 수를 오름차순으로 출력하세요. SELECT P1.PROFNO, P1.NAME, TO_CHAR(P1.HIREDATE, 'YYYY/MM/DD') HIREDA..

오라클 SQL과 PL/SQL ( JOIN 연습문제 - 1 )

1. 학생테이블과 학과 테이블을 사용하여 학생이름, 1전공 학과 번호, 1전공 학과 이름을 출력하세요. 단 ANSI / ORACLE 두 방법 모두 작성하세요 ORACLE SELECT S.NAME STU_NAME, S.DEPTNO1 DEPTNO1, D.DNAME DEPT_NAME FROM STUDENT S, DEPARTMENT D WHERE S.DEPTNO1 = D.DEPTNO ANSI SELECT S.NAME STU_NAME, S.DEPTNO1 DEPTNO1, D.DNAME DEPT_NAME FROM STUDENT S LEFT OUTER JOIN DEPARTMENT D ON S.DEPTNO1 = D.DEPTNO 2. EMP2 테이블과 P_GRADE 테이블을 조회하여 현재 직급이 있는 사원의 이름과 직급,..

오라클 SQL과 PL/SQL ( OUTER JOIN 주의사항 / SELF JOIN )

ORACLE OUTER JOIN 주의사항 오라클 아우터 조인은 WHERE절의 아우터 조인이 되는 컬럼들에 대해서는 전부 아우터 조인 연산자(+)를 붙여야 합니다. 만약 하나라도 빠진다면 결과는 일반 조인과 동일하게 되어 원하지 않는 데이터를 추출하게 됩니다. 만약 부서에 대한 정보를 모두 보여주고 부서 번호가 20인 사원의 사원번호 이름 급여를 보여주는 예제를 본다면 사원 테이블의 조인 유무와 상관없이 부서정보를 보여주기 위해서는 아우터 조인을 사용해야 합니다. 기준이 되는 테이블이 부서 테이블이므로 WHERE절에 사원테이블의 모든 컬럼에 아우터 조인 연산자를 붙입니다. SELECT D.DEPTNO, D.DNAME, D.LOC, E.EMPNO, E.ENAME, E.SAL FROM DEPT D, EMP E..

오라클 SQL과 PL/SQL ( OUTER JOIN )

OUTER JOIN ( 아우터 조인) INNER JOIN은 모든 테이블에 데이터가 존재하는 경우에만 결과값을 출력했습니다. OUTER JOIN은 INNER JOIN과 반대로 한쪽 테이블에는 데이터가 있고 한쪽 테이블에 없는 경우에 데이터가 있는 쪽 테이블의 내용을 전부 출력하는 방법입니다. 앞에서 살펴본 학생 테이블과 교수테이블의 예에서 학생은 있는데 지도규사가 결정이 안되었을 경우 이너조인으로는 학생이름이나 교수이름이 조회가 안되었습니다. 반드시 지도교수가 결정되지 않은 학생의 이름이나 교수의 이름까지 다 나와야 하는 경우라면 아우터 조인을 사용하면 됩니다. 모든 데이터를 다 출력할 수 있기 때문에 좋을 것 같지만 이 조인방식은 DB성능에 아주 나쁜 영향을 줄 수 있습니다. 만약 A , B 테이블을 조..

오라클 SQL과 PL/SQL ( INNER JOIN - 비등가 조인 )

Non-Equi JOIN(비등가 조인) 앞에서 EQUI 조인은 조인 조건절에 조건을 지정할 때 조인 대상 테이블들에서 서로 같은 조건을 가진 데이터를 가져왔습니다. 그러나 실제 상황에서는 같은 조건이 아닌 크거나 작거나 하는 경우의 조건으로 조회를 해야할 경우도 얼마든지 있을 수 있습니다. 그럴 때 사용하는 조인 방법이 비등가 조인입니다. 자세한 예로 알아보겠습니다. 사용 예1. CUSTOMER테이블과 GIFT테이블을 조인하여 고객별로 마일리지 포인트를 조회한 후 해당 마일리지 점수로 받을 수 있는 상품을 조회하여 고객의 이름과 받을 수 있는 상품 명을 아래와 같이 출력하세요. ORACLE SELECT C.GNAME CUST_NAME, TO_CHAR(C.POINT, '999,999') POINT, G.G..

오라클 SQL과 PL/SQL ( INNER JOIN - 등가 조인 )

EQUI JOIN(등가 조인) 가장 많이 사용되는 조인으로 선행 테이블에서 데이터를 가져온 후 조인 조건절을 검사해서 동일한 조건을 가진 데이터를 후행 테이블에서 꺼내오는 방법입니다. 조건절에서 =(EQUAL)을 사용해서 EQUI JOIN이라고 합니다. 예를 통해 알아보겠습니다. EMP 테이블과 DEPT 테이블을 조인해서 조회하겠습니다. ORACLE SELECT EMPNO, ENAME, DNAME FROM EMP E , DEPT D WHERE E.DEPTNO = D.DEPTNO; ANSI JOIN SELECT E.EMPNO, E.ENAME, D.DNAME FROM EMP E JOIN DEPT D ON E.DEPTNO = D.DEPTNO; 위에서 살펴본 바와 같이 SELECT 절에 테이블이름.컬럼이름 같은..

728x90