E-room 2022. 7. 2. 14:57
728x90

Subquery

 

쿼리 안의 쿼리라는 의미

하위 쿼리의 결과를 상위 쿼리에서 사용하면, SQL 쿼리가 훨씬 간단해짐.

 

Subquery를 사용하지 않아도 원하는 데이터를 얻어낼 수 있겠지만, 더 편하고 간단하게 얻기 위해 사용

 

1. where 에 들어가는 경우

    where 필드명 in (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) from 실행: users 데이터를 가져와줌

(2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌

(3) where .. in 절에서 subquery의 결과에 해당되는 'user_id의 명단' 조건으로 필터링 해줌

(4) 조건에 맞는 결과 출력

 

 

2. Select 에 들어가는 경우

    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) from checkins c

실행 순서

(1) 밖의 select * from 문에서 데이터를 한줄한줄 출력하는 과정에서

(2) select 안의 subquery가 매 데이터 한줄마다 실행되는데

(3) 그 데이터 한 줄의 user_id를 갖는 데이터의 평균 좋아요 값을 subquery에서 계산해서

(4) 함께 출력해준다

 

 

3. From 에 들어가는 경우 (가장 많이 사용되는 유형)

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

실행 순서

(1) 먼저 서브쿼리의 select가 실행되고,

(2) 이것을 테이블처럼 여기고 밖의 select가 실행

728x90