동일한 기능을 하는 쿼리를 작성하더라도, Oracle이나 ANSI 기반에 따라 쿼리구성방향이 달라진다.
그 중 join의 경우 두 쿼리의 구성에서 차이가 나는데, 특히 Oracle의 경우 INNER JOIN이나 OUTER JOIN의 키워드를 사용하지 않고도 WHERE 조건절이나 (+) 기호 등을 통해 더 짧은 쿼리를 구성할 수 있는 것이 특징이다.
Oracle join도 ASNI와 마찬가지로 INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN이 있다.
다만 (+) 기호를 사용할 수 있다는 점이 큰 특징인데, 조금 헷갈릴 수 있는 부분에 대해 개념을 명확히 짚고 넘어가는 것이 중요하다.
기본적으로 (+) 기호는 OUTER JOIN을 한다는 의미이고, 아래와 같이 기존 WHERE 조건에서 (+) join 조건을 추가하면 OUTER JOIN을 할 수 있다.
SELECT A.COLUMN_A, B.COLUMN_A
FROM TALBE_A A
,TABLE_B B
WHERE A.COLUMN_B = B.COLUMN_B(+)
즉, 기준이 되는 테이블과 연결하려는 테이블이 있을때 연결 테이블의 데이터가 NULL이 있다면 INNER JOIN이 아닌 OUTER JOIN을 통해 연결해야 원하는 구상의 테이블을 출력할 수 있다.
참고로 INNER JOIN을 했는데 연결한 테이블에서 NULL이 있을 경우, 해당 쿼리는 결과를 출력하지 않는다.
기본적으로 (+) 기호를 붙이지 않는다면 INNER JOIN이고, 통상적인 WHERE 조건절을 추가한 구문을 통해 INNER JOIN을 구현할 수 있다.
SELECT A.COLUMN_A, B.COLUMN_A
FROM TALBE_A A
,TABLE_B B
WHERE A.COLUMN_B = B.COLUMN_B
다만, INNER JOIN은 연결하는 COLUMN과, 출력하고자 하는 COLUMN의 data가 존재 즉 NULL이 아니어야 한다.
참고로 INNER JOIN을 하였는데 데이터가 보이지 않는다면, 조건절에 (+)기호를 추가하여 OUTER JOIN을 한다면 안보였던 데이터가 보여질 수도 있다.
Oracle 구문을 통한 join(+기호) - https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rbrb2123&logNo=220802345837