DB/SQL

[SQL]프로그래머스 - 우유와 요거트가 담긴 장바구니

journey-dev 2023. 6. 8. 11:21

✅ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/62284

 

 

 풀이

[나의 풀이] SubQuery - 인라인뷰 방식(from절에 서브쿼리 사용)
1. NAME이 yogurt인 것만 조회한 테이블(Y)을 만든다.
2. NAME이 milk인 것만 조회한 테이블(M)을 만든다.
3. 두 테이블 간에 card_id가 같은 것을 조건으로 조인한다.
4. 조인된 테이블에서 cart_id값 조회

=> 인라인뷰로 테이블을 두개를 따로 만들었는데, 하나의 서브쿼리로도 충분히 계산할 수 있기 때문에 비효율적인 코드라 생각됨.

select M.CART_ID from (SELECT * from CART_PRODUCTS where NAME = 'Yogurt') Y 
join (SELECT * from CART_PRODUCTS where NAME = 'Milk') M on M.CART_ID = Y.CART_ID
order by M.CART_ID

 

 

[다른 사람 풀이]   - where절에 서브쿼리 사용

where절에 하나의 서브쿼리를 사용하여 in연산자로 일치하는 cart_id 있는지 조회

# 1. SubQuery - where절에 서브쿼리 사용
select CART_ID from CART_PRODUCTS 
where CART_ID in (select CART_ID from CART_PRODUCTS  where NAME = 'Milk')  AND NAME = 'Yogurt'
order by  CART_ID

 

 

[다른 사람 풀이]  - SELF JOIN

한 테이블을 다른 두 이름으로 별칭하여 연관지어 사용.

조건을 하나의 select문에서 한번에 처리함으로서 내 풀이의 비효율적인 인라인 뷰 방식을 개선시킬 수 있다.

# 2.SELF JOIN
select A.CART_ID from CART_PRODUCTS A, CART_PRODUCTS B
where A.CART_ID = B.CART_ID 
and (A.NAME =  'Milk' and B.NAME = 'Yogurt') 
order by  A.CART_ID

 

 

 

 

 

 


 

다른 사람 풀이 :  https://blue-boy.tistory.com/194