2020.12.03 일지 - DBMS

0후·2020년 12월 3일
0

비트캠프

목록 보기
34/112

오늘의 요약

< 오라클 11g >

[ PART 1 - 설치 및 접근법 ]

1. 오라클 설치(11g)
   (1) 디렉토리 이름이 '한글'이면 X
       1) Oracle 설치파일이 존재하는 경로에 한글X
       2) Oracle 설치경로에 한글X
       
   (2) 디렉토리에 '공백'이 있으면 X
       1) Oracle 설치 파일이 존재하는 경로에 공백X
       2) Oracle 설치 경로에 공백X

   (3) Windows 계정이 한글 이름이면 X

   (4) 설치시에 에러 해결 방법 
       1) OS부터 밀고 다시 설치 
       2) Oracle 를 다시 설치 
          <1> 제어판 -> 프로그램 추가제거 -> 관련 프로그램 제거
	  <2> 관리도구 -> 서비스 -> 오라클 관련 서비스들을 정지
	  <3> Oracle 설치 디렉토리를 삭제
	     (만약, 삭제 안되면 '안전모드'에서 삭제 )
	  <4> 시작 -> 모든 프로그램에서 -> Oracle관련 메뉴 삭제 
	  <5> 실행 -> regedit -> oracle관련 파일을 모두 제거 
	  <6> 다시 설치

2. 오라클 접근법 
   (1) sqlplus 이용법 
      ex) 실행 -> sqlplus scott/tiger 
      
   (2) utility application 이용법 ( local / remote 관리 )
       1) sqlgate 
       2) toad 
       3) orange 
       4) SQL Developer 
          ..........

[ PART 2 - ORACLE 개요 ]
1. DBMS ( DataBase Management System )의 개념 
   (1) DB ( DataBase )
       - 지속적으로 유지 관리해야 할 '데이터의 집합' 

   (2) DBMS 
       - DB를 효율적으로 '관리'하고, 효율적으로 '저장'하고
         '검색'할 수 있는 환경을 제공해 주는 '시스템 소프트웨어' 
	 ( ex: Oracle, Ms-sql, MySql, Db2, 사이베이스, ... )

2. DBMS 역사 
   (1) 1960 : File System
   (2) 1970 : Network-DBMS 
   (3) 1980 : 관계형-DBMS ( RDBMS )
   (4) 1990 : 관계형-DBMS, 객체관계형( ORDBMS )
   (5) 2000 : 관계형/객체관계형/객체지향  

       ex) oracle 6.X, 7.X -> 관계형 
           oracle 8.X, 11.X -> 객체관계형 

3. 데이터베이스 설계
   실세계(업무분석) -> '개'념적 모델링 -> '논'리적 모델링 -> '물'리적 모델링 -> SQL작성 
         ( 'Entity''Attribute') ( ERD 생성 ) ( 구체적인 DBMS 결정 )

4. SQL ( Structured Query Language )

5. 기본 사용자 계정 
   (1) SYS
       오라클 'super' 사용자 ID이며, 데이터베이스에서 발생하는 
        '모든 문제'를 처리할 수 있는 권한 

   (2) SYSTEM 
       SYS과 같은데, 차이는 데이터베이스를 생성할 수 있는 권한이 없음 

   (3) SCOTT 
       처음 오라클을 사용하는 user들을 위한 SAMPLE 계정이며, 
       일반적으로 프로그램을 작성할 때 사용되는 수준의 
       권한( for Developer )을 가진 계정이다. 

6. 주요 용어 
   (1) TABLE 
       관계형 DBMS에서 기본 데이터 저장 구조로써 'Entity(실체)'의 
       집합 저장소 ( ex: DEPT, EMP, SALGRADE, BONUS, ... ) 

   (2) ROW 
       테이블의 행 ( 하나의 유효한 데이터 ), Entity(실체)
       (ex : 10 ACCOUNTING     NEW YORK  )

   (3) COLUMN  
       테이블의 열명 ( Attibute 가 COLUMN이 됨 ) 
       (ex : DEPTNO,  DNAME, LOC )

   (4) PRIMARY-KEY
       테이블에서 각 ROW를 유일하게 구분하는 COLUMN 에 
       부여되는 '제약조건( Constraint )'
       (ex: PK_DEPT )

   (5) FOREIGN-KEY ( == 참조키, 외래키 )
       다른 테이블의 COLUMN값을 참조하는 테이블의 COLUMN에 
       부여되는 '제약조건' [ cf) 참조 무결성 ]
       (ex: FK_DEPTNO )
   
   (6) FIELD 
       테이블에서 ROWCOLUMN이 교차하는 데이터 
       (ex: DEPT에서 'SALES' )

   (7) NULL 
       데이터가 존재하지 않는 FIELD 

      ex) scott 계정의 table 
         - DEPT : 부서 테이블  
	 - EMP  : 사원 테이블

7. SQL의 구분 
   (1) DQL( Data Query Language ) (*****)
       -> 테이블의 데이터를 '조회'할 때 
       ( ex: select~ )
   (2) DML( Data Manipulation Language )
       -> 테이블의 '입력', '수정', '삭제'할 때 
       ( ex: insert~, update~, delete~ )
   (3) DDL ( Data Definition Language )
       -> 객체들을 생성, 변경, 삭제 등을 할 때 
       ( ex: create~, alter~, drop~, ... )
   (4) TCL ( Transaction Control Language )
       -> DML문을 DB에 저장 or 취소할 때 
       ( ex: commit, rollback, savepoint~ )

       cf) Transaction: 분리되어서는 안될 (논리적인) '작업 단위'
   (5) DCL ( Data Control Language ) 
       -> DB 계정에게 권한을 '부여'or '취소'할 때 
       ( ex: grant~ , revoke~ )

8. PL-SQL
   제어문(조건문, 반복문)이 들어있는 SQL로써 오라클 DBMS에서 지원하는 확장된 SQL 
   (1) Stored Procedure (***)
       -> 일련의 작업처리순서를 정의해 놓은 것으로 
         미리 DBMS에 컴파일되어져있어 프로그램 or 사용자로부터 
	 호출되면 실행되는 일종의 '작업처리순서' 
   (2) Anonymous Procedure 
       -> Stored Procedure 와의 차이점은 'DBMS에 자동으로 포함'되어 
         내부적으로 호출되는 프로시져 
   (3) Stored Function 
       -> 프로시져와 차이점은 'return값'이 존재해야 함 
   (4) Trigger (***)
       -> 어떤 조건에 만족되어지는 상황(DML)이 발생되면 
         자동으로 호출되어 작동되는 로직 
   (5) Package 
       -> 위의 것들을 기능별로 묶어놓은 꾸러미
       
[ PART 3 - SQL ]
1. DQL
   #1-1 Base
   (1) 기본
       SQL> select * from tab;
       SQL> select TABLE_NAME from user_tables;
       SQL> desc dept
       SQL> select DNAME, LOC from DEPT;
       SQL> select * from DEPT;

   (2) all / distinct
       SQL> select JOB from EMP;
       SQL> select all JOB from EMP;
       SQL> select distinct JOB from EMP;

   (3) order by
       -- 모든 사원들의 사번과 급여를 출력
       SQL> select EMPNO, SAL from EMP;
       -- 모든 사원들의 사번과 급여를 출력(급여가 낮은 순)
       SQL> select EMPNO, SAL from EMP order by SAL; -- asc 생략
       -- 모든 사원들의 사번과 급여를 출력(급여가 높은 순)
       SQL> select EMPNO, SAL from EMP order by SAL desc;
       -- 모든 사원의 사번과 급여를 출력 (급여가 높은 순, 같은 급여일땐 EMPNO오름차순)
       SQL> select EMPNO, SAL from EMP order by SAL desc, EMPNO;

       -- 모든 사원의 사번과 커미션을 출력(커미션 낮/높 순)
       SQL> select EMPNO, COMM from EMP order by COMM; -- null이 뒤로 
       SQL> select EMPNO, COMM from EMP order by COMM desc; -- null이 앞으로
       
       -- (null 제외한) 모든 사원의 사번과 커미션을 출력
       SQL> select EMPNO, COMM from EMP where COMM is not null;
       -- (null 제외한) 모든 사원의 사번과 커미션을 출력(단, 커미션이 높은 순으로)
       SQL> select EMPNO, COMM from EMP where COMM is not null order by COMM desc;
       
       -- 직업에 대해서 오름차순 정렬한 후, 급여가 높은 순으로 정렬
       SQL> select JOB, SAL from EMP order by JOB, SAL desc;

  (4) ALIAS   
       SQL> select JOB "직업", SAL "급여" from EMP;
       SQL> select JOB as "직업", SAL as "급여" from EMP;
       SQL> select JOB 직업, SAL 급여 from EMP;
       SQL> select JOB 직업, SAL "1234" from EMP;
       SQL> select JOB 직업, SAL "!@#$" from EMP;

        cf) 숫자 or 특수문자 or 공백포함 되면 ""로 묶어줘야 함 

  (5) where
       -- 부서번호가 20인 사원의 사번과 부서번호를 출력
       SQL> select EMPNO, DEPTNO from EMP where DEPTNO=20;

       -- 30번 부서인 부서번호와 급여와 사번을 출력하라(단, 급여가 높으로 순)
       select DEPTNO, SAL, EMPNO from EMP where DEPTNO=30 order by SAL desc;
       
       -- 입사일이 81년 12월 3일이후의 사번과 이름과 입사일과 부서번호 출력
       -- (단, 사번의 내림차순)
       select EMPNO, ENAME, HIREDATE, DEPTNO from EMP
       where HIREDATE>='81/12/03'
       order by EMPNO desc;

	-- 입사일이 81년 12월 3일이후의 사번과 이름과 입사일과 부서번호 출력
        -- (단, 사번의 내림차순, 20번부서만 출력)
        select EMPNO, ENAME, HIREDATE, DEPTNO from EMP
        where HIREDATE>='81/12/03' and DEPTNO=20
        order by EMPNO desc;
        
  (6) 연산자( Operator )
      1) 산술연산자( *, /, +, - ) 
       -- 30번 부서 사원의 급여를 10% 인상해서 사번(EMPNO)과 급여(SAL)를 출력
       SQL> select EMPNO, SAL*1.1 from EMP where DEPTNO=30;

       -- 30번 부서 사원의 '연말보너스'를 이름과 연말보너스를 출력(연말보너스가 높은 순) 
       -- (단, 연말보너스는 급여의 2배와 커미션의 1/2의 합이다.)
       SQL> select ENAME, SAL, COMM from EMP where DEPTNO=30;
       SQL> select ENAME, SAL, NVL(COMM,0) from EMP where DEPTNO=30;
       SQL> select ENAME, SAL*2+NVL(COMM,0)/2 "연말보너스" from EMP 
            where DEPTNO=30 order by "연말보너스" desc;

      2) 비교연산자 ( =, != , >, >=, <, <= )
       -- 급여가 950인 사원의 이름(ENAME)과 급여(SAL)를 출력
       SQL> select ENAME, SAL from EMP where SAL=950;

       -- 급여가 3000 이상인 사원의 이름(ENAME)과 급여(SAL)를 출력
       SQL> select ENAME, SAL from EMP where SAL>=3000;

       -- 30부서가 아닌 사원의 이름(ENAME)과 급여(SAL)와 부서번호(DEPTNO)를 출력
       -- (부서번호의 오름차순, 높은 급여순, 이름 오름차순)
       SQL> select ENAME, SAL, DEPTNO from EMP where DEPTNO!=30
          order by DEPTNO, SAL desc, ENAME;

     3) 논리연산자 ( and(), or(), not )	
       -- 20번 부서이면서 급여 3000이상인 사원의 이름, 급여, 부서번호를 출력
       SQL> select ENAME, SAL, DEPTNO from EMP where DEPTNO=20 and SAL>=3000;

       -- 직업이 'SALESMAN'이고 부서번호가 30번인 이름, 직업, 부서번호를 출력
       SQL> select ENAME, JOB, DEPTNO from EMP where DEPTNO=30 and JOB='SALESMAN';

       -- 급여가 1000 미만이거나, 4000 이상인 사원의 사번, 급여를 출력
       SQL> select EMPNO, SAL from EMP where SAL<1000 or SAL>=4000;

       -- 급여가 1000 이상 4000 미만인 사원의 사번, 급여를 출력
       SQL> select EMPNO, SAL from EMP where not (SAL<1000 or SAL>=4000);
       
       cf1) 사원(EMP) 컬럼 
       EMPNO  -- 사번
       ENAME  -- 이름                                             
       JOB    -- 직업                                           
       MGR    -- 관리자                                              
       HIREDATE -- 입사일                                         
       SAL    -- 급여                                             
       COMM   -- 커미션                                            
       DEPTNO -- 부서번호 
       
       cf2) 부서(DEPT) 컬럼 
       DEPTNO -- 부서번호
       DNAME  -- 부서이름 
       LOC    -- 부서위치 

Oracle 설치방법

  1. 개인적인 방법으로 Oracle 11g를 구해온 뒤, setup.exe를 열고 실행해준다.
  2. 콘솔창도 잠깐 뜬 다음에, 여러 창이 뜨고 난 뒤에 하단 창이 뜨면 그냥 라고 눌러준다.
  3. 이메일 보안갱신 수신 체크 해제해준다. 체크 해제하면 이것도 알림 받지 않는다고 해준다.
  4. 데이터베이스 생성 및 구성에 체크해준다.
  5. 데스크톱 클래스에 체크해준다.
  6. D보다는 C에 설치해주는게 나중에 포맷할때나 여러모로 좋으므로 C드라이브로 선택해주고, 전역 데이터베이스 이름을 JAVA로 설정해주고 관리 비밀번호도 입력해준다.
  7. 다음 창이 뜨면 모두 완료 눌러주고 이 창이 뜨면 비밀번호 관리를 눌러준다.
  8. 창이 뜨면 HR, SCOTT에 각각 체크 해제를 해준다.
  9. 다 되면 Win+R 눌러 sqlplus 입력하여 ID:SCOTT PW:tiger 입력, 입력 후 비밀번호 입력하고 비밀번호 확인도 입력하여 접속 성공되면 끝!
  10. sqlplus 사용 말고, sqldeveloper 사용하려면 초기 화면은 다음과 같다. 테스트 접속 성공해야 제대로 접속할 수 있다는 것을 잊지말기!
profile
휘발방지

0개의 댓글