JOIN의 또 다른 방법

Jiyeong Kim·2025년 3월 10일

MySQL

목록 보기
2/4

상품을 구매한 회원 비율 구하기 문제

다른 사람의 답을 보는데 'JOIN'이 보이지 않는 코드가 있었다.
그 대신 From 절에 다음과 같이 여러개의 테이블이 선택되어있었다.

FROM USER_INFO A, ONLINE_SALE B, (SELECT COUNT(*) CNT
                                      FROM USER_INFO 
                                     WHERE YEAR(JOINED) = 2021) C

테이블을 JOIN없이 그냥 나열할 경우 모든 컬럼이 조합되는 데카르트 곱이 발생한다.

그럼 JOIN은 어디에 있을까?

Where절에 있었다.

WHERE 1=1
   AND A.USER_ID = B.USER_ID
   .
   .

+추가로 C는 서브쿼리의 결과이므로, 단일 행(single row) 결과를 갖게 됨 → 모든 행과 자연스럽게 결합됨






WHERE 절에서 JOIN 사용하는 법

SELECT YEAR(B.SALES_DATE) YEAR, 
       MONTH(B.SALES_DATE) MONTH, 
       COUNT(DISTINCT(B.USER_ID)) PURCHASED_USERS, 
       ROUND(COUNT(DISTINCT(B.USER_ID))/C.CNT, 1) PUCHASED_RATIO
  FROM USER_INFO A, ONLINE_SALE B, (SELECT COUNT(*) CNT
                                      FROM USER_INFO 
                                     WHERE YEAR(JOINED) = 2021) C
 WHERE 1=1
   AND A.USER_ID = B.USER_ID
   AND YEAR(A.JOINED) = 2021
GROUP BY YEAR(B.SALES_DATE) , MONTH(B.SALES_DATE)
ORDER BY YEAR(B.SALES_DATE) , MONTH(B.SALES_DATE)
;
  • FROM 절: 결합에 필요한 테이블 두개, +새컬럼 생성시 계산에 필요한 전체 가입회원수를 구하는 서브쿼리를 넣음(단일 행이므로 문제발생 x)

  • WHERE 절 : JOIN해야하는 컬럼을 '='으로 연결 + 필요한 조건 삽입





의외로 조인을 사용하는 것보다 간단해 보인다!
나중에 스스로 써봐야지...

profile
해봅시다

0개의 댓글