본문 바로가기
연습 문제

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

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

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

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

 

1. 다음 테이블을 생성하여라

 

테이블 이름 : EMP학번c(칼럼 레벨), EMP학번t(테이블 레벨)

칼럼명 ID LNAME FNAME DEPTID
키유형 PK     FK
NN/UK NN, UK NN   NN
FK 테이블       DEPT학번
FK 칼럼       NO
DataType NUM V2 V2 NUM
길이 7 25 25 7

 

테이블 이름 : DEPT학번c(칼럼 레벨), DEPT학번t(테이블 레벨)

칼럼명 NO NAME
키유형 PK  
NN/UK NN,UK  
FK 테이블    
FK 칼럼    
DataType NUM V2
길이 7 25

 

1) 칼럼 레벨과 테이블 레벨로 테이블을 각각 생성하여라.

 

[답]

EMP 테이블의 DEPT 테이블 외래키 설정을 해주어야 하기 때문에 DEPT 테이블을 먼저 생성합니다.

테이블명은 문제에는 DEPT학번c로 작성하라 하였지만, 답안에서는 간단하게 DEPTC로 작성하였습니다.

DEPT 테이블 칼럼 레벨

CREATE TABLE DEPTC
(no NUMBER(7) CONSTRAINT deptc_no_pk PRIMARY KEY,
name VARCHAR2(25));

 

[답]

EMP 테이블의 DEPT 테이블 외래키 설정을 해주어야 하기 때문에 DEPT 테이블을 먼저 생성합니다.

테이블명은 문제에는 DEPT학번t로 작성하라 하였지만, 답안에서는 간단하게 DEPTT로 작성하였습니다.

DEPT 테이블 테이블 레벨

CREATE TABLE DEPTT
(no NUMBER(7),
name VARCHAR2(25),
CONSTRAINT deptt_no_pk PRIMARY KEY(no));

 

[답]

테이블명은 문제에는 EMP학번c로 작성하라 하였지만, 답안에서는 간단하게 EMPC로 작성하였습니다.

EMP 테이블 칼럼 레벨

CREATE TABLE EMPC
(id NUMBER(7) CONSTRAINT empc_id_pk PRIMARY KEY,
lname VARCHAR2(25) CONSTRAINT empc_lname_nn NOT NULL,
fname VARCHAR2(25),
deptid NUMBER(7) CONSTRAINT empc_deptid_nn NOT NULL
                CONSTRAINT empc_deptid_fk REFERENCES deptc(no));

 

[답]

테이블명은 문제에는 EMP학번c로 작성하라 하였지만, 답안에서는 간단하게 EMPT로 작성하였습니다.

EMP 테이블 테이블 레벨

CREATE TABLE EMPT
(id NUMBER(7),
lname VARCHAR2(25) CONSTRAINT empt_lname_nn NOT NULL,
fname VARCHAR2(25),
deptid NUMBER(7) CONSTRAINT empt_deptid_nn NOT NULL,
CONSTRAINT empt_id_pk PRIMARY KEY(id),
CONSTRAINT empt_deptid_fk FOREIGN KEY(deptid) REFERENCES deptt(no));

 

2) 위에서 생성한 테이블들의 구조를 확인하여라.

 

[답]

EMP 테이블 칼럼 레벨 테이블 구조 확인

DESC EMPC

 

[답]

EMP 테이블 테이블 레벨 테이블 구조 확인

DESC EMPT

 

[답]

DEPT 테이블 칼럼 레벨 테이블 구조 확인

DESC DEPTC

 

[답]

DEPT 테이블 칼럼 레벨 테이블 구조 확인

DESC DEPTT

 

3) 위에서 생성한 테이블의 데이터를 확인하여라.

 

[답]

EMP 테이블 칼럼 레벨 테이블 데이터 확인

SELECT *
FROM EMPC;

 

[답]

EMP 테이블 테이블 레벨 테이블 데이터 확인

SELECT *
FROM EMPT;

 

[답]

DEPT 테이블 칼럼 레벨 테이블 데이터 확인

SELECT *
FROM DEPTC;

 

[답]

DEPT 테이블 테이블 레벨 테이블 구조 확인

SELECT *
FROM DEPTT;

데이터 추가가 되지 않았기 때문에 '선택된 레코드가 없습니다.'가 출력되는 것이 정상입니다.

 

4) 데이터 사전을 이용해서 위에서 생성한 EMP학번c, EMP학번t, DEPT학번c, DEPT학번t 테이블에 대해 칼럼명, 제약조건명, 제약조건유형, 참조테이블, 참조칼럼을 검색하여라.(4개의 테이블에 대해서만 표시하여라.)

 

[답]

EMPC 테이블에 대한 칼럼명, 제약조건명, 제약조건유형, 참조테이블, 참조칼럼 조회

SELECT ucc.column_name, uc.constraint_name, uc.constraint_type, ucc.table_name, ucc.column_name
FROM user_constraints uc, user_cons_columns ucc
WHERE uc.constraint_name = ucc.constraint_name
and uc.table_name = 'EMPC';

 

[답]

EMPT 테이블에 대한 칼럼명, 제약조건명, 제약조건유형, 참조테이블, 참조칼럼 조회

SELECT ucc.column_name, uc.constraint_name, uc.constraint_type, ucc.table_name, ucc.column_name
FROM user_constraints uc, user_cons_columns ucc
WHERE uc.constraint_name = ucc.constraint_name
and uc.table_name = 'EMPT';

 

[답]

DEPTC 테이블에 대한 칼럼명, 제약조건명, 제약조건유형, 참조테이블, 참조칼럼 조회

SELECT ucc.column_name, uc.constraint_name, uc.constraint_type, ucc.table_name, ucc.column_name
FROM user_constraints uc, user_cons_columns ucc
WHERE uc.constraint_name = ucc.constraint_name
and uc.table_name = 'DEPTC';

 

[답]

DEPTT 테이블에 대한 칼럼명, 제약조건명, 제약조건유형, 참조테이블, 참조칼럼 조회

SELECT ucc.column_name, uc.constraint_name, uc.constraint_type, ucc.table_name, ucc.column_name
FROM user_constraints uc, user_cons_columns ucc
WHERE uc.constraint_name = ucc.constraint_name
and uc.table_name = 'DEPTT';

 

2. 1) EMP학번c 테이블의 구조만 복사하는 빈 테이블을 EMP학번 EMPTY 이름으로 생성하여라.

 

[답]

테이블명은 문제에는 EMP학번EMPTY로 작성하라 하였지만, 답안에서는 간단하게 EMPEMPTY로 작성하였습니다.

CREATE TABLE EMPEMPTY
AS
SELECT *
FROM EMPC
WHERE 1 = 0;

 

2) 위에서 생성한 테이블의 구조를 확인하여라.

 

[답]

DESC EMPempty

 

3) 위에서 생성한 테이블의 데이터를 확인하여라.

 

[답]

SELECT *
FROM EMPempty;

데이터 추가가 되지 않았기 때문에 '선택된 레코드가 없습니다.'가 출력되는 것이 정상입니다.

 

3. 1) EMP학번c 테이블의 구조와 내용을 복사하여 EMP학번COPY 테이블을 생성하여라.

 

[답]

테이블명은 문제에는 EMP학번COPY로 작성하라 하였지만, 답안에서는 간단하게 EMPCOPY로 작성하였습니다.

EMPC 테이블의 구조를 EMPCOPY 테이블로 복사

CREATE TABLE EMPCOPY
AS
SELECT *
FROM EMPC
WHERE 1 = 0;

EMPC 테이블의 데이터를 EMPCOPY 테이블로 복사

INSERT INTO EMPCOPY
SELECT *
FROM EMPC;

EMPC 테이블에 데이터 추가가 되지 않았기 때문에 '0 행이 생성되었습니다.'가 출력되는 것이 정상입니다.

 

2) 위에서 생성한 테이블의 구조를 확인하여라.

 

[답]

DESC EMPCOPY

 

3) 위에서 생성한 테이블의 데이터를 확인하여라.

 

[답]

SELECT *
FROM EMPCOPY;

데이터 추가가 되지 않았기 때문에 '선택된 레코드가 없습니다.'가 출력되는 것이 정상입니다.

 

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

반응형

댓글