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