Workbook [DML]

-·2023년 12월 13일
0

Oracle-Workbook

목록 보기
5/5

✏️문제 1

  1. 과목유형 테이블(TB_CLASS_TYPE)에 아래와 같은 데이터를 입력하시오.

예시

🔍풀이

INSERT 
  INTO TB_CLASS_TYPE
VALUES
(
  '05'
, '논문지도'
);

✏️문제 2

춘 기술대학교 학생들의 정보가 포함되어 있는 학생일반정보 테이블을 만들고자 한다. 아래 내용을 참고하여 적절한 SQL 문을 작성하시오. (서브쿼리를 이용하시오)

예시

🔍풀이

CREATE TABLE TB_학생일반정보(
  학번
, 학생이름
, 주소
)
AS
SELECT STUDENT_NO
	 , STUDENT_NAME
     , STUDENT_ADDRESS
  FROM TB_STUDENT;

✏️문제 3

국어국문학과 학생들의 정보만이 포함되어 있는 학과정보 테이블을 만들고자 한다. 아래 내용을 참고하여 적절한 SQL 문을 작성하시오. (힌트 : 방법은 다양함, 소신껏 작성하시오)

예시

🔍풀이

CREATE TABLE TB_국어국문학과(
  학번
, 학생이름
, 출생년도
, 교수이름
)
AS
SELECT S.STUDENT_NO
     , S.STUDENT_NAME
     , EXTRACT(YEAR FROM TO_DATE(SUBSTR(STUDENT_SSN, 1, 2), 'RRRR'))
     , P.PROFESSOR_NAME
  FROM TB_STUDENT S
  JOIN TB_PROFESSOR P ON(S.COACH_PROFESSOR_NO = P.PROFESSOR_NO)
 WHERE S.DEPARTMENT_NO = '001';

💡참고
년도만 뽑아내는 경우
TO_CHAR(TO_DATE(SUBSTR(SSN, 1, 2), 'RR'), 'YYYY') 과
EXTRACT(YEAR FROM (TO_DATE(SUBSTR(SSN, 1, 2), 'RR'))는 같다.

✏️문제 4

현 학과들의 정원을 10% 증가시키게 되었다. 이에 사용할 SQL 문을 작성하시오. (단, 반올림을 사용하여 소수점 자릿수는 생기지 않도록 한다)

🔍풀이

UPDATE TB_DEPARTMENT
   SET CAPACITY = ROUND(CAPACITY * 1.1, 0);

✏️문제 5

학번 A413042인 박건우 학생의 주소가 "서울시 종로구 숭인동 181-21 "로 변경되었다고 한다. 주소지를 정정하기 위해 사용할 SQL 문을 작성하시오.

🔍풀이

UPDATE TB_STUDENT
   SET STUDENT_ADDRESS = '서울시 종로구 숭인동 181-21'
 WHERE STUDENT_NO = 'A413042';

✏️문제 6

주민등록번호 보호법에 따라 학생정보 테이블에서 주민번호 뒷자리를 저장하지 않기로 결정하였다. 이 내용을 반영핛 적절한 SQL 문장을 작성하시오.
(예. 830530-2124663 ==> 830530 )

🔍풀이

UPDATE TB_STUDENT
   SET STUDENT_SSN = SUBSTR(STUDENT_SSN, 1, 6);

✏️문제 7

의학과 김명훈 학생은 2005년 1학기에 자신이 수강핚 '피부생리학' 점수가 잘못되었다는 것을 발견하고는 정정을 요청하였다. 담당 교수의 확인 받은 결과 해당 과목의 학점을 3.5로 변경키로 결정되었다. 적절한 SQL 문을 작성하시오.

🔍풀이

UPDATE TB_GRADE 
   SET POINT = 3.5
 WHERE STUDENT_NO = (SELECT STUDENT_NO 
                       FROM TB_STUDENT
                      WHERE STUDENT_NAME = '김명훈'
                        AND DEPARTMENT_NO = '053'
                      )
   AND TERM_NO = '200501'
   AND CLASS_NO = (SELECT CLASS_NO FROM TB_CLASS WHERE CLASS_NAME = '피부생리학');

💡참고
동명이인 '김명훈' 이 또 있을 수도 있으니, STUDENT_NO을 검색할 때, 이름 뿐 아니라 학과도 함께 조건에 넣어줘야한다. 그렇지 않으면
"단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다." 이라는 오류가 발생하게 된다.

✏️문제 8

성적 테이블(TB_GRADE) 에서 휴학생들의 성적항목을 제거하시오.

🔍풀이

DELETE 
  FROM TB_GRADE
 WHERE STUDENT_NO IN (SELECT STUDENT_NO FROM TB_STUDENT WHERE ABSENCE_YN = 'Y');

💡참고
여러 행이 반환될 때에는 = 가 아닌 IN으로 사용한다.
또한 STUDENT_NO IN 이라면 뒤에 SELECT항목도 STUDENT_NO로 맞춰주는 것을 주의.

profile
신입 개발자의 개인 공부 공간입니다

0개의 댓글