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;
- 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);
Author And Source
이 문제에 관하여(ORACLE - 테이블 복사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeongmmmn/ORACLE-테이블-복사저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)