[SQL] FROM절 JOIN 형태

2022. 3. 29. 21:33TIL💡/Database

ANSI/ISO SQL JOIN 설명

ANSI/ISO SQL에서 규정한 조인 문법은 WHERE 절에 조인 조건을 기술하는 전통적인 방식의 조인 문법과 차이가 있다.

사용자는 기존 WHERE 절의 검색 조건과 테이블 간의 조인 조건을 구분 없이 사용하던 방식으로 그대로 사용할 수 있으며,

추가된 선택 기능으로 테이블 간의 조인 조건을 FROM 절에서 명시적으로 정의할 수 있게 되었다.

 

가장 두드러지는 특징은 ON 조건절을 통해 JOIN 조건과 데이터 제한 조건을 분리해 기술하는 것이다.

전통적인 방식의 JOIN 문법에서는 WHERE 절에 JOIN 조건을 FROM 절의 ON 조건절로 분리해 표시함으로써 사용자가 이해하기 쉽도록 한다.

 

ON 조건절의 경우 NATURAL JOIN처럼 JOIN 조건이 숨어 있지 않고, 명시적으로 JOIN 조건을 구분할 수 있다.

또한 NATURAL JOIN이나 USING 조건절처럼 칼럼명이 똑같아야 된다는 칼럼명이 상호 다르더라도 JOIN 조건으로 사용할 수 있으므로 다양한 요구 사항에 대해 유연하게 사용할 수 있다.

다만 FROM 절에 테이블이 많이 사용될 경우 다소 복잡하게 보여 가독성이 떨어지는 단점이 있다.

 

SQL Server의 경우 ON 조건절만 지원하고 NATURAL JOIN과 USING 조건절을 지원하지 않고 있다.

즉 칼럼명이 똑같으면 JOIN 되는 것이 지원되지 않는다.

 

INNER JOIN

- 조인의 DEFAULT 옵션으로 조인 조건을 만족하는 행들만 반환한다.

- 생략이 가능하나, CROSS JOIN과 OUTER JOIN과는 같이 사용할 수 없다.

 

NATURAL JOIN

- INNER JOIN의 하위 개념으로 볼 수 있다.

- 두 테이블 간에 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN을 수행한다.

- SQL Server에서는 지원되지 않는 기능이다.

 

USING 조건절

- 같은 이름을 가진 모든 칼럼들에 대해 조인이 이루어지지만, FROM 절의 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다.

- SQL Server에서는 지원되지 않는 기능이다.

 

ON 조건절

- 조인 서술부(ON 조건절)와 비조인서술부(WHERE 조건절)을 분리해 이해가 쉽다.

- 칼럼명이 다르더라도 조인 조건을 사용할 수 있는 장점이 있다.

- ON 조건절에 JOIN 조건 외에도 데이터 검색 조건을 추가할 수는 있으나, 검색 조건 목적인 경우는 WHERE절을 사용할 것에 권고한다.

(다만 OUTER JOIN에서 조인의 대상을 제한하기 위한 목적으로 사용되는 추가 조건의 경우는 ON 절에 표기돼야 한다.)

CROSS JOIN

- 연산자의 PRODUCT의 개념으로 테이블 간 조인 조건이 없는 경우 생길 수 있는 모든 데이터의 조합

 

OUTER JOIN

LEFT OUTER JOIN

- 조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 조인 대상 데이터를 읽어 온다.

- 조인 조건을 만족하는 값이 없는 경우에는 우측 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다.

 

RIGHT OUTER JOIN

- LEFT OUTER JOIN의 방향을 바꾼다.

 

FULL OUTER JOIN

- 조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 조인해 결과를 생성한다.