SQL

[SQL] 조인(JOIN)- ANSI 조인

전감자(◔◡◔) 2022. 9. 18. 23:19

ANSI 조인

ANSI 조인은 오라클 DBMS가 아닌 환경에서도 사용 가능한 표준화된 조인을 의미한다.

 

 

오라클 조인과의 가장 큰 차이점은 조인 조건을 where 절에 명시하지 않고 다른 방법을 통하여 기술하며,

검색 조건을 지정하는 경우에 where절을 사용한다.

따라서 조인 조건과 검색 조건을 분리하여 지정하기 때문에 가독성이 향상된다.

 

 

1. Natural 조인

 

Natural 조인은 오라클 조인의 Equi 조인과 기능이 동일하다.

즉, 같은 이름을 가진 컬럼에 기반하여 동작이 된다. 따라서 조인에 참여하는 테이블에는 방드시 한 개의 공통 컬럼이 있어야 되며,

만약 두 개 이상의 공통 컬럼이 있다면 오류는 아니지만 엉뚱한 실행결과가 출력된다.

 

기본 문법

 

select 테이블1.컬럼, 테이블2.컬럼

from 테이블1. natural join 테이블2

[where 검색조건] * 생략가능

 

 

오라클은 테이블의 공통 컬럼을 자동으로 찾아서 조인을 실행한다.

단, 앞서 말한 것 처럼 공통컬럼이 2개 이상인 경우에는 주의해야한다.

 

또한 natural 조인은 공통 컬럼을 자동으로 인지하기 때문에 equi 조인과는 달리 select 문의 공통컬럼에 별칭을 사용해서는 안된다.

 

ex) 틀린 예시

select last_name, department_name,e.department_id

from employees e natural join departments d;

 

 

※ natural 조인 주의할 점

  1. 공통 컬럼이 2개 이상일 때는 두 개의 컬럼이 모두 만족하는 데이터가 출력됨
  2. equi 조인과는 달리 select 문의 공통컬럼에 별칭을 사용해서는 안된다.

 

2. Cross 조인

 

cross 조인은 조인할 때 일치하는 데이터만 반환하지 않고 조인하는 각 테이블의 행 개수를 서로 곱한 결과가 반환된다.

오라클 조인의 Cartesian Produdct 와 동일하게 동작되며 데이터로서의 가치는 없다.

 

 

select last_name, department_name,e.department_id

from employees e cross join departments d;

 

위 예시는 사원 테이블과 부서 테이블의 행 개수를 곱한 개수의 행이 반환된다.

natural 조인과는 다르게 공통 컬럼을 사용할 때는 반드시 별칭을 지정해야한다.

 

3. Using (컬럼) 절

 

Natural 조인 사용시 만약 두 개 이상의 공통 컬럼이 있다면 오류는 아니지만 엉뚱한 실행 결과가 출력된다.

이러한 경우에는 using 절을 사용하여 명시적으로 어떤 컬럼으로 조인할 지를 지정할 수 있다.

Natural 조인과 동일하게 공통 컬럼에는 별칭을 사용할 수 없다.

 

기본 문법

 

select 테이블1.컬럼, 테이블2. 컬럼

from 테이블1

join 테이블2 using (공통컬럼)

[where 검색 조건];

 

 

 

4. On 절

 

Natural 조인이나 Using 절은 조인할 때 내부적으로 공통 컬럼 값이 반드시 일치하는 Equi 조인 형식으로 실행된다.

만약 Non- Equi 조인이나 임의의 조건으로 조인할 경우에는 On 절을 사용해야 한다.

공통컬럼에 별칭이 사용가능하다.

 

기본 문법

 

select 테이블1.컬럼, 테이블2. 컬럼

from 테이블1

join 테이블2

on 조인조건

[where 검색 조건];

 

ex)

select last_name, department_name,e.department_id

from employees e

join departments d

on e.department_id = d. department_id

and e.department_id =90;

 

on 절에 다음과 같이 조인 조건 및 검색 조건을 같이 사용해도 문법적으로 문제가 없고 실행결과도 동일하다.

하지만 가독성 및 기능성을 위하여 조인조건은 on 절에서 설정하고, 검색 조건은 where 절을 사용할 것을 권장한다.

 

 

5. LEFT OUTER | RIGHT OUTER | FULL OUTER 조인

 

오라클 조인에서는 Outer 조인을 사용할 때 (+) 연산자를 이용하고 반드시 한 쪽 테이블에서만 사용 할 수 있었다.

ANSI 조인에서의 Outer 조인은 (+) 연산자 대신에 LEFT | RIGHT | FULL 키워드를 이용하며 한 쪽 테이블 또는 양쪽 테이블

지정이 모두 가능하다.

 

 

기본 문법

 

select 테이블1.컬럼, 테이블2. 컬럼

from 테이블1

LEFT | RIGHT | FULL OUTER join 테이블2

on 조인조건 | using (컬럼)

[where 검색 조건];

 

LEFT OUTER : left 로 지정된 테이블1의 데이터를 조인조건 일치 여부와 상관 없이 모두 출력

RIGHT OUTER : right 로 지정된 테이블2의 데이터를 조인조건 일치 여부와 상관 없이 모두 출력

FULL OUTER : 조인조건 일치 여부와 상관 없이 모두 출력 , left 조인과 right 조인의 결과를 합친 결과