SQL_4주차_Subquery
1) Subquery란?
쿼리 안의 쿼리로, 한 가지 식으로 정리가 가능해져 SQL 쿼리가 훨씬 간단해진다
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 user_id,name,email from users u
where user_id in(
select user_id from orders o
where payment_method ='kakaopay'
)
2) 자주 사용되는 Subquery 유형
- Where 에 들어가는 Subquery
-> where 필드명 in (subquery)
ex) 카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력
select * from users u
where user_id in(
select user_id from orders o
where payment_method ='kakaopay'
)
+ 쿼리가 실행되는 순서
(1) from 실행: users 데이터를 가져와줌
(2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌
(3) where .. in 절에서 subquery의 결과에 해당되는 'user_id의 명단' 조건으로 필터링 해줌
(4) 조건에 맞는 결과 출력
- Select 에 들어가는 Subquery
-> select 필드명, 필드명, (subquery) from ..
select c.checkin_id ,
c.user_id ,
c.likes,
( # 새로운 열을 만들어 밑에 실행되는 값을 추가해줌
select avg(likes) from checkins # select가 될 때마다 하나하나에 대해 다 Subquery가 실행됨
where user_id =c.user_id
) as avg_likes_user
from checkins c
- From 에 들어가는 Subquery (가장 많이 사용되는 유형!) = 내가 만든 select문을 마치 원래 있던 테이블처럼 사용하는 것
ex) 유저별 평균 포인트를 구하시오
select pu.user_id ,pu.point, a.avg_likes from point_users pu
inner join (
select user_id ,round(avg(likes),1) as avg_likes from checkins c
-> # a 테이블에 속함
group by user_id -> # a 테이블에 속함
)a on pu.user_id = a.user_id # a 테이블과 point_users 테이블의 user_id가 동일
+ 쿼리가 실행되는 순서
(1) 먼저 서브쿼리의 select가 실행
(2) 이것을 테이블처럼 여기고 밖의 select가 실행!