SQL 기초 4 _ Subquery

백지연·2022년 12월 4일
0

6. Subquery

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

1) Where 에 들어가는 Subquery :

  • Subquery의 결과를 조건에 활용하는 방식으로 유용하게 사용
  • where 필드명 in (subquery)
#카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력해주고 싶을 때
select * from users u
where u.user_id in (select o.user_id from orders o 
					where o.payment_method = 'kakaopay');

2) Select 에 들어가는 Subquery :

  • 기존 테이블에 함께 보고싶은 통계 데이터를 손쉽게 붙이는 것에 사용
  • select 필드명, 필드명, (subquery) from ..
# '오늘의 다짐' 데이터를 보고 싶은데 '오늘의 다짐' 좋아요의 수가, 본인이 평소에 받았던 좋아요 수에 비해 얼마나 높고 낮은지
select c.checkin_id, c.user_id, c.likes, 
	(select avg(likes) from checkins c2
	where c2.user_id = c.user_id) as avg_like_user
from checkins c;

3) From 에 들어가는 Subquery (가장 많이 사용되는 유형!)

  • 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때
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

with 절

  • 계속 서브쿼리가 붙어 헷갈리때 쓰는 것이 with 절
with table1 as (
	select course_id, count(distinct(user_id)) as cnt_checkins from checkins
	group by course_id
), table2 as (
	select course_id, count(*) as cnt_total from orders
	group by course_id
)
select c.title,
       a.cnt_checkins,
       b.cnt_total,
       (a.cnt_checkins/b.cnt_total) as ratio
from table1 a inner join table2 b on a.course_id = b.course_id
inner join courses c on a.course_id = c.course_id
profile
문어발 공부

0개의 댓글