Programming/SQL

[Oracle] SUBQUERY를 이용한 테이블 생성 / 테이블 생성 후 제약조건 추가하기 (ALTER TABLE)

Jayna. 2024. 3. 8. 16:37
728x90

SUBQUERY를 이용한 테이블 생성

CREATE TABLE 테이블명
    AS 서브쿼리 ;

 

기존 테이블(EMPLOYEE)을 복제한 새로운 테이블 생성 (EMPLOYEE_COPY)

CREATE TABLE EMPLOYEE_COPY
    AS SELECT * fROM EMPLOYEE; -- Table EMPLOYEE_COPY이(가) 생성되었습니다.

SELECT * FROM EMPLOYEE_COPY; -- 제약 조건은 NOT_NULL 만 복사됨
728x90

기존 테이블에 있는 컬럼의 구조만 복사하고 싶은 경우

CREATE EMPLOYEE_COPY2
    AS SELECT * FROM EMPLOYEE
        WHERE 1 = 0;  -- 1=0 은 FALSE를 의미
        
SELECT * FROM EMPLOYEE_COPY2; -- 컬럼만 복사됨

 

기존 테이블의 특정 조건에 대한 결과를 테이블로 생성

-- 전체사원들 중 급여가 300만원 이상인 사람들의 사번, 이름, 부서코드, 급여 조회 결과 테이블 생성
CREATE TABLE EMPLOYEE_COPY3
   AS SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
        FROM EMPLOYEE
       WHERE SALARY >= 3000000;
    
-- 전체사원들의 사번, 사번명, 급여 , 연봉 조회 결과 테이블 생성
CREATE TABLE EMPLOYEE_COPY3
   AS SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY, (SALARY*12)
        FROM EMPLOYEE;
-- 오류 ORA-00998: must name this expression with a column alias
-- 서브쿼리의 SELECT절 산술연산 또는 함수식이 기술된 경우 반드시 별칭을 부여해야 함

CREATE TABLE EMPLOYEE_COPY3
   AS SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY, (SALARY*12) 연봉
        FROM EMPLOYEE;

 

테이블이 생성된 후, 제약조건 추가하기 (ALTER TABLE)

PRIMARY KEY : ADD PRIMARY KEY(컬럼명);
FOREIGN KEY : ADD FOREIGN KEY(컬럼명) REFERENCES 참조할테이블명(참조할컬럼명);
UNIQUE : ADD UNIQUE(컬럼명);
CHECK : ADD CHECK(컬럼에 대한 조건);
NOT NULL : MODIFY 컬럼명 NOT NULL;
-- EMPLOYEE COPY 테이블에 없는 PRIMARY 제약조건 추가 ( EMP_ID 컬럼에)
ALTER TABLE EMPLOYEE_COPY ADD PRIMARY KEY(EMP_ID);
-- Table EMPLOYEE_COPY이(가) 변경되었습니다.

-- EMPLOYEE_COPY 테이블에 DEPT_CODE 컬럼에 외래키 제약 조건 추가(DEPARTMENT테이블의 DEPT_ID 참조)
ALTER TABLE EMPLOYEE_COPY ADD FOREIGN KEY(DEPT_CODE) REFERENCES DEPARTMENT(DEPT_ID);
728x90