: 쿼리 안의 쿼리로 하위 쿼리의 결과를 상위 쿼리에서 사용할 수 있다.
with 구문을 통해 더 간결하게 볼 수 있다.
subquery 쓰기 전
select u.user_id, u.name, u.email from users u inner join orders o on u.user_id = o.user_id where o.payment_method = 'kakaopay'
subquery 쓴 후
select u.user_id, u.name, u.email from users u where u.user_id in ( select user_id from orders where payment_method = 'kakaopay' )
subquery 쓰기 전
특정 user_id의 likes 평균 구하기select avg(likes) from checkins where user_id = '487a872'
subquery 쓴 후
select c.checkin_id, c.user_id, c.likes, ( select avg(likes) from checkins where user_id = c.user_id ) as avg_likes_user from checkins
: select 절이 돌아 갈 때 마다 select 절의 user_id where 절 안에 있는 c.user_id로 들어와 서 그 user_id로 likes 평균을 구해 찍어준다.
subquery 쓰기 전
user_id별 likes 평균 구하기select user_id, round(avg(likes),1) as avg_likes from checkins group by user_id
subquery 쓴 후
point가 많은 user가 likes수도 많이 받았을까?select pu.user_id, a.avg_like, pu.point from point_users pu inner join ( select user_id, round(avg(likes),1) as avg_like from checkins group by user_id ) a on pu.user_id = a.user_id
: inner join() a 라고 해줬는데, ()안에 있는 select 절이 또다른 a라는 테이블이 되는 것이다.
그래서 그 이후엔 a. 을 붙여준다.
깔끔한 정리@!!