1. CREATE 명령 ( 생성하기 )

   (1) 테이블 복사(특정컬럼만)

      [EX] CREATE TABLE [원하는 TABLE명]

            AS

               SELECT ... 

               FROM [복사할 TABLE명]

               WHERE ... ;



   (2) 테이블 복사(구조만)

      [EX] CREATE TABLE [원하는 TABLE명]

            AS

               SELECT * FROM [복사할 TABLE명] WHERE 1=2;



   (3) 가상 컬럼 테이블 생성(11g, 12c 가능)

      : 임의로 연산된 값이 들어갈 수 있도록 설정 가능 ( 유지보수 하기 힘들듯.. 그래서 딱히 쓰일지는 모르겠다. )


      [EX] CREATE TABLE [원하는 TABLE명]

            (

               NO1 NUMBER NOT NULL

              ,NO2 NUMBER NOT NULL

              ,NO3 NUMBER GENERATED ALWAYS AS (NO1 + NO2) VIRTUAL

            );

                                                                                            - VIRTUAL은 생략 가능!

      [조회방법]

         INSERT INTO [생성된 TABLE명] (NO1, NO2) VALUES (10, 20);

   SELECT * FROM [생성된 TABLE명];




2. ALTER 명령 ( 수정하기 )

   (1) 컬럼 추가

      [EX] ALTER TABLE [생성된 TABLE명]

            ADD ( [원하는 COLUMN명] VARCHAR(20) );


   (2) 컬럼명 변경

      [EX] ALTER TABLE [생성된 TABLE명] RENAME COLUMN [바꾸기 전 COLUMN명] TO [바꾼 후 COLUMN명];


   (3) 컬럼 삭제

      [EX] ALTER TABLE [생성된 TABLE명] DROP COLUMN [생성된 COLUMN명];


   (4) 읽기 전용 & 읽기/쓰기 전용으로 셋팅 : 변경이 잘 없는 코드성 자료에 쓰기 적합

      ALTER TABLE [생성된 TABLE명] READ WRITE;

      ALTER TABLE [생성된 TABLE명] READ ONLY;


     -> ui 단(변경이 잘 없는 부분)에서 풀고 쓰기를 활용해서 값 저장하고 읽기 전용으로 다시 묶는 방식으로 쓰면 괜찮을듯




3. TRUNCATE 명령

   : TABLE 남기고, DATA, MEMORY, INDEX 모두 삭제

   * 주의할점 : ROLLBACK 불가능, 무조건 전체 삭제, TABLE 처음 상태로 초기화

    (DELETE 보다 빠르게 처리함, 대용량 DATA처리에 유리)


   [EX] TRUNCATE TABLE [삭제할 TABLE명];




4. DROP 명령

   : TABLE을 포함해서 전부 다 삭제

   [EX] DROP TABLE [삭제할 TABLE명];


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_원하는 명칭];


1. Cartesian Product(카티션 곱)

   : Join 조건이 없이 그대로 붙이는 것 (참조되는 테이블의 행 수의 곱이 결과값이 된다.) <- 그래서 카티션 곱인듯ㅋ



2. Equip Join 

   : 흔히 쓰는 Join (동일한 값으로 Join 걸어 줄 때)



3. Non-Equip Join 

   : 잘 안쓰일듯한 Join (범위로 Join 걸어 줄 때)  [ex] BETWEEN A AND B



4. Outer Join (덱스가 있어도 Full Scan을 하므로 속도가 너무 느려짐!! 안쓰길 권장!!!)

   (1) LEFT OUTER JOIN (왼쪽에 있는 테이블을 다 보고 싶을 때)  

      [ex] 왼쪽 테이블에 Join으로 엮이는 컬럼이 null 값이 있다던지..

   (2) RIGHT OUTER JOIN (오른쪽에 있는 테이블을 다 보고 싶을 때)

   


5. Self Join

   : 동일한 테이블을 두개를 쓰고 Alias를 달리 해서 지지고 볶는 일.

    [EX] ... FROM EMPLOYEE A JOIN EMPLOYEE B ON A.MANAGER_ID = B.EMPLOYEE_ID ...



6. Sub Query (참고로 Sub Query는 데이터가 적을 때 빠른긴 함) 

   (1) 두 번 조건을 줘야할 때 유용하게 쓸 수 있는데, Join이 빠를지 얘가 빠를지를 고민해서 쓰도록 합시다!

   (2) 밑에 EX에서 괄호 사이의 쿼리가 다중행 리턴 시, 사용하는 것들 - IN , >ANY , <ANY , <ALL , >ALL (잘 안쓰일듯..)

   [EX] ... FROM EMPLOYEE WHERE MANAGER_ID = (SELECT EMPLOYEE_ID ...) ...


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

 

 

 

 

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

 


※ 기본구문

 

 - INSERT INTO [TABLE명_1(컬럼1, 컬럼2, ...)]

   SELECT [컬럼1, 컬럼2, ...] FROM [TABLE명_2] WHERE [조건]

 


 

 

[예제]  A_TABLE의 A, C, E 컬럼을 J_TABLE의 J, K, M 컬럼에 복사

 

(존재하는(생성한) 테이블 : A_TABLE, J_TABLE)

 

  1. A_TABLE의 컬럼 : A, B, C, D, E, F, G, H, I

 

1

999 

999 

999 

999 

999 

999 

999

999

999 

999 

999 

999 

 

  2. J_TABLE의 컬럼 : J, K, L, M, N

 

 J

null

null

null

null

null

 

 

=> INSERT INTO J_TABLE(J, K, M)

     SELECT A, C, E

     FROM  A_TABLE

     WHERE A > 0

 

COMMIT 해주면 복사 완료!

 

 

3. 작업 후, J_TABLE의 컬럼 : J, K, L, M, N

 

 J

null 

null 

4

5

null

6

null

 

'DATABASE > SQL' 카테고리의 다른 글

[SQL] TABLE의 원하는 컬럼 값 복사하기  (0) 2016.09.20

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

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

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

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

 

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

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

( EX ) USER라는 테이블에 USER_AGE 라는 컬럼을 NUNBER(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. 컬럼 수정으로 인해 컬럼명이 매칭이 되지 않아서 프로그램 오류가 발생할 수도 있습니다.



1. 실행 -> regedit

 

2. HKEY_LOCAL_MACHINE - SOFTWARE - ORACLE에 문자열 값을 새로만들기 합니다.

    - 값 이름 : NLS_LANG

    - 값 데이터 : KOREAN_KOREA.KO16MSWIN949

 

3. 내컴퓨터 -> 오른쪽클릭 -> 속성 -> 고급시스템설정 -> 환경변수 -> 새로만들기(시스템변수)

    - 레지스트리 편집기(regedit)에 입력했던 값과 동일하게 입력 후 확인 버튼을 클릭합니다.

    - 변수 이름 : NLS_LANG

    - 변수 값 : KOREAN_KOREA.KO16MSWIN949


+ Recent posts