1차 프로젝트 때 Django orm 쿼리를 실제 SQL 쿼리로 바꿔보면서
inner join, outer join 을 언제 써야 하는지에 대해 익혀보게 되는 계기가 되었다.
테이블은 다음과 같이 구성돼있다.
SELECT * a.id
FROM orders a INNER JOIN order_status b
ON a.order_status_id = b.id
WHERE b.status = "구매전";
가져온 order_id 가 있는 테이블과 carts 테이블을 inner join 한다. (left join 해도 상관없음)
그 뒤 order_id 로 group by 한 뒤 sum(carts.quantity) 가 8 보다 큰 order_id 만 뽑아온다.
SELECT b.order_id
FROM (SELECT * a.id
FROM orders a INNER JOIN order_status b
ON a.order_status_id = b.id
WHERE b.status = "구매전") a INNER JOIN carts b
ON a.id = b.order_id
GROUP BY order_id
HAVING SUM(b.quantity) > 8;
SELECT c.name
FROM (SELECT b.order_id
FROM (SELECT * a.id
FROM orders a INNER JOIN order_status b
ON a.order_status_id = b.id
WHERE b.status = "구매전") a INNER JOIN carts b
ON a.id = b.order_id
GROUP BY order_id
HAVING SUM(b.quantity) > 8) a INNER JOIN orders b
ON a.order_id = b.id
INNER JOIN users c
ON b.user_id = c.id;