[Oracle] 22.서브쿼리와 DDL


서브쿼리로 테이블 생성하기



이제부터 서브쿼리를 이용해서 테이블을 생성해보겠습니다~


employees 테이블과 같은 테이블을 한 번 만들어볼까요?



CREATE TABLE emp02
    AS
        SELECT
            *
        FROM
            employees;



잘 만들어 졌는지 볼까요?


SELECT
    *
FROM
    emp02;




image



employees 테이블과 똑같은 테이블이 만들어졌습니다!


그런데 주의할 것이 완전한 테이블 복사가 아닙니다.

왜냐하면 원래 테이블 employees의 제약조건 모두가 emp02 테이블에 옮겨지는 것이 아니기 때문입니다.

NOT NULL 제약조건만 옮겨집니다!


image




image



제약조건에 대해서는 나중에 다시 알아보겠습니다!



다음과 같이 원하는 속성만 가져와서 테이블을 생성할 수도 있고, 별칭을 줄 수도 있습니다.


CREATE TABLE emp03
    AS
        SELECT
            employee_id "EMPNO",
            first_name|| ' '|| last_name "ENAME"
        FROM
            employees;




image




또한 원하는 행만 가져와서 테이블을 만들 수도 있습니다.


CREATE TABLE emp04
    AS
        SELECT
            *
        FROM
            employees
        WHERE
            department_id = 10;




image




테이블의 데이터를 안가져오고 구조만 복사하려면 조건식이 항상 거짓이면 됩니다.


CREATE TABLE emp05
    AS
        SELECT
            *
        FROM
            employees
        WHERE
            1 = 0;



SET UNUSED



예전에 테이블 컬럼 삭제는 다음과 같이 DROP COLUMN을 이용하는데요~


ALTER TABLE emp03 DROP COLUMN ename;



사용빈도가 적은 컬럼을 논리적으로 먼저 제한하고, 사용시간이 적을 때 한꺼번에 삭제할 수 있는 옵션이 있습니다.

바로 ‘unused’ 입니다.


ALTER TABLE emp03 SET UNUSED(ename); -- 논리적으로 제한->풀기 불가




ALTER TABLE emp03 DROP UNUSED COLUMNS; -- unused로 지정된 컬럼 한꺼번에 삭제




TRUNCATE



테이블에 있는 모든 데이터 삭제를 하려면 TRUNCATE 를 이용하면 됩니다.


TRUNCATE TABLE emp03;



테이블 이름 바꾸기



테이블의 이름을 바꾸려면 RENAME을 이용합니다.


RENAME emp04 TO emp;