데이터베이스 기초

사원 표(사원번호, 이름, 부서ID)에 5개 행이 있고, 부서ID는 차례로 10, 20, 10, NULL, NULL이다. 부서 표(부서ID, 부서명)에는 부서ID가 10, 20, 30인 3개 행이 있다. SELECT 부서.부서명, 사원.이름 FROM 부서 LEFT OUTER JOIN 사원 ON 부서.부서ID = 사원.부서ID의 결과는 몇 행이 되는가?

  1. A3행
  2. B4행
  3. C5행
정답과 해설 보기

정답: B. 4행

LEFT OUTER JOIN(왼쪽 외부 조인)은 왼쪽 표(여기서는 부서 표)의 모든 행을 남기고, 오른쪽 표에 일치하는 행이 없으면 오른쪽 열을 NULL로 채워 한 행으로 합니다. 부서 10에는 사원이 2명 있으므로 2행, 부서 20은 1행, 사원이 없는 부서 30은 이름이 NULL인 1행이 되어 합계 4행입니다. 부서ID가 NULL인 사원 2명은 어느 부서와도 일치하지 않고, 남길 대상이 아닌 오른쪽 표의 행이므로 결과에 나오지 않습니다. 내부 조인이라면 부서 30의 행도 사라져 3행입니다. 표의 좌우를 바꾸어 사원 LEFT OUTER JOIN 부서로 하면 사원 5명이 모두 남으므로 5행이 됩니다. 외부 조인에서는 어느 쪽 표의 행을 모두 남기는지 확인하는 것이 중요합니다.

이 분야 연습하기 분야로 돌아가기

데이터베이스 기초의 다른 문제

  1. 표 R의 열 x의 값은 1, 1, 2, 3의 4개 행, 표 S의 열 x의 값은 1, 1, 2, 4의 4개 행이다. SELECT * FROM R INNER JOIN S ON R.x = S.x의 결과는 몇 행이 되는가?
  2. 고객 표(고객ID, 이름)에는 (C1, 아오키), (C2, 이노우에), (C3, 우에다), (C4, 에토)의 4개 행이 있다. 주문 표(주문ID, 고객ID, 금액)에는 (O1, C1, 3000), (O2, C2, 8000), (O3, C1, 6000), (O4, C3, 2000), (O5, C2, 9000)의 5개 행이 있다. SELECT 이름 FROM 고객 WHERE 고객ID IN (SELECT 고객ID FROM 주문 WHERE 금액 > 5000)의 결과는 몇 행이 되는가?
  3. 고객 표(고객ID, 이름)와 주문 표(주문ID, 고객ID, 금액)에서 한 번도 주문하지 않은 고객의 이름을 구하려고 한다. 올바른 SQL 문은?
  4. 관계형 데이터베이스의 뷰에 대한 설명으로 올바른 것은?
  5. 관계형 데이터베이스의 표를 정규화하는 주된 목적은?