다음 문장을 실행한 뒤 [진료] 테이블의 (전체 행 수, 환자번호가 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 자체가 오류다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[SQLD] SQL 개발자 기출유형 모의고사 2회 50문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요SQLD SQL 개발자 실전 모의고사 암기장 전체 보기