다음 ‘고객’ 테이블과 ‘주문’ 테이블에서 아래에 주어진 SQL문과 동… | [7급 국가직 데이터베이스론] 25년 1회차 기출문제 상세 페이지
1[7급 국가직 데이터베이스론] 25년 1회차
다음 ‘고객’ 테이블과 ‘주문’ 테이블에서 아래에 주어진 SQL문과 동일한 결과를 출력하는 SQL문은? (단, 밑줄 속성은 기본키이며, ‘주문’ 테이블의 고객번호는 ‘고객’ 테이블의 번호를 참조하는 외래키이다)
| 고객 | ||
|---|---|---|
| 번호 | 이름 | 성별 |
| 1001 | 김홍도 | M |
| 1002 | 허균 | M |
| 1003 | 유관순 | F |
| 주문 | ||
|---|---|---|
| 고객번호 | 제품번호 | 개수 |
| 1001 | AA | 1 |
| 1003 | AA | 1 |
| 1001 | BA | 2 |
SELECT 이름, 제품번호, 개수
FROM 고객, 주문
WHERE 번호 = 고객번호
ORDER BY 이름, 제품번호;
1
SELECT 이름, 제품번호, 개수
FROM 고객 OUTER JOIN 주문
ON 번호 = 고객번호
ORDER BY 이름, 제품번호;
2
SELECT 이름, 제품번호, 개수
FROM 고객 RIGHT OUTER JOIN 주문
ON 번호 = 고객번호
ORDER BY 이름, 제품번호;
3
SELECT 이름, 제품번호, 개수
FROM 고객 LEFT OUTER JOIN 주문
ON 번호 = 고객번호
ORDER BY 이름, 제품번호;
4
SELECT 이름, 제품번호, 개수
FROM 고객, 주문
WHERE 번호 IN (SELECT 고객번호 FROM 주문)
ORDER BY 이름, 제품번호;
해설
같은 결과를 내는 것은 RIGHT OUTER JOIN 문장이다.
원래 문장은 내부 조인으로 (김홍도, AA, 1), (김홍도, BA, 2), (유관순, AA, 1) 세 행을 낸다.
주문의 고객번호는 외래키라 모든 주문이 고객과 짝지어지므로, 주문 쪽을 보존하는 오른쪽 외부 조인도 추가 행 없이 같은 세 행이 된다.
- 방향 없는 OUTER JOIN: 표준 SQL은 LEFT·RIGHT·FULL을 지정해야 하며, FULL로 보더라도 주문 없는 허균 행이 추가된다.
- LEFT OUTER JOIN: 주문이 없는 허균이 제품번호·개수 NULL로 추가되어 네 행이 된다.
- WHERE 번호 IN 서브쿼리: 조인 조건 없이 카티션 곱을 거르므로 김홍도·유관순이 주문 3건 모두와 결합해 여섯 행이 된다.
오류나 개정된 내용이 보이면 알려주세요