SQLD(SQL 개발자) 기출 · JOIN
다음 중 아래 (1), (2), (3)의 SQL에서 실행결과가 같은 것은?
본문)
(1) SELECT A.ID, B.ID
FROM TBL1 A FULL OUTER JOIN TBL2 B
ON A.ID = B.ID
(2) SELECT A.ID, B.ID
FROM TBL1 A LEFT OUTER JOIN TBL2 B
ON A.ID = B.ID
UNION
SELECT A.ID, B.ID
FROM TBL1 A RIGHT OUTER JOIN TBL2 B
ON A.ID = B.ID
(3) SELECT A.ID, B.ID
FROM TBL1 A, TBL2 B
WHERE A.ID = B.ID
UNION ALL
SELECT A. ID, NULL
FROM TBL1 A
WHERE NOT EXISTS (SELECT 1 FROM TBL2 B WHERE A.ID = B.ID)
UNION ALL
SELECT NULL, B.ID
FROM TBL2 B
WHERE NOT EXISTS (SELECT 1 FROM TBL1 A WHERE B.ID = A.ID)이 문제 풀어보기
정답 및 해설 보기
정답: 3번
정답은 3번이다. (1)은 FULL OUTER JOIN이고 (3)은 INNER JOIN 결과에 양쪽 미매칭 행을 UNION ALL로 더해 동일한 결과를 만든다. 반면 (2)는 LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과를 UNION으로 합쳐 중복 행이 제거될 수 있으므로 항상 같은 결과가 되지 않는다.