ORACLE - 테이블 복사

테이블 복사 : AS SELECT

새로운 테이블을 만들 때 기존의 테이블 값을 가져와서 쓰고 싶을 때 사용

ex) emp 테이블을 복사해서 my_emp라는 테이블로 만들고 싶을 때

  • 테이블 전체 내용을 복사 : *
SQL> CREATE TABLE my_emp
  2  AS SELECT * FROM emp;
  • 원하는 일부 칼럼만 복사
SQL> CREATE TABLE my_emp
  2  AS SELECT empno, ename, sal, deptno FROM emp;
  • 테이블 복사를 할 때 구조와 데이터는 다 복사되지만 제약조건은 복사되지 않음, 따로 만들어야 함

+) 조건절이 FALSE인 경우에서 테이블을 생성할 경우

---> 테이블의 구조만 복사되고 데이터는 복사되지 않음

ex)

SQL> CREATE TABLE my_emp
 2  AS SELECT * FROM emp WHERE 1=2;

조건절 WHERE 1=2 이 FALSE이므로 row가 select되지 않아 데이터를 가져오지 않음

    SQL> select * from my_emp;
    선택된 레코드가 없습니다.

이미 만들어진 테이블에 다른 테이블의 값을 넣을 때
: INSERT INTO -> VALUES 대신에 SELECT 넣기

SQL> INSERT INTO my_dept
  2  SELECT * FROM dept;

--> 여기서는 그냥 테이블을 복사할 때처럼 일부 칼럼만 바로 SELECT하는 것은 불가능
-> ( ) 안에 해당 칼럼명을 명시한 다음에 SELECT 해야 한다 !

SQL> INSERT INTO my_dept
  2  (deptno, dname)
  3  SELECT deptno, dname FROM dept;

퀴즈
1. dept 테이블의 구조와 데이터를 복사해서 my_dept 테이블을 만들어 보세요.

SQL> CREATE TABLE my_dept
  2  AS SELECT * FROM dept;

(중간중간 DESC로 확인하기)

deptno에는 primary key 라는 제약조건을 추가해 보세요.

SQL> ALTER TABLE my_dept
  2  ADD CONSTRAINT my_dept_deptno_pk PRIMARY KEY(deptno);

dname에는 not null 이라는 제약조건을 추가해 보세요.
NOT NULL : ADD CONSTRAINT가 아님 !!! MODIFY !!!

SQL> ALTER TABLE my_dept
  2  MODIFY dname CONSTRAINT my_dept_dname_nn NOT NULL;
  1. emp 테이블의 구조와 데이터를 복사해서 my_emp 테이블을 만들어 보세요.
    SQL> CREATE TABLE my_emp
    2 AS SELECT * FROM emp;

empno에는 primary key라는 제약조건을 추가해 보세요.

SQL> ALTER TABLE my_emp
  2  ADD CONSTRAINT my_emp_empno_pk PRIMARY KEY(empno);

deptno에는 my_dept 테이블의 detpno 칼럼을 참조하는 외래키 (FOREIGN KEY) 제약조건을 추가해 보세요.

SQL> ALTER TABLE my_emp
  2  ADD CONSTRAINT my_emp_deptno_fk FOREIGN KEY(deptno) REFERENCES my_dept(deptno);

좋은 웹페이지 즐겨찾기