[DataBase] 5장, 6장_실습 문제

존진·2023년 10월 23일

1. EMP 테이블을 복사하여 new_emp3 테이블을 생성하시오.

CREATE TABLE new_emp3
AS
SELECT * FROM emp;


2. 위의 new_emp3 테이블에 sal + comm 값을 가지는 가상 컬럼 total을 추가하시오. 단 comm 값이 NULL일 경우 0으로 대체하시오.

ALTER TABLE new_emp3
ADD( total GENERATED ALWAYS AS( sal+NVL(comm, 0)));


3. new_emp3 테이블의 컬럼 중에서 hiredate 컬럼을 삭제하는 쿼리를 쓰세요.

ALTER TABLE new_emp3 DROP COLUMN hiredate;


4. new_emp3 테이블의 컬럼은 남겨 놓고 데이터만 지우는 쿼리를 쓰세요.

TRUNCATE TABLE new_emp3;


5. new_emp3 테이블을 완전히 삭제하는 쿼리를 쓰세요.

DROP TABLE new_emp3;


6. emp테이블과 구조가 같은 emp10, emp20 테이블을 만드시오.

[emp10]
CREATE TABLE emp10
AS
SELECT * FROM emp WHERE 1=2;
[emp20]
CREATE TABLE emp20
AS
SELECT * FROM emp WHERE 1=2;


7. emp 테이블에서 부서 번호가 10번인 사원들은 emp10에 부서 번호가 20인 사원들은 emp20에 삽입하시오.

INSERT INTO emp10
SELECT * FROM emp
WHERE deptno='10';

--------------------

INSERT INTO emp20
SELECT * FROM emp
WHERE deptno='20';

--------------------

[2개 행 한꺼번에 입력]
INSERT ALL
WHEN deptno='10' THEN INTO emp10 VALUES(empno, ename, job, mgr, hiredate, sal, comm, deptno)
WHEN deptno='20' THEN INTO emp20 VALUES(empno, ename, job, mgr, hiredate, sal, comm, deptno)
SELECT * FROM emp;


8. emp테이블에서 부서 번호가 30번 부서의 사람들을 읽어서 emp10, emp20 모두에 삽입하시오.

INSERT INTO emp10
SELECT * FROM emp WHERE deptno='30';

----------------------------------------

INSERT INTO emp20
SELECT * FROM emp WHERE deptno='30';


9. emp 테이블에서 10번 부서 사람들의 (empno, ename, deptno)로 emp10 테이블을 생성하시오.

CREATE TABLE emp10
AS
SELECT empno, ename, deptno FROM emp;


10. emp테이블의 20번 부서 사람들의 (empno, ename, deptno)로 emp20 테이블을 생성하시오.

CREATE TABLE emp20
AS
SELECT empno, ename, deptno FROM emp;


11. emp 테이블의 (empno, ename, deptno) 속성만을 가지는 emp_all 테이블 구조를 생성하시오.

CREATE TABLE emp_all
AS
SELECT empno, ename, deptno FROM emp WHERE 1=2;


12. emp_all 테이블로 emp10, emp20 을 합치시오.

MERGE INTO emp_all ea
USING emp10 e1
ON (e1.empno = ea.empno)
WHEN MATCHED THEN
UPDATE SET ea.deptno = e1.deptno
WHEN NOT MATCHED THEN
INSERT VALUES(e1. empno, e1.ename, e1.deptno);

❗ ON() 절에서 참조되는 열은 UPDATE 구문에 사용할 수 없다!_!


13. emp10에 사원 추가 (7999, ADD, 10) 하시오.

INSERT INTO emp10
VALUES('7999', 'ADD', '10');


14. emp20 테이블에 7902번 사원의 이름을 COCA로 변경하시오.

UPDATE emp20
SET ename='COCA'
WHERE empno='7902';


15. emp_all 테이블로 emp10, emp20 을 다시 합치고 결과를 확인하시오.

MERGE INTO emp_all ea
USING emp10 e1
ON (e1.empno = ea.empno)
WHEN MATCHED THEN
UPDATE SET
    e1.ename = ea.ename,
    e1.deptno = ea.deptno
WHEN NOT MATCHED THEN
INSERT VALUES(e1.empno, e1.ename, e1.deptno);

-------------------------------------------------
MERGE INTO emp_all ea
USING emp20 e2
ON (ea.empno = e2.empno)
WHEN MATCHED THEN
UPDATE SET
    ea.ename = e2.ename,
    ea.deptno = e2.deptno
WHEN NOT MATCHED THEN
    INSERT VALUES(e2.empno, e2.ename, e2.deptno);


0개의 댓글