728x90
프로그래머스 : 우유와 요거트가 담긴 장바구니
https://programmers.co.kr/learn/courses/30/lessons/62284
🎨 문제
데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
총 세가지 방법으로 문제를 해결할 수 있었다.
🎨 코드(1) - MILK 테이블
SELECT A.CART_ID
FROM
(SELECT CART_ID FROM CART_PRODUCTS WHERE NAME = 'MilK') AS A JOIN
(SELECT CART_ID FROM CART_PRODUCTS WHERE NAME = 'Yogurt') AS B
WHERE A.CART_ID = B.CART_ID
ORDER BY CART_ID
Milk가 존재하는 테이블과 Yogurt가 존재하는 테이블을 CART_PRODUCTS에서 뽑아낸 후 JOIN하여 CART_ID가 같은 교집합 부분만 조회한다.
🎨 코드(2)
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt' AND CART_ID IN(
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'Milk'
)
ORDER BY CART_ID
서브 쿼리문을 사용하여 구하였다.
WHERE 조건에 서브 쿼리에서 Milk가 존재하는 CART_ID 칼럼을 구하여 조건에 만족하는 경우를 출력할 수 있다.
🎨 코드(3)
SELECT A.CART_ID
FROM CART_PRODUCTS AS A JOIN CART_PRODUCTS AS B
ON A.CART_ID = B.CART_ID
WHERE A.NAME = 'Milk' AND B.NAME = 'Yogurt'
ORDER BY A.CART_ID
(1)번 방법과 비슷하다.
FROM에서 같은 테이블 두개를 JOIN한 후 A에서는 Milk만 B에서는 Yogurt만 존재하는 테이블을 구하여 같은 부분만 출력할 수 있다.
정리
세 개의 코드 모두 테이블 두 개를 사용하거나 서브 쿼리문을 사용하는 문제이다.
셀프 조인으로 Milk나 Yogurt가 존재하는 칼럼을 찾아서 조회하거나
서브쿼리문을 사용하여 문제를 해결할 수 있다.
728x90
댓글