-
[MySQL] 수업 4주차 - Subquery데이터 공부하기 2022. 8. 29. 22:47
[목차]
- Subquery(서브쿼리)
- 실전 SQL 문법
Subquery
- 하나의 SQL 쿼리 안에 또다른 SQL 쿼리가 있는 것을 의미합니다.
예시 1. kakaopay로 결제한 유저들의 정보 보기 (기본)
예시 2. 1. kakaopay로 결제한 유저들의 정보 보기 (서브쿼리 사용)
이렇게 Tab을 활용해서 쿼리문 안에 쿼리문을 넣는 구조가 서브쿼리다.
*주의 ( ) 사용을 잘해야지 나중에 위치를 헷갈리지 않는다!
Subquery 활용 Top3
- where, select, from
1. Where
카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력해주고 싶을 때
select * from users u
where u.user_id in (select o.user_id from orders o
where o.payment_method = 'kakaopay');
2. Select
'오늘의 다짐' 좋아요의 수가, 본인이 평소에 받았던 좋아요 수에 비해 얼마나 높고 낮은지
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 (가장 많이 쓰는 유형!), 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때 사용
우선 유저 별 좋아요 평균
select user_id, round(avg(likes),1) as avg_like from checkins
group by user_id
여기서 해당 유저 별 포인트
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 * from point_users pu
WHERE point > (
SELECT avg(point) from point_users pu -> 섭쿼리로 매번 평균을 구하지 않고 실시간으로 변하는 평균을 자동으로 측정해줌
)
2. 이씨 성을 가진 유저의 포인트의 평균보다 큰 유저들의 데이터 추출
SELECT * from point_users pu
where point > (
select AVG(pu.point) from point_users pu
inner join users u on pu.user_id = u.user_id
WHERE name = "이**"
)
'데이터 공부하기' 카테고리의 다른 글
[MySQL] 실전 유용 문법 - 문자열 (0) 2022.08.29 [MySQL] 'with 절' in Subquery (0) 2022.08.29 [MySQL] 수업 3주차 - Join (0) 2022.08.08 [MySQL] SQL 중요 문법, 별칭 기능 Alias (0) 2022.08.01 [MySQL] 수업 2주차 - Group by, Order by, Where (0) 2022.08.01