> STANDARD SQL
- 현재 우리가 사용하는 많은 시스템의 두뇌 역할을 하는 관계형 데이터베이스를 유일하게 접속할 수 있는 언어가 바로 SQL이다
- 향후 SQL에서 ORDBMS 등 필요한 기능을 정리하고 호환 가능한 여러 기준을 제정한 것이 1999년에 정해진 ANSI/ISO-SQL3이다. 이후 가장 먼저 ANSI/ISO-SQL3의 기능을 시현한 것이 ORACLE의 8i/9i 버전이라고 할 수 있다.
- 현재 사용되는 데이터베이스는 대부분 SQL 2003을 기준으로 하고 있다.
> FROM절 JOIN 형태
- ANSI/ISO SQL에서 규정한 JOIN 문법은 WHERE 절의 검색 조건과 테이블간의 JOIN 조건을 구분 없이 사용하던 기존 방식을 그대로 사용할 수 있으면서, 추가된 선택 기능으로 테이블 간의 JOIN 조건을 FROM 절에서 명시적으로 정의할 수 있게 되었다.
- INNER JOIN, NATURAL JOIN, ON 조건절, CROSS JOIN, OUTER JOIN
- INNER JOIN은 WHERE절에서부터 사용하던 JOIN의 DEFAULT 옵션으로 JOIN 조건에서 동일한 값이 있는 행만 반환한다. DEFAULT 옵션이므로 생략이 가능하지만, CROSS JOIN, OUTER JOIN과는 같이 사용할 수 없다.
- NATURAL JOIN은 INNER JOIN의 하위 개념이므로 NATURAL INNER JOIN이라고 표시할 수 있다.
- 새로운 SQL JOIN 문장 중에서 가장 중요하게 기억해야 하는 문장은 ON 조건절을 사용하는 경우이다. 과거 WHERE 절에서 JOIN 조건과 데이터 검증 조건이 같이 사용되어 용도가 불분명한 경우가 발생할 수 있었는데, WHERE 절의 JOIN 조건을 FROM절의 ON 조건절로 분리하여 표시함으로써 사용자가 이해하기 쉽도록 한다.
- ON 조건절의 경우 NATURAL JOIN 처럼 JOIN 조건이 숨어있지 않고 명시적으로 JOIN 조건을 구분할 수 있고, NATURAL JOIN이나 USING 조건절처럼 칼럼명이 똑같아야 된다는 제약 없이 칼럼명이 상호 다르더라도 JOIN 조건으로 사용할 수 있으므로 앞으로 가장 많이 사용될 것으로 예상된다. 다만, FROM 절에 테이블이 많이 사용될 경우 다소 복잡하게 보여 가독성이 떨어지는 단점이 있다.
> INNER JOIN
- INNER JOIN은 JOIN 조건에서 동일한 값이 있는 행만 반환된다.
- INNER JOIN 표시는 그 동안 WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.
> NATURAL JOIN
- NATURAL JOIN은 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EUQI JOIN을 수행한다.
- NATURAL JOIN이 명시되었으면, 추가로 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없다.
- 별도의 JOIN 칼럼을 지정하지 않았지만, 두 개의 테이블에서 DEPTNO라는 공통된 칼럼을 자동으로 인식하여 JOIN을 처리한 것이다. JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 하며, ALIAS나 테이블 명과 같은 접두사를 붙일 수 없다.
> USING 조건절
- NATURAL JOIN에서는 모든 일치되는 칼럼들에 대해 JOIN이 이루어지지만 FROM절의 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다.
- USING 조건절을 이용한 EQUI JOIN에서도 NATURAL JOIN과 마찬가지로 JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 하며, ALIAS나 테이블 명과 같은 접두사를 붙일 수 없다.
> ON 조건절
- ON 조건절과 WHERE 조건절을 분리하여 이해가 쉬우며, 칼럼명이 다르더라도 JOIN 조건을 사용할 수 있는 장점이 있다.
- 임의의 JOIN 조건을 지정하거나, 이름이 다른 칼럼명을 JOIN 조건으로 사용하거나, JOIN 칼럼을 명시하기 위해서는 ON 조건절을 사용한다.
- ON 조건절과 WHERE 검색 조건은 충돌 없이 사용할 수 있다.
> CROSS JOIN
- CROSS JOIN은 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다.
- CARRESIAN PRODUCT 또는 CROSS PRODUCT와 같은 표현으로 결과는 양쪽 집합의 M*N건의 데이터 조합이 발생한다.
> OUTER JOIN
- STANDARD JOIN을 사용함으로써 OUTER JOIN의 많은 문제점을 해결할 수 있고, 대부분의 관계형 DBMS 간에 호환성을 확보할 수 있으므로 명시적인 OUTER JOIN을 사용할 것을 적극적으로 권장한다.
- OUTER 조건 역시 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수적으로 사용해야한다.
- SQL의 성능 저하의 원인이 될 수 있으므로 필요한 경우만 OUTER 조인을 사용해야한다.
> LEFT OUTER JOIN
- 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 모두 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어온다.
- 우측 테이블의 JOIN 칼럼에서 조인 조건값이 없는 경우에는 우측 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다.
- LEFT JOIN으로 사용할 수 있다.
> RIGHT OUTER JOIN
- 조인 수행시 나중 표기된 우측 테이블에 해당하는 데이터를 모두 읽은 후 먼저 표기된 좌측 테이블에서 JOIN 대상 데이터를 읽어 온다.
- 좌측 테이블의 JOIN 칼럼에서 조인 조건 값이 없는 경우에는 좌측 테이블에서 가져오는 칼럼들은 NULL값으로 채운다.
- RIGHT JOIN으로 사용할 수 있다.
> FULL OUTER JOIN
- 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성한다.
- 단 UNION ALL이 아닌 UNION 기능과 같으므로 중복되는 데이터는 삭제한다.
- FULL JOIN으로 사용할 수 있다.
출처 : 한국데이터산업진흥원 게시자료