| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- ROLLUP함수
- SQL자격증
- SQL
- SQL D 자격증
- PostgreSQL
- DEBEAVER
- group by
- 코딩독학
- 마케터SQL
- 문과코딩
- 문과 코딩독학
- DBeaver
- 문과SQL
- 마케터코딩
- 마케팅코딩
- inner join
- sql독학
- SQL 분석함수
- SQL COUNT함수
- MySQL
- SQL독학으로 자격증
- SQL D
- SQL혼자서
- outer join
- sql함수
- SQL D자격증
- 조인
- SQL문과생
- SQL D 독학
- join
- Today
- Total
문과생의 우당탕탕 공부 기록
07. NATURAL JOIN) 왜 실무에서는 잘 안쓸까? 본문
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문과는 다른 결과값이 나올 수 있다. (결과값이 아예 안 나올 수도 있다.)

* 전체를 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 연습하기..!!
'SQL 공부 > 조인과 집계 데이터' 카테고리의 다른 글
| 09. HAVING 절) HAVING절의 실행 순서는 어떻게될까? (0) | 2023.01.15 |
|---|---|
| 08. GROUP BY 절) 언제, 어떻게, 왜 사용될까? (0) | 2023.01.15 |
| 06. CROSS JOIN) CATESIAN PRODUCT연산과 크로스조인 (0) | 2023.01.14 |
| 05. FULL OUTER 조인) 풀 아우터조인으로 RIGHT ONLY만 하는법 (0) | 2023.01.13 |
| 04. SELF 조인) EMPLOYEE테이블로 SELF JOIN이해하기, ||연산자 (0) | 2023.01.12 |