다음 Student, Course, Enrollment 테이블에 대한 … | [7급 국가직 데이터베이스론] 22년 1회차 기출문제 상세 페이지
1[7급 국가직 데이터베이스론] 22년 1회차
다음 Student, Course, Enrollment 테이블에 대한 SQL 구문들을 수행하였을 때, COUNT(*) 값은? (단, Enrollment 테이블 생성 시 sno 속성과 cno 속성은 각각 Student 테이블과 Course 테이블 기본키의 외래키이며, 두 외래키에 모두 ON DELETE CASCADE 조건이 적용된다)
Student
| sno | sname | year | dept |
|---|---|---|---|
| 100 | John | 4 | Com |
| 200 | David | 3 | EE |
| 300 | Tom | 1 | Com |
| 400 | Mark | 4 | Com |
| 500 | Simon | 2 | ME |
Course
| cno | cname | credit | dept | professor |
|---|---|---|---|---|
| C123 | Java | 3 | Com | Andy |
| C312 | Data Structure | 3 | Com | Joseph |
| C324 | File System | 3 | Com | Helen |
| C413 | Database | 3 | Com | Luna |
| E412 | OS | 3 | EE | Elsa |
Enrollment
| sno | cno | grade | midterm | final |
|---|---|---|---|---|
| 200 | C123 | B | 85 | 80 |
| 300 | C312 | A | 90 | 95 |
| 400 | C312 | A | 90 | 95 |
| 500 | C312 | B | 85 | 80 |
| 300 | C324 | C | 75 | 75 |
| 400 | C324 | A | 95 | 90 |
| 100 | C413 | A | 90 | 95 |
| 300 | C413 | A | 95 | 90 |
| 400 | C413 | B | 80 | 85 |
| 100 | E412 | A | 95 | 95 |
| 400 | E412 | C | 65 | 75 |
SQL 구문
DELETE FROM Student WHERE sname= ‘Simon’;
DELETE FROM Course WHERE cname= ‘OS’;
SELECT COUNT(*) FROM Enrollment;
DELETE FROM Student WHERE sname= ‘Simon’;
DELETE FROM Course WHERE cname= ‘OS’;
SELECT COUNT(*) FROM Enrollment;
1
6
2
7
3
8
4
9
해설
두 DELETE 후 Enrollment에 남는 행은 8개이다. ON DELETE CASCADE로 삭제된 학생·과목을 참조하던 수강 행이 함께 삭제된다.
처음 Enrollment는 11행이다.
Simon(sno 500) 삭제 → (500, C312) 1행 연쇄 삭제 → 10행
OS(cno E412) 삭제 → (100, E412), (400, E412) 2행 연쇄 삭제 → 8행
- 6행: 5행이 삭제되어야 나오는 값이지만 연쇄 삭제 대상은 모두 3행뿐이다.
- 7행: 4행이 삭제되어야 나오는 값으로, sno 500·cno E412를 참조하는 행 수와 맞지 않는다.
- 9행: OS를 수강한 2행 중 하나만 지운 경우의 값이다.
오류나 개정된 내용이 보이면 알려주세요