1. 테이블 조회하기


  - 테이블 목록 조회

     SELECT * FROM all_all_tables

     SELECT * FROM dba_tables

     SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE'


  - 테이블 목록 조회 (접속한 계정)

     SELECT * FROM tabs

     SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE'

     SELECT * FROM USER_TABLES


  - 테이블 코멘트 조회

     SELECT * FROM ALL_TAB_COMMENTS WHERE TABLE_NAME = '테이블명'

     SELECT * FROM USER_TAB_COMMENTS

 

2. 컬럼 조회하기

  - 컬럼 조회

     SELECT * FROM COLS WHERE TABLE_NAME = '테이블명'

     SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명'

     SELECT * FROM USER_TAB_COLUMNS


  - 컬럼 코멘트 조회

     SELECT * FROM USER_COL_COMMENTS


1. VIEW(뷰)

   (1) 테이블이 다른 사용자가 봐서는 안되는 컬럼이 있을 때, 컬럼 가리고 보여주고 싶을 때

   (2) 복잡하고 자주 Join을 할 때

   (3) 날리는 쿼리의 길이가 짧으니 Network 트래픽에 도움을 준다.


-> 권한이 안주어져 있는 계정이라면 SYS 계정으로 권한을 부여해야 한다.

    (ORACLE에서 지원하는 연습계정은 권한이 부여 되어 있는듯?)

       HR>CONN / AS SYSDBA;

       SYS>GRANT CREATE VIEW TO HR;


   [EX] CREATE OR REPLACE VIEW [V_원하는 명칭]

         AS

             SELECT ... FROM ... WHERE ... ;

         

         -> 삭제는 DROP VIEW [V_원하는 명칭];


   * Inline VIEW(1회용 뷰) : FROM절에 서브쿼리를 써줌

        [EX] SELECT ... 

              FROM SELECT ...

                         FROM ...

                         WHERE ... )

              WHERE ... ;



2. SEQUENCE(시퀀스) : 자동증가(넘버링)

   -> 동시 접속이 생기는 상황에서 유용할듯?


   [EX] CREATE SEQUENCE [SEQ_원하는 명칭]

         INCREMENT BY 1 -- 증가값

         MINVALUE 1       -- 최소값

         START WITH 1     -- 시작번호(기본값 1)

         ;

        -> 조건을 더 다양하게 줄 수 있지만 머리 아프니깐 생략!


        INSERT INTO [생성되어 있는 테이블명]

   VALUES ( [SEQ_원하는 명칭].NEXTVAL, 'ORACLE 기초', '기초학습자', '20161221' );


         -> 삭제는 DROP SEQUENCE [SEQ_원하는 명칭];


ROWNUM을 활용하여 간단하게 순번을 지정 할 수 있기 때문에 간편하게 순번들을 먹일것입니다.

 

(EX) "ABC" TABLE

 

A

B

C

TEST12

TESTTEST12

TESTTESTTEST12 

TEST123

TESTTEST123

TESTTESTTEST123 

 

 

 -> SELECT ROWNUM, A, B, C FROM ABC

 

ROWNUM 

 1

 TEST12

 TESTTEST12

TESTTESTTEST12 

 2

 TEST123

 TESTTEST123

TESTTESTTEST123 

 

 

하지만...

 

ORDER BY를 사용한다면 상황은 달라집니다.

 

왜냐?

 

ROWNUM이 ORDER BY 보다 우선순위가 앞서기 때문이죠. (ROWNUM으로 순번 먹히고 ORDER BY로 재정렬..)

 

 

 

위 상황에서 대처하는 방법

 

=> RANK 함수를 활용하여 순번을 임의로 정의해주면 됩니다.

 

 

※ A컬럼을 기준으로 순번을 먹이는 예입니다.

 

(EX) SELECT (RANK() OVER(ORDER BY A)) ROWNUMS, A, B, C FROM ABC

 

 

 

 

정상적으로 출력되는 모습을 보실 수 있을 것입니다 ^^

 


1. 테이블 컬럼 추가하기(ALTER TABLE ADD)

[문법] ALTER TABLE 테이블명 ADD(컬럼명 데이타타입(사이즈));

( EX ) USER라는 테이블에 USER_NAME이라는 컬럼을 VARCHAR2(13) 타입으로 추가할 때

-> ALTER TABLE USER ADD(USER_NAME VARCHAR2(13)); 

 

2. 테이블 컬럼 수정하기(ALTER TABLE MODIFY)

[문법] ALTER TABLE 테이블명 MODIFY(컬럼명 테이타타입(사이즈));

( EX ) USER라는 테이블에 USER_AGE 라는 컬럼을 NUMBER(3) 타입으로 수정할 때

-> ALTER TABLE USER MODIFY(USER_AGE NUMBER(3));

 

3. 테이블 컬럼 삭제하기(ALTER TABLE DROP)

[문법] ALTER TABLE 테이블명 DROP COLUMN 컬럼명

( EX ) USER라는 테이블에 USER_NAME라는 컬럼을 삭제할 때

-> ALTER TABLE USER DROP COLUMN USER_NAME;

 

4. 테이블 컬럼 이름 변경하기(ALTER TABLE RENAME)

[문법] ALTER TABLE 테이블명 RENAME COLUMN 원래컬럼명 TO 바꿀컬럼명;

( EX ) USER라는 테이블에 USER_NAME 이라는 컬럼을 USER_FIRST_NAME으로 변경할 때

-> ALTER TABLE USER RENAME COLUMN USER_NAME TO USER_FIRST_NAME;

 

 

컬럼 수정 작업은 테이터가 별로 없는 테이블이나 시작 단계에서 작업을 하는 것을 추천합니다.

1. 데이터가 많으면 수정하는데 시간이 많이 걸릴 것입니다.

2. 컬럼 수정으로 인해 컬럼명이 매칭이 되지 않아서 프로그램 오류가 발생할 수도 있습니다.

+ Recent posts