LECTURE/Oracle 과제

[춘대학시스템 워크북] DDL 문제 풀이

heywoo 2023. 1. 18. 00:24

1. 계열 정보를 저장할 카테고리 테이블을 만들려고 한다. 다음과 같은 테이블을 작성하시오.

CREATE TABLE TB_CATEGORY (
  NAME VARCHAR2(20),
  USE_YN CHAR(1) DEFAULT 1
);

ALTER TABLE TB_CATEGORY 
MODIFY USE_YN DEFAULT 'Y';

--실수 수정

 

2. 과목 구분을 저장할 테이블을 만들려고 한다. 다음과 같은 테이블을 작성하시오.

CREATE TABLE TB_CLASS_TYPE (
  NO VARCHAR2(5) PRIMARY KEY,
  NAME VARCHAR2(10)
);

 

3. TB_CATAGORY 테이블의 NAME 컬럼에 PRIMARY KEY 를 생성하시오. (KEY 이름을 생성하지 않아도 무방함. 만일 KEY 이를 지정하고자 한다면 이름은 본인이 알아서 적당한 이름을 사용한다.)

ALTER TABLE TB_CATEGORY
ADD CONSTRAINT PK_NAME PRIMARY KEY(NAME);

 

4. TB_CLASS_TYPE 테이블의 NAME 컬럼에 NULL 값이 들어가지 않도록 속성을 변경하시오.

ALTER TABLE TB_CLASS_TYPE
MODIFY NAME NOT NULL;

 

5. 두 테이블에서 컬럼 명이 NO 인 것은 기존 타입을 유지하면서 크기는 10 으로, 컬럼명이 NAME 인 것은 마찬가지로 기존 타입을 유지하면서 크기 20 으로 변경하시오.

ALTER TABLE TB_CLASS_TYPE
MODIFY NO VARCHAR2(10);

ALTER TABLE TB_CLASS_TYPE
MODIFY NAME VARCHAR2(20);

ALTER TABLE TB_CATEGORY
MODIFY NAME VARCHAR2(20);

 

6. 두 테이블의 NO 컬럼과 NAME 컬럼의 이름을 각 각 TB_ 를 제외한 테이블 이름이 앞에 붙은 형태로 변경한다. (ex. CATEGORY_NAME)

ALTER TABLE TB_CATEGORY
RENAME COLUMN NAME TO CATEGORY_NAME;

ALTER TABLE TB_CLASS_TYPE
RENAME COLUMN NAME TO CLASS_TYPE_NAME;
ALTER TABLE TB_CLASS_TYPE
RENAME COLUMN NO TO CLASS_TYPE_NO;

 

7. TB_CATAGORY 테이블과 TB_CLASS_TYPE 테이블의 PRIMARY KEY 이름을 다음과 같이 변경하시오. Primary Key 의 이름은  'PK_ + 컬럼이름‛으로 지정하시오. (ex. PK_CATEGORY_NAME )

ALTER TABLE TB_CATEGORY
RENAME CONSTRAINT PK_NAME TO PK_CATEGORY_NAME;

ALTER TABLE TB_CLASS_TYPE
RENAME CONSTRAINT SYS_C007535 TO PK_CLASS_TYPE_NO;

 

8. 다음과 같은 INSERT 문을 수행한다.

INSERT INTO TB_CATEGORY
VALUES
('공학','Y');
INSERT INTO TB_CATEGORY
VALUES
('자연과학','Y');
INSERT INTO TB_CATEGORY
VALUES
('의학','Y');
INSERT INTO TB_CATEGORY
VALUES
('예체능','Y');
INSERT INTO TB_CATEGORY
VALUES
('인문사회','Y');
COMMIT;

 

9.TB_DEPARTMENT 의 CATEGORY 컬럼이 TB_CATEGORY 테이블의 CATEGORY_NAME 컬럼을 부모 값으로 참조하도록 FOREIGN KEY 를 지정하시오. 이 때 KEY 이름은 FK_테이블이름_컬럼이름으로 지정한다. (ex. FK_DEPARTMENT_CATEGORY )

ALTER TABLE TB_DEPARTMENT
ADD 
CONSTRAINT FK_DEPARTMENT_CATEGORY FOREIGN KEY(CATEGORY) REFERENCES TB_CATEGORY(CATEGORY_NAME);

 

10. 춘 기술대학교 학생들의 정보만이 포함되어 있는 학생일반정보 VIEW 를 만들고자 한다. 아래 내용을 참고하여 적절한 SQL 문을 작성하시오.

CREATE VIEW VW_STUDENT
AS
SELECT
      STUDENT_NO 
    , STUDENT_NAME
    , STUDENT_ADDRESS
 FROM TB_STUDENT;

 

11. 춘 기술대학교는 1 년에 두 번씩 학과별로 학생과 지도교수가 지도 면담을 진행한다. 이를 위해 사용할 학생이름, 학과이름, 담당교수이름 으로 구성되어 있는 VIEW 를 만드시오. 이때 지도 교수가 없는 학생이 있을 수 있음을 고려하시오 (단, 이 VIEW 는 단순 SELECT 만을 할경우 학과별로 정렬되어 화면에 보여지게 만드시오.)

CREATE VIEW VW_COACH
 AS
 SELECT
        STUDENT_NAME
      , DEPARTMENT_NAME
      , PROFESSOR_NAME
  FROM TB_STUDENT S
  JOIN TB_DEPARTMENT D ON (S.DEPARTMENT_NO = D.DEPARTMENT_NO )
  LEFT JOIN TB_PROFESSOR P ON (S.COACH_PROFESSOR_NO = P.PROFESSOR_NO)
  ORDER BY DEPARTMENT_NAME;

 

12. 모든 학과의 학과별 학생 수를 확인할 수 있도록 적절한 VIEW 를 작성해 보자.

CREATE VIEW VW_DEPT_STUDENT
(
  DEPARTMENT_NAME
, STUDENT_COUNT
)
AS
SELECT
        D.DEPARTMENT_NAME
      , COUNT(S.STUDENT_NO)
  FROM  TB_STUDENT S
  JOIN  TB_DEPARTMENT D ON (S.DEPARTMENT_NO = D.DEPARTMENT_NO)
  GROUP BY D.DEPARTMENT_NAME;

 

13. 위에서 생성한 학생일반정보 View 를 통해서 학번이 A213046 인 학생의 이름을 본인 이름으로 변경하는 SQL 문을 작성하시오.

UPDATE
       VW_STUDENT
   SET STUDENT_NAME = 'HEYWOO'
 WHERE STUDENT_NO = 'A213046';

 

14. 13 번에서와 같이 VIEW 를 통해서 데이터가 변경될 수 있는 상황을 막으려면 VIEW 를 어떻게 생성해야 하는지 작성하시오.

CREATE VIEW VW_STUDENT
AS
SELECT
      STUDENT_NO 
    , STUDENT_NAME
    , STUDENT_ADDRESS
 FROM TB_STUDENT
 WITH READ ONLY;

-> 수정하기