문제
다음 세 개의 SQL 중 결과가 다른 것은?
-- SQL1
SQLSELECT * FROM A JOIN B ON A.ID = B.ID JOIN C ON B.ID = C.ID;
-- SQL2
SQLSELECT * FROM A JOIN B ON A.ID = B.ID JOIN C ON A.ID = C.ID;
-- SQL3
SQLSELECT * FROM A JOIN (B JOIN C ON B.ID = C.ID) ON A.ID = B.ID;
① SQL1만 다름 ② SQL2만 다름 ③ SQL3만 다름 ④ 모두 동일함
정답
4번
해설
④ (정답) 세 SQL 모두 동일한 결과를 반환한다. JOIN 연산은 결합법칙이 성립하므로 (A JOIN B) JOIN C = A JOIN (B JOIN C)이다. SQL1과 SQL2는 ON 조건만 다르지만 전이성에 의해 A.ID = B.ID AND B.ID = C.ID는 A.ID = C.ID를 의미하므로 결과가 같다. SQL3는 괄호로 명시적으로 결합 순서를 지정했지만 결과는 동일하다. ① ② ③ 모두 틀렸다. JOIN의 결합법칙과 전이성을 이해하면 세 SQL이 모두 같은 결과임을 알 수 있다.