다음 문장을 실행한 뒤 [진료] 테이블의 (전체 행 수, 환자번호가 N… | [SQLD] SQL 개발자 기출유형 모의고사 2회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 2회
다음 문장을 실행한 뒤 [진료] 테이블의 (전체 행 수, 환자번호가 NULL 인 행 수)로 옳은 것은?CREATE TABLE 환자 (환자번호 INT PRIMARY KEY, 이름 VARCHAR(10)); CREATE TABLE 진료 ( 진료번호 INT PRIMARY KEY, 환자번호 INT REFERENCES 환자(환자번호) ON DELETE SET NULL, 진료과 VARCHAR(10)); -- 환자: 1, 2, 3 / 진료(진료번호, 환자번호): (1,1) (2,2) (3,2) (4,3) (5,NULL) DELETE FROM 환자 WHERE 환자번호 = 2;
1
5, 1
2
3, 1
3
5, 2
4
5, 3
해설
ON DELETE SET NULL은 부모 행이 지워질 때 참조하던 자식 행을 지우지 않고 외래키 값만 NULL로 바꾸므로 진료는 5행 그대로다.
환자 2를 참조하던 진료번호 2·3이 NULL이 되고 원래 NULL이던 진료번호 5까지 더해 NULL 3행이다.
- NULL 2행은 원래 NULL이던 진료번호 5를 빠뜨린 값이다.
- 3행·NULL 1행은 자식까지 지우는 ON DELETE CASCADE의 결과다.
- 5행·NULL 1행은 아무 변화가 없는 경우로, RESTRICT라면 DELETE 자체가 오류다.
오류나 개정된 내용이 보이면 알려주세요