Base/Database

[Database] INNER JOIN / OUTER JOIN 함수 사용법 및 차이(ORACLE & ANSI표준)

반응형

JOIN (INNER JOIN)

INNER JOIN은 테이블간에 매칭되는 것들로만 엮어서 검색한다. (교집합만 가져온다고 보면 된다.)

 

#일단 오라클 기준과 ANSI(SQL 공통 표준)를 나눠서 설명하겠습니다.

 

 

JOIN - ORACLE

각기 다른 두테이블을 하나로 엮어서 출력을 해주는 함수

 

equals join - 업무적인 연관성있는 컬럼 간에 조인 (이건 부모키가 외래키랑 연관이 있는 관계)

non equals join- 업무적인 연관성이 없는 조인(두 테이블 사이에 연관성이 없는 경우)

 

Oracle 기준 

SELECT

FROM   컬럼 /  별칭 , 컬럼 / 별칭

WHERE 이 부분에서 두 컬럼사이의 연관성이 있는 걸   equals 로 묶는다.

 

 

이런식으로 별칭(EMPLOYEE E, DEPARTMENT D)을 줘야 한다. 그래야 테이블의 모호성이 없다. 여기서 모호성이란 EMPLOYEE에 있는 컬럼인지 DEPARTMENT에 있는 컬럼인지 모르는 상황에서 컬럼을 쓸수 없다. 어떤 테이블에 있는건지 모르기 때문이다.

 

 

non equals join join - 업무적인 연관성이 없는 조인

 

SLEVEL에 따른 연봉 값 

 

이 두 테이블 사이에 연관 관계가 없다. 테이블을 붙이기 위해 FROM절에서 테이블을 넣고 조건절로 두 테이블을 이어준다. SALARY는 연봉인데 연봉에 따른 SLEVEL 을 붙여줬다.

 

 

JOIN -ANSI 표준구문(ANSI 표준은 모든 SQL에서 호환되는 SQL 이다.)

 

JOIN table2 ON (condition1) -    조건식을 만들수 있다. 관계를 가지고 있지 않은 테이블간의 조인(non equals join)

JOIN table2 USING (column1) -  부모의 기본키를 자식의 외래키를 이용하는게 using 이다. 관계를 가지고 있는 사이에 쓴다.(equals join)

 

 

 

 

 

 

 

 

아까도 언급했듯이 ANSI 표준에서 USING 과 ON을 쓸수 있는데

 

USING 은 서로가 부모키와 자식키로 연관이 있을 때 사용하고

ON은 서로 연관관계가 없을때 조건식을 사용해 JOIN 한다.

 

 

 

 

이렇게 보면 INNER JOIN은 테이블간에 서로 매칭이 되는 것들로만 엮어서 검색을 하기 때문에 NULL 값이 나오지 않는다. 한 테이블을 기준으로 그 테이블에 맞춰서 뒤에 테이블을 앞 테이블에 붙이는 형태이기 때문이다.


JOIN (OUTER JOIN)

OUTER JOIN은 테이블간에 매칭되는 것 이외에도 옵션에 따라 매칭이 되지 않는 부분들도 엮어서 검색한다.

(합집합이라고 보면 된다.)

 

OUTER JOIN은 LEFT / RIGHT / FULL 이 있다. 이건 방향이라고 생각하면 된다.

 

LEFT는 왼쪽 방향의 있는 테이블의 기준의 합집합

 

 

 

RIGHT는 오른쪽 방향에 있는 테이블 기준의 합집합

 

 

FULL은 두 테이블 기준의 합집합

이런식으로 생각하면 된다.

 

 

LEFT | RIGHT | FULL [OUTER]

OUTER는 조건에 만족되지 않는 누락되는 데이터 까지 결과 집합에 포함시킨다.

이 조건이 왼쪽에 있냐 오른쪽에 있냐 양쪽에 있냐를 찾는다.

 

 

 

JOIN - ORACLE

 

OUTER JOIN - 매칭 되지 않는 데이터도 엮어서 조회한다.

지금 현재는 ORACLE 기준이다.

 

 

ORACLE(RIGHT)

<ORACLE 조인 방법>

이렇게 매칭 되지 않는 것도 나온다. + 부분의 맞은편에 있는 애들이 출력된다.

이렇게 WHERE 절에서 두 컬럼사이를 묶어주고 (+)을 통해서 어떤 조인인지 정해준다. 

 

 

 

ORACLE (LEFT)

이건 (+)의 위치가 오른쪽에 있기 때문에 LEFT 조인이다.

 

 

ORACLE 형태에서 FULL 조인은 안된다. 

 

 

 

JOIN - ANSI

<ANSI OUTER 조인 방법>

SELECT

FROM

LEFT | RIGHT | FULL     JOIN  테이블    ON|USING (조건)

이런 구문을 가진다.

 

 

ANSI(RIGHT)

ANSI에서는 방향대로 가면 된다. RIGHT 일경우 오른쪽에 있는 EMPLOYEE 테이블을 기준으로

 

ANSI(LEFT)

LEFT에서는 왼쪽에 있는 테이블 기준이여서 DEPARTMENT 기준으로 한다.

 

<ANSI 표준 조인>

 

 

 

 

 

ANSI 형태의 조인에서는 FULL 조인도 가능하다.

반응형