본문 바로가기
연습 문제

예제 따라가며 쉽게 배우는 오라클 연습 문제 p.189 ~ 190

by 알기 쉬운 코딩 사전 2023. 1. 3.
반응형

연습문제 sql은 모두 제가 직접 작성한 것이므로 오타, 오답이 존재할 수 있습니다.

궁금하신 점이 추가로 있을 시에는 문의하시면 최대한 답변드리겠습니다.

 

1. EMP 테이블과 같은 구조, 같은 데이터를 갖는 테이블 REEMP 테이블을 생성하고, 테이블의 구조와 데이터를 확인하여라.

 

[답]

EMP 테이블과 같은 구조, 같은 데이터를 갖는 테이블 REEMP 테이블을 생성

CREATE TABLE REEMP
AS
SELECT *
FROM EMP;
테이블의 구조 확인

DESC REEMP
테이블의 데이터를 확인

SELECT *
FROM REEMP;

 

2. DEPT 테이블과 같은 구조, 같은 데이터를 갖는 테이블 REDEPT 테이블을 생성하고, 테이블의 구조와 데이터를 확인하여라.

 

[답]

DEPT 테이블과 같은 구조, 같은 데이터를 갖는 테이블 REDEPT 테이블을 생성

CREATE TABLE REDEPT
AS
SELECT *
FROM DEPT;
테이블의 구조 확인

DESC REDEPT
테이블의 데이터를 확인

SELECT *
FROM REDEPT;

 

3. REEMP 테이블을 토대로 EMPNO, ENAME, DEPTNO를 포함하는 뷰 REEMP_VIEW를 작성하여라.

 

+) 뷰 REEMP_VIEW를 작성하여라.

[답]

CREATE OR REPLACE VIEW REEMP_VIEW
AS
SELECT EMPNO, ENAME, DEPTNO
FROM REEMP;

 

1) 뷰 REEMP_VIEW의 구조를 확인하여라.

 

[답]

DESC REEMP_VIEW

 

2) 뷰 REEMP_VIEW의 데이터를 확인하여라.

 

[답]

SELECT *
FROM REEMP_VIEW;

 

3) 뷰 REEMP_VIEW의 EMPNO의 데이터를 EMPNO+100으로 변경하여라.

 

[답]

UPDATE REEMP_VIEW
SET EMPNO = EMPNO + 100;

 

4) EMPNO의 값이 변경되었는지를 REEMP_VIEW에서 확인하여라.

 

[답]

SELECT *
FROM REEMP_VIEW;

 

5) EMPNO의 값이 변경되었는지를 REEMP 테이블에서 확인하여라.

 

[답]

SELECT *
FROM REEMP;

DML을 사용하여 VIEW의 데이터를 수정하게 되면 원본 테이블도 같이 수정이 됩니다.

 

 

6) 데이터 사전을 이용해서 생성된 뷰 REEMP_VIEW의 이름과 생성 구문을 확인하여라.

 

[답]

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;

 

4. REEMP 테이블로부터 DEPTNO=30인 사원들로 된 REEMP_VIEW30을 만들어라. 단 DEPTNO의 값은 변경될 수 없도록 하여라.

 

+) 뷰 REEMP_VIEW30을 만들어라.

 

[답]

CREATE OR REPLACE VIEW REEMP_VIEW30
AS
SELECT *
FROM REEMP
WHERE DEPTNO = 30
WITH CHECK OPTION;

 

1) 뷰 REEMP_VIEW30의 구조를 확인하여라.

 

[답]

DESC REEMP_VIEW30

 

2) 뷰 REEMP_VIEW30의 데이터를 확인하여라.

 

[답]

SELECT *
FROM REEMP_VIEW30;

 

3) 뷰 REEMP_VIEW30 에서 DEPTNO가 30인 것을 10으로 바꾸어라. 바꿀 수 없다면 그 이유에 대해 설명하여라.

 

[답]

UPDATE REEMP_VIEW30
SET DEPTNO = 10
WHERE DEPTNO = 30;

뷰를 생성할 때 WITH CHECK OPTION은 사용한 조건의 칼럼 값을 변경 못하도록 하는 기능을 제공하기 때문에
추후에 DEPTNO 칼럼 값을 변경하지 못한다.

 

4) 데이터 사전을 이용해서 생성된 뷰 REEMP_VIEW30의 이름과 생성 구문을 확인하여라.

 

[답]

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS
WHERE VIEW_NAME = 'REEMP_VIEW30';

 

5. REEMP 테이블과 REDEPT 테이블로부터 EMPNO, ENAME, DEPTNO, DNAME을 포함하는 뷰 E_D_VIEW를 작성하여라.

 

+) 뷰 E_D_VIEW를 작성하여라.

 

[답]

CREATE OR REPLACE VIEW E_D_VIEW
AS
SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME
FROM REEMP E, REDEPT D
WHERE E.DEPTNO = D.DEPTNO;

 

1) 뷰 E_D_VIEW의 구조를 확인하여라.

 

[답]

DESC E_D_VIEW

 

2) 뷰 E_D_VIEW의 모든 데이터를 확인하여라.

 

[답]

SELECT *
FROM E_D_VIEW;

 

3) 뷰 E_D_VIEW 에 하나의 데이터 (9000, 'KIM', 30, 'MARKETING')를 추가하여라. 만약 추가할 수 없다면 그 이유에 대해 설명하여라.

 

[답]

INSERT INTO E_D_VIEW
VALUES(9000, 'KIM', 30, 'MARKETING');

오라클에서 자체적으로 복합뷰에는 DML 연산을 가능하지 않도록 설계를 해놓았다.
(PK, FK 등의 조인을 진행하다가 사용자로부터 각종 오류가 나기 때문에)

 

4) 데이터 사전을 이용해서 생성된 뷰 E_D_VIEW의 이름과 생성 구문을 확인하여라.

 

[답]

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS
WHERE VIEW_NAME = 'E_D_VIEW';

 

궁금한 점이 있을 시 덧글 주시면 최대한 답글 드리겠습니다.

반응형

댓글