개키우는개발자 : )

PostgreSQL NATURAL 조인 본문

PostgreSQL/조인과 집계 데이터

PostgreSQL NATURAL 조인

DOGvelopers 2019. 11. 5. 20:53
반응형

실습 테이블 만들기 https://dog-developers.tistory.com/140

NATURAL 조인 이란?

두개의 테이블에서 같은 이름을 가진 컬럼 간의 INNER 조인 집합 결과를 출력한다.

SQL문을 보다 짧게 작성할 수 있다.

참고: 실무에선 잘 사용하지 않습니다. 하지만 NATURAL JOIN과 INNER JOIN의 차이로 인해 INNER JOIN을 더 깊게 이해할 수 있습니다.

 

실습

 

- PRODUCTS 테이블과 CATEGORIES 테이블을 NATURAL 조인 한다.

 

CATEGORY_ID 를 동일하게 가지고있는 컬럼을 기준으로 INNER 조인 한다.

SELECT
	*
FROM
	PRODUCTS A NATURAL
JOIN CATEGORIES B;

장점 - 자동으로 매칭해 코드가 간결해지며 편함.

단점 - 실수로 인해 안정성이 매우 떨어질 수 있음.

실습1

같은 결과를 조회하는 다른 문법

SELECT
	A.CATEGORY_ID,
	A.PRODUCT_ID,
	A.PRODUCT_NAME,
	B.CATEGORY_NAME
FROM
	PRODUCTS A
INNER JOIN CATEGORIES B ON
	A.CATEGORY_ID = B.CATEGORY_ID

실습2

같은 결과를 조회하는 다른 문법

SELECT
	A.CATEGORY_ID,
	A.PRODUCT_ID,
	A.PRODUCT_NAME,
	B.CATEGORY_NAME
FROM
	PRODUCTS A,
	CATEGORIES B
WHERE
	A.CATEGORY_ID = B.CATEGORY_ID

실습3

 

 

- 비슷한 테이블 조건의 실습

table erd

 

- CITY 테이블과 COUNTRY 테이블을 NATURAL 조인 하세요

SELECT
	*
FROM
	CITY A NATURAL
JOIN COUNTRY B

분명 country_id 라는 같은 컬럼을 가지고 있는데 결과는 위의 실습과 다르게 아무것도 조회되지 않습니다.

그 이유는 밑의 조회에서 확인 해봅니다.

실습4

 

CITY 테이블과 COUNTRY 테이블 모두 last_update 라는 컬럼을 가지고 있습니다.

NATURAL JOIN은 동일한 컬럼의 데이터도 같아야 합니다. last_update는 timestamp 타입으로 시간을 저장하는 컬럼인데 시간은 동일할 확률이 정말정말 적기때문에 NATURAL JOIN이 적용되지 않습니다. 이럴경우엔 INNER JOIN을 활용하여 country_id 로만 join을 해줍니다. 

SELECT * FROM CITY;

실습5

SELECT * FROM COUNTRY;

실습6

 

- INNER 조인을 활용하여 coutry_id를 기준으로 조인하세요

SELECT
	*
FROM
	CITY A
INNER JOIN COUNTRY B ON
	(A.COUNTRY_ID = B.COUNTRY_ID)

실습7

위와 같은 상황때문에 잘 INNER 조인을 사용합니다.

반응형

'PostgreSQL > 조인과 집계 데이터' 카테고리의 다른 글

PostgreSQL HAVING 절  (0) 2019.11.05
PostgreSQL GROUP BY 절  (0) 2019.11.05
PostgreSQL CROSS 조인  (0) 2019.11.03
PostgreSQL FULL OUTER 조인  (0) 2019.11.03
PostgreSQL SELF 조인  (6) 2019.11.03
Comments