본문 바로가기
데이터베이스/MYSQL

[MYSQL] 우유와 요거트가 담긴 장바구니

by 썬키 2023. 1. 8.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

링크를 클릭하면 해당 문제로 이동합니다.

 

출처 - 프로그래머스

1. 접근하기

문제를 보자마자 SELF JOIN을 이용해서 풀어봐야겠다 라는 생각이 들었다.

우유가 든 장바구니 테이블과 요거트가 든 장바구니 테이블을 JOIN해서 둘의 CART_ID는 같다 라는 조건을 주면 되겠다.

 

2. 풀이

SELECT DISTINCT A.CART_ID
FROM CART_PRODUCTS A, ( SELECT CART_ID
                        FROM CART_PRODUCTS
                        WHERE NAME = 'Yogurt') B
WHERE A.CART_ID = B.CART_ID
    AND A.NAME = 'Milk'
ORDER BY 1;

프로그래머스에서 SQL문제를 풀 때, SELF JOIN을 이용해본적은 이번 문제가 처음이라

SELF JOIN 사용법에 대한 기억이 가물가물 했는데 막상 쿼리를 짜보니 원하던 결과가 출력 되었다.

 

근데 쿼리를 다 작성하고보니 꼭 SELF JOIN만이 답은 아니었던거 같아서

GROUP BY와 WHERE 절의 서브쿼리를 이용해서 한번 더 풀어 보았다.

SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk', CART_ID IN (SELECT CART_ID
                                 FROM CART_PRODUCTS
                                 WHERE NAME = 'Yogurt')
GROUP BY CART_ID
ORDER BY 1;

이렇게 쿼리를 작성해도 원하던 결과가 잘 나오는 것을 확인할 수 있다.

둘 중 어떤게 더 효율적인 쿼리인지는 솔직히 잘 모르겠다.

데이터가 몇 십만개라고 가정한다면, 조인보다는 서브쿼리를 사용한 아래의 쿼리가 더 효율적이지 않을까?

라고 감히 예상해본다,,,

 

 

 

댓글