[HOW]NATURAL JOIN, CROSS JOIN 사용하는 방법, ANSI 조인 -오라클 (ORACLE)
안녕하세요. 신기한 연구소입니다.
쿼리를 만들다 보면 다양한 join을 만나게 되는데요.
사실 기본 INNER JOIN과 OUTER JOIN을 많이 사용합니다.
그 외에도 NATURAL JOIN과 CROSS JOIN이 있는데..
어떤 의미이며 어떻게 사용하는지 그 방법에 대해 알아봅니다.
조인에 대해 명시를 하는 INNER, OUTER, NATURAL, CROSS 등을 표준 조인
또는 ANSI 조인이라고 합니다.
그럼 NATURAL JOIN에 대해 살펴봅니다.
이 조인의 특징은 바로 두 테이블 간 공통된 컬럼을 자동으로 인식하는 겁니다.
그 말은 연결 고리를 표시할 필요가 없다는 의미입니다.
위 쿼리를 보면 NATURAL INNER JOIN 과 NATURAL JOIN 두 가지로 사용되었는데
같은 의미입니다.
INNER는 생략이 가능합니다.
그러고 보니 저번에 INNER JOIN을 포스팅했었는데요.
INNER JOIN은 EQUI(등가) 조인으로 양 쪽 테이블에 같은 값을 가지는 컬럼을 묶어서
연결하는 구조였습니다.
NATURAL JOIN도 INNER JOIN이라면 같은 의미겠지요?
다른 점은 연결 컬럼인 DEPTNO를 명시적으로 표현하지 않았고 알아서 자동으로 연결된다는
점입니다.
그래서 ON, USING, WHERE절의 조인 방식을 사용할 수 없습니다.
또한 연결한 두 테이블의 컬럼은 같은 이름, 같은 데이터 유형이어야 합니다.
또한 별칭(ALIAS)을 사용할 수도 없어요.
또 다른 점은 결과 조회인데요.
INNER JOIN은 *로 조회하면 두 개의 테이블에 존재하는 같은 컬럼이 각각 표시됩니다.
NATURAL JOIN은 한 개만 조회됩니다.
INNER JOIN은 *로 조회하면 두 개의 테이블 전체 컬럼을 순서대로 출력합니다.
NATURAL JOIN은 한 개만 조회된다고 했는데 제일 앞 컬럼에 나옵니다.
그럼 어떤 컬럼으로 조인되었는지 확인이 가능하겠네요.
위 쿼리와 이번 쿼리와 결과를 비교해 보세요. 이해하기 쉬울 겁니다.
다음은 CORSS JOIN 또는 CARTESIAN PRODUCT에 대해 알아봅니다.
사실 조인이라 해야 할지 모르겠네요.
이유는 조인인데 조인 조건이 없습니다.
그냥 두 개 테이블을 M*N으로 곱해서 조회하는 구조거든요.
A 테이블이 10건, B 테이블이 5건이면 10*5 = 50건의 조합으로 데이터가 조회됩니다.
먼저 두 테이블의 각각 건수를 확인합니다.
12건과 5건이 나오네요.
이제 CROSS JOIN을 시도합니다.
ANSI 가 아닌 일반적으로 사용할 때는 두 테이블을 FROM절에 콤마(,)로 나열하고
조인 조건을 설정하지 않으면 됩니다.
ANSI로 작성하는 경우는 CROSS JOIN을 사용하고 ON과 USING을 사용하지 않아야 한다.
이렇게 쿼리를 작성하고 조회하면
12*5 = 60건의 결과가 조회됩니다.
중간생략~~
사실 일반적인 상황에서 이렇게 조회하지는 않습니다.
그냥 참고로 알고 있으면 되고 대용량 테이블에서 연습 삼아 돌리면 아마 멈출 겁니다. ㅎㅎ
잘못된 내용이나 수정이 필요하면 댓글 주세요.
아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.