Overview

실무에서 SQL을 작성할 때 8할이 JOIN 쿼리라고 한다. (라고 한댄다…)

JOIN

서로 다른 두 개의 집단을 합할 때 사용한다.

EQUI JOIN

Equal(=) 조건으로 JOIN하는 것으로, 가장 흔히 볼 수 있는 JOIN의 방식이다.

SELECT A.PRODUCT_CODE,
			 A.PRODUCT_NAME,
			 B.MEMBER_ID,
			 B.CONTENT,
			 B.REG_DATE
	FROM PRODUCT A,
			 PRODUCT_REVIEW B
 WHERE A.PRODUCT_CODE = B.PRODUCT_CODE
	 AND A.PRODUCT_CODE = '100001';
# 출력값 : PRODUCT와 PRODUCT_REVIEW의 CODE가 일치하고 그 값이 100001인 데이터를 추출

NON EQUI JOIN

Equal(=) 조건이 아닌 다른 조건(BETWEEN, >, >=, <, <=)으로 JOIN하는 방식이다.

SELECT A.EVENT_NAME,
			 B.MEMBER_ID,
			 B.CONTENT,
			 B.REG_DATE
	FROM EVENT A,
			 PRODUCT_REVIEW B
 WHERE B.REG_DATE BETWEEN A.START_DATE AND A.END_DATE;
# 출력값 : PRODUCT_REVIEW의 REG_DATE 값이 EVENT의 START_DATE와 END_DATE 사이의 값에 해당하는 데이터를 추출

3개 이상 TABEL JOIN

방식은 동일하다.

SELECT A.PRODUCT_NAME,
			 B.MEMBER_ID,
			 B.CONTENT,
			 C.EVENT_NAME
	FROM PRODUCT A,
			 PRODUCT_REVIEW B,
			 EVENT C
 WHERE A.PRODUCT_CODE = B.PRODUCT_CODE # EQUI JOIN
	 AND B.REG_DATE BETWEEN C.START_DATE AND C.END_DATE; # NON EQUI JOIN

OUTER JOIN

image.png

SELECT A.PRODUCT_CODE,
			 A.PRODUCT_NAME,
			 B.MEMBER_ID,
			 B.CONTENT,
			 B.REG_DATE
	FROM PRODUCT A,
			 PRODUCT_REVIEW B,
 WHERE A.PRODUCT_CODE = B.PRODUCT_CODE(+);

STANDARD JOIN

RDBMS마다 SQL문법 차이가 존재한다. 이를 해결하기 위해 표준이 되는 ANSI SQL을 지정하게 되었다. 즉, Oracle에서도 돌아가고 MySQL에서도 돌아가는 JOIN 쿼리이다.