SQL - Subquery

Walter Mitty·2022년 5월 25일
0

SQL

목록 보기
7/15
post-custom-banner

Subquery

: 쿼리 안의 쿼리로 하위 쿼리의 결과를 상위 쿼리에서 사용할 수 있다.
with 구문을 통해 더 간결하게 볼 수 있다.

  • where 절에 들어가는 subquery

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'
)

  • select 절에 들어가는 subquery

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 평균을 구해 찍어준다.


  • from 절에 들어가는 subquery (가장 많이 사용됨)

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. 을 붙여준다.

post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 5월 26일

깔끔한 정리@!!

답글 달기