문과생의 우당탕탕 공부 기록

07. NATURAL JOIN) 왜 실무에서는 잘 안쓸까? 본문

SQL 공부/조인과 집계 데이터

07. NATURAL JOIN) 왜 실무에서는 잘 안쓸까?

드르렁쿨쿨 2023. 1. 14. 19:38
 NATURAL JOIN의 의미

- 두 개의 테이블에서 같은 이름을 가진 컬럼 간의 INNER JOIN집합 결과를 출력. SQL 문 자체가 간소해짐 (BUT 실무에서는 잘 안씀)

 

마찬가지로 테이블을 만들어서 연습해보자

CATEGORIES와 PRODUCTS라는 이름을 가진 테이블을 만들고

각각에 맞는 조건들을 정리해준다.

 

각각 테이블에 VALUES를 넣어준다.

CATEGORY_ID와 PRODUCT_ID는 각각 SERIAL 을 매길 수 있도록 PRIMARY KEY로 지정해준다.

 

테이블이 잘 만들어졌는지 확인해보자

잘 만들어졌다.

여기서 PRODUCTS와 CATEGORIES를 내추럴 조인하면, CATEGORY_ID가 동일하기 때문에 동일한 것들이 INNER JOIN으로 나온다.

그렇지만. 실무에서는 NATURAL JOIN을 잘 안쓴다.

이유를 알아보자

 

 

NATURAL JOIN을 실무에서 안쓰는 이유

사용자가 의도한 SQL문과는 다른 결과값이 나올 수 있다. (결과값이 아예 안 나올 수도 있다.)

NATURAL JOIN으로 결과값이 안나온 경우

* 전체를 SELECT 뽑고

CITY로부터, NATURAL JOIN하여 COUNTRY와 일치하는 것 뽑아라 이건데 아무 결과값이 안나왔다.

이유를 알기위해

테이블 하나하나 확인해보자.

 

 CITY 테이블 먼저

CITY TABLE은 CITY_ID / CITY / COUNTRY_ID / LAST_UPDATE로 구성되어있고

COUNTRY TABLE은 COUNTRY_ID / COUNTRY / LAST_UPDATE 로 구성되었다 

 

두 테이블 간의 동일한 이름으로 존재하는 컬럼이 COUNTRY_ID와 LAST_UPDATE이다.

 

이런 경우 NATURAL JOIN 시에는 LAST_UPDATE 컬럼까지 INNER JOIN에 성공해야만 결과값이 나온다.

(= LAST_UPDATE의 정확한 시간까지 다 같아야하는데, 이게 사실상 힘듦 분/초단위까지 있으니까)

 

그래서 결과값이 아무것도 안나오는 상황이 발생한다.

 

이런 경우 (아래 사진처럼)  INNER JOIN으로 각각의 COUNTRY_ID를 엮어주는 조건만 얹으면 원하는 결과값이 나온다.

그래서 이러한 이유로 NATURAL JOIN은 실무에서 잘 쓰이지 않는다.

 

INNER JOIN 연습하기..!!

Comments