NATURAL JOIN

Suhyeon Lee·2024년 10월 23일
0

자기주도학습

목록 보기
31/83

Natural Join(자연 조인)이란?

  • 두 테이블 간의 동일한 이름을 갖는 모든 컬럼들에 대해 등가 조인(EQUI JOIN)을 수행
    • 등가 조인: join의 결과가 특정 조건값과 '일치'할 때
      cf. non-equi join(비등가 조인): join의 결과가 특정 조건 범위 내에 존재할 때 → ON ☆ BETWEEN ♤ AND ♡
  • 두 테이블에서 같은 이름의 컬럼을 찾아서 자동으로 그것들의 조인 조건을 설정하고, INNER JOIN을 해주는 조인
    • 조인 조건을 자동으로 설정해주기 때문에 ON 절을 쓸 필요가 없음

사실 두 테이블에 같은 이름의 컬럼이 있더라도 NATURAL JOIN을 쓰기보다는 우리가 배운 조인을 쓰고 ON 절에 조인 조건을 명시해주는 것이 좋습니다. NATURAL JOIN을 해버리면 SQL 문을 보더라도, 테이블 구조를 모르는 사람이라면 어떤 컬럼들을 기준으로 조인이 될지 알 수 없으니까요.

예시

  • 두 테이블을 INNER JOIN

  • 두 테이블을 NATURAL JOIN

    • INNER JOIN이라고 쓴 부분을 NATURAL JOIN으로 바꾸었고, 조인 조건을 나타내는 ON 절을 아예 삭제했는데 정상 작동합

Natural Join 과정

  • 다음과 같은 relation r과 s가 있을 때 natural join의 과정은 아래와 같음
    1단계:

    2단계:

    3단계:

    4단계(결과):

Natural Join과 Inner Join의 비교

  • 두 테이블이 갖는 공통 컬럼에 대해 Inner Join은 별개의 컬럼으로, Natural Join은 하나의 컬럼으로 나타냄
    Inner Join:

    Natural Join:

USING 조건절

  • NATURAL JOIN에서는 같은 이름을 가진 모든 칼럼들에 대해서 JOIN이 이루어지지만, USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서, 특정 칼럼에 대해서만 선택적으로 EQUI JOIN 실행

예제

  • t_dept 테이블과 dept_temp 테이블이 있을 때, 두 테이블은 서로 이름이 같은 컬럼이 3개가 있다. using 조건절을 이용해서 'DEPTNO' 컬럼에 대해서만 [INNER] JOIN을 수행해보자.
SELECT
  *
FROM
  t_dept
  JOIN dept_temp
  USING(DEPTNO)
;

  • 별도의 컬럼 순서를 지정하지 않으면, USING 조건절의 기준이 되는 컬럼이 맨 앞에 하나의 컬럼으로 나타난다.

주의사항

  • USING 조건절을 이용한 EQUI JOIN에서도 NATURAL JOIN과 마찬가지로 JOIN 칼럼에 대해서는 별칭(ALIAS)이나 테이블 이름과 같은 접두사를 붙일 수 없다.
# 잘못된 예
SELECT
  t_dept.deptno # 이렇게 쓰면 안 된다고 함
  , t_dept.dname
  , t_dept.loc
  , dept_temp.dname
  , dept_temp.loc
FROM
  t_dept
  JOIN dept_temp
  USING(deptno)
;

# 바른 예
SELECT
  deptno
  , t_dept.dname
  , t_dept.loc
  , dept_temp.dname
  , dept_temp.loc
FROM
  t_dept
  JOIN dept_temp
  USING(deptno)
;
profile
2 B R 0 2 B

0개의 댓글

관련 채용 정보