[스파르타 코딩 클럽] SQL 4주차 개발일지

2021. 7. 19. 16:29·스파르타 코딩클럽/SQL
목차
  1. 1. Subquery
  2. 2. Where 절에 들어가는 Subquery
  3. 3. Select 에 들어가는 Subquery
  4. 4. From 에 들어가는 Subquery

1. Subquery

Subquery 는 쿼리안의 쿼리라는 뜻으로, 하위 쿼리의 결과를 상위 쿼리에 사용하면, SQL 쿼리가 훨씬 간단해진다.

 

kakaopay 로 결제한 유저들의 정보를 볼려면,

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

이와 같이 조금 더 직관적으로 볼 수 있다.

 

2. Where 절에 들어가는 Subquery

Where 은 조건문으로, 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')

이렇게 표현할 수 있다.

 

위의 코드를 통해 쿼리가 실행되는 순서를 이렇게 상상하면 편하다.

 

 (1) from 실행: users 데이터를 가져와줌

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

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

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

 

3. Select 에 들어가는 Subquery

Select 는 결과를 출력하는 부분으로 기존 테이블에 함께 보고싶은 통계 데이터를 손쉽게 부이는 것에 사용합니다. (select 필드명, 필드명, (subquery) from))

 

예를 들어, '오늘의 다짐' 데이터를 보고 싶은데 '오늘의 다짐' 좋아요의 수가, 본인이 평소 에 받았던 좋아요 수에 비해 얼마나 높고 낮은지가 알고싶을 경우,

 

평균을 먼저 구하고,(user_id='4b8a10e6' 을 예시로)

select avg(likes) from checkins c2
where c2.user_id = '4b8a10e6'

그러면 이렇게 표현이 가능하다.

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

 

이 쿼리가 실행되는 순서를 보면,

 

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

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

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

 (4) 함께 출력해준다!

 

4. From 에 들어가는 Subquery

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

이렇게 볼 수 있다.

'스파르타 코딩클럽 > SQL' 카테고리의 다른 글

[스파르타 코딩 클럽] SQL 3주차 개발일지  (0) 2021.07.05
[스파르타 코딩 클럽] SQL 2주차 개발일지  (0) 2021.06.28
[스파르타 코딩 클럽] SQL 1주차 개발일지  (0) 2021.06.21
  1. 1. Subquery
  2. 2. Where 절에 들어가는 Subquery
  3. 3. Select 에 들어가는 Subquery
  4. 4. From 에 들어가는 Subquery
'스파르타 코딩클럽/SQL' 카테고리의 다른 글
  • [스파르타 코딩 클럽] SQL 3주차 개발일지
  • [스파르타 코딩 클럽] SQL 2주차 개발일지
  • [스파르타 코딩 클럽] SQL 1주차 개발일지
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[스파르타 코딩 클럽] SQL 4주차 개발일지
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.