데이터베이스/MYSQL
[MYSQL] 우유와 요거트가 담긴 장바구니
썬키
2023. 1. 8. 17:06
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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;
이렇게 쿼리를 작성해도 원하던 결과가 잘 나오는 것을 확인할 수 있다.
둘 중 어떤게 더 효율적인 쿼리인지는 솔직히 잘 모르겠다.
데이터가 몇 십만개라고 가정한다면, 조인보다는 서브쿼리를 사용한 아래의 쿼리가 더 효율적이지 않을까?
라고 감히 예상해본다,,,